Sorteringsstöd för Delta Lake
Du kan ange sortering för strängfält i Delta tables i Databricks Runtime 16.1 och senare.
Om du aktiverar sortering för en table läggs funktionen collations-preview
skrivare table. Du kan läsa tables med sortering aktiverat i Databricks Runtime 15.4 och senare. Se Hur hanterar Azure Databricks Delta Lake-funktionskompatibilitet?.
Not
Som standard anger Delta Lake sortering för strängfält till UTF8_BINARY
.
Skapa en table med sortering på column-nivån
Du kan skapa en ny table med sortering på column-nivå med hjälp av följande kommando:
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
Ändra en tablecolumn för att ange sortering
Du kan update en befintlig column för att tillämpa sortering med hjälp av följande kommandon:
ALTER TABLE tableName ALTER COLUMN columnName TYPE newType
För att utföra remove på en icke-standard sortering (om en finns):
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY
Så här ändrar du column-sorteringen till utf8_lcase
:
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE
Att ändra sortering för en tableupdate inte automatiskt statistik eller datalayout för tidigare skrivna data. För att förbättra filsökning över historiska data i den nya sorteringsordningen rekommenderar Databricks följande:
- Kör
ANALYZE table_name COMPUTE DELTA STATISTICS
till update-fil och hoppa över statistik för befintliga datafiler. - För tables med flytande klustring aktiverat, kör du flytande klustring från
OPTIMIZE FULL table_name
till update. - Gör följande för tables som använder
ZORDER
:Inaktivera inkrementell optimering i Spark-sessionen genom att åsidosätta standardkonfigurationen för Spark med följande kommando:
SET spark.databricks.optimize.incremental=false
Kör
OPTIMIZE table_name ZORDER BY zorder_column
för att skriva om alla befintliga datafiler.
Sorteringsordning respekteras alltid av Azure Databricks i frågeresultaten.
Inaktivera sortering för en table
Du måste uttryckligen inaktivera sortering för varje sträng column i en table innan du tar bort sorteringsfunktionen.
Använd följande syntax för att set sortera för en column till UTF8_BINARY
:
ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY
Om du vill släppa funktionen table kör du följande kommando:
ALTER TABLE table_name
DROP FEATURE collations-preview
Se Drop Delta table funktioner.
Schema utveckling och sammanställning
Sortering samverkar med schema-utveckling med hjälp av följande regler:
- Om en källa column redan finns i mål-table, förblir sorteringen av column i mål-table oförändrad.
- Om en källa column har sorteringsordningen specificerad använder column som läggs till i målet table den specificerade sorteringsordningen.
- Om table inte har kollationering aktiverad när en column med kollationering läggs till, aktiveras funktionen
collations-preview
table.
Begränsningar
Följande begränsningar finns för tables med sortering aktiverat:
- Delta tables som skapats externt med en sorteringsmetod som inte känns igen av Databricks Runtime utlöser ett undantag när en fråga ställs.
- Det finns inget stöd för Delta Sharing.
- Kombinerade columns kan inte användas med
CHECK
-begränsningarna. - Genererade columns kan inte använda sortering.
- Kollaterade columns kan inte användas med bloomfilterindex columns.
- Det finns inget stöd för sortering i OSS Delta Lake API:er för Scala eller Python. Du måste använda Spark SQL- eller DataFrame-API:er för att aktivera sortering.
- Dynamisk partition överskrivning stöds inte på sammanställda columns.
- Sammanställt columns kan inte refereras till i tillståndsbaserade frågor för strukturerad strömning.
- Externa läsare som inte respekterar
collations-preview
table funktionens fallback faller tillbaka till standardsorteringen avUTF8_BINARY
. - En
MAP
kan inte ha en nyckel som är en sorterad sträng. - UniForm fungerar inte med sortering.