Dela via


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-previewtable.

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-previewtable funktionens fallback faller tillbaka till standardsorteringen av UTF8_BINARY.
  • En MAP kan inte ha en nyckel som är en sorterad sträng.
  • UniForm fungerar inte med sortering.