Udostępnij za pośrednictwem


Obsługa sortowania dla Delta Lake

Możesz określić sortowanie dla pól tekstowych w tabelach Delta w środowisku Databricks Runtime 16.1 lub nowszym.

Włączenie sortowania dla tabeli powoduje dodanie funkcji zapisu tabeli collations-preview. Tabele można odczytywać z włączonym sortowaniem w środowisku Databricks Runtime 15.4 lub nowszym. Zobacz Jak usługa Azure Databricks zarządza zgodnością funkcji usługi Delta Lake?.

Notatka

Domyślnie Delta Lake ustawia kolejność dla pól tekstowych na UTF8_BINARY.

Tworzenie tabeli z sortowaniem na poziomie kolumny

Nową tabelę można utworzyć z sortowaniem na poziomie kolumny przy użyciu następującego polecenia:

CREATE TABLE $tableName (
 nonCollatedColName STRING,
 collatedColName STRING COLLATE UNICODE,
 structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
 mapColName MAP<STRING, STRING COLLATE UNICODE>,
 arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta

Zmień kolumnę tabeli, aby określić sortowanie

Aby użyć sortowania, możesz zaktualizować istniejącą kolumnę przy użyciu następujących poleceń:

ALTER TABLE tableName ALTER COLUMN columnName TYPE newType

Aby usunąć sortowanie inne niż domyślne (jeśli istnieje):

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY

Aby zmienić sortowanie kolumn na utf8_lcase:

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE

Zmiana sortowania dla tabeli nie powoduje automatycznej aktualizacji statystyk ani układu danych dla wcześniej zapisanych danych. Aby ulepszyć pomijanie plików historycznych w ramach nowego sortowania, usługa Databricks zaleca następujące zalecenia:

  • Uruchom ANALYZE table_name COMPUTE DELTA STATISTICS, aby zaktualizować statystyki pomijanych plików dla istniejących plików danych.
  • W przypadku tabel z włączonym klastrowaniem płynnym uruchom OPTIMIZE FULL table_name, aby zaktualizować klastrowanie płynne.
  • W przypadku tabel korzystających z ZORDERwykonaj następujące czynności:
    • Wyłącz optymalizację przyrostową w sesji platformy Spark, nadpisując domyślną konfigurację platformy Spark za pomocą następującego polecenia:

      SET spark.databricks.optimize.incremental=false
      
    • Uruchom OPTIMIZE table_name ZORDER BY zorder_column, aby ponownie zapisać wszystkie istniejące pliki danych.

Sortowanie będzie zawsze uwzględniane przez usługę Azure Databricks w wynikach zapytania.

Wyłącz sortowanie dla tabeli

Przed usunięciem funkcji sortowania należy jawnie wyłączyć sortowanie dla każdej kolumny ciągu w tabeli.

Użyj następującej składni, aby ustawić sortowanie dla kolumny na UTF8_BINARY:

ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY

Aby usunąć funkcję tabeli, uruchom następujące polecenie:

ALTER TABLE table_name
DROP FEATURE collations-preview

Zobacz funkcje tabeli delty drop.

Ewolucja i sortowanie schematu

Sortowanie współdziała z ewolucją schematu przy użyciu następujących reguł:

  • Jeśli kolumna źródłowa już istnieje w tabeli docelowej, sortowanie kolumny w tabeli docelowej pozostaje niezmienione.
  • Jeśli określona kolumna źródłowa zawiera sortowanie, kolumna dodana do tabeli docelowej używa określonego sortowania.
  • Jeśli tabela docelowa nie ma włączonego sortowania po dodaniu kolumny z sortowaniem, funkcja tabeli collations-preview jest włączona.

Ograniczenia

Istnieją następujące ograniczenia dotyczące tabel z włączonym sortowaniem:

  • Tabele Delta utworzone zewnętrznie z sortowaniem nie rozpoznanym przez Databricks Runtime wywołują wyjątek przy próbie ich zapytania.
  • Nie ma obsługi Delta Sharing.
  • Nie można używać kolumn sortowania z ograniczeniami CHECK.
  • Wygenerowane kolumny nie mogą używać sortowania.
  • Kolumny kolacjonowane nie mogą być używane z kolumnami indeksu Filtru Blooma.
  • Nie ma obsługi sortowania w interfejsach API Delta Lake dla języka Scala lub Python, gdy używa się oprogramowania open-source. Aby włączyć sortowanie, należy użyć interfejsów API spark SQL lub DataFrame.
  • Zastępowanie partycji dynamicznej nie jest obsługiwane w kolumnach z uporządkowanymi danymi.
  • Nie można odwoływać się do posortowanych kolumn w zapytaniach stanowych przesyłania strumieniowego z użyciem struktur.
  • Czytniki zewnętrzne, które nie przestrzegają funkcji tabeli collations-preview, wracają do domyślnego sortowania UTF8_BINARY.
  • MAP nie może mieć klucza, który jest posortowanym ciągiem.
  • Aplikacja UniForm nie działa z sortowaniami.