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
ZORDER
wykonaj 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 sortowaniaUTF8_BINARY
. -
MAP
nie może mieć klucza, który jest posortowanym ciągiem. - Aplikacja UniForm nie działa z sortowaniami.