Freigeben über


Sortierungsunterstützung für Delta Lake

Sie können Sortierungen für Zeichenfolgenfelder angeben und Delta-Tabellen lesen, die Sortierungen in Databricks Runtime 16.4 LTS und höher verwenden.

Durch das Aktivieren der Sortierung für eine Tabelle wird das collations-preview Writer-Tabellenfeature hinzugefügt. Siehe Delta Lake Featurekompatibilität und Protokolle.

Hinweis

Standardmäßig legt Delta Lake die Sortierung für Zeichenfolgenfelder auf UTF8_BINARY.

Erstellen Sie eine Tabelle mit Kollation auf Spaltenebene

Sie können eine neue Tabelle mit Sortierung auf Spaltenebene erstellen, indem Sie den folgenden Befehl verwenden:

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

Ändern einer Tabellenspalte zum Angeben der Sortierung

Sie können eine vorhandene Spalte aktualisieren, um sortierung mit den folgenden Befehlen zu verwenden:

ALTER TABLE tableName ALTER COLUMN columnName TYPE newType

So entfernen Sie eine nicht standardmäßige Sortierung (sofern vorhanden):

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY

So ändern Sie die Spaltensortierung in utf8_lcase:

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE

Durch das Ändern der Sortierung für eine Tabelle werden statistiken oder datenlayouts für zuvor geschriebene Daten nicht automatisch aktualisiert. Um das Überspringen von Dateien über historische Daten unter der neuen Sortierung zu verbessern, empfiehlt Databricks Folgendes:

  • Führen Sie ANALYZE table_name COMPUTE DELTA STATISTICS aus, um die Statistik zum Dateiüberspringen für vorhandene Datendateien zu aktualisieren.

  • Führen Sie für Tabellen mit aktivierter Flüssigkeitsclusterung OPTIMIZE FULL table_name aus, um die Flüssigkeitsclusterung zu aktualisieren.

  • Gehen Sie für Tabellen, die verwenden ZORDER, wie folgt vor:

    • Deaktivieren Sie die inkrementelle Optimierung in der Spark-Sitzung, indem Sie die Standardkonfiguration spark mit dem folgenden Befehl außer Kraft setzen:

      SET spark.databricks.optimize.incremental=false
      
    • Führen Sie den Befehl aus OPTIMIZE table_name ZORDER BY zorder_column , um alle vorhandenen Datendateien neu zu schreiben.

Die Kollation wird stets von Azure Databricks in den Ergebnissen der Abfrage berücksichtigt.

Deaktivieren der Kollation für eine Tabelle

Sie müssen die Sortierung für jede Zeichenfolgenspalte in einer Tabelle explizit deaktivieren, bevor Sie das Sortierfeature ablegen.

Verwenden Sie die folgende Syntax, um die Sortierung für eine Spalte auf folgendes festzulegen UTF8_BINARY:

ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY

Führen Sie zum Ablegen des Tabellenfeatures den folgenden Befehl aus:

ALTER TABLE table_name
DROP FEATURE collations-preview

Weitere Informationen finden Sie unter Löschen eines Delta Lake-Tabellenfeatures und Herabstufen des Tabellenprotokolls.

Schemaentwicklung und Sortierung

Die Sortierung interagiert mit der Schemaentwicklung mithilfe der folgenden Regeln:

  • Wenn in der Zieltabelle bereits eine Quellspalte vorhanden ist, bleibt die Sortierung der Spalte in der Zieltabelle unverändert.
  • Wenn eine Quellspalte die Sortierung angegeben hat, verwendet die Spalte, die der Zieltabelle hinzugefügt wurde, die angegebene Sortierung.
  • Wenn die Zieltabelle keine Sortierung aktiviert hat, wenn eine Spalte mit Sortierung hinzugefügt wird, wird das collations-preview Tabellenfeature aktiviert.

Einschränkungen

Für Tabellen mit aktivierter Sortierung gelten die folgenden Einschränkungen:

  • Delta-Tabellen, die extern mit einer Sortierung erstellt wurden, die von der Databricks-Runtime nicht erkannt wird, lösen eine Ausnahme aus, wenn abgefragt wird.
  • Es gibt keine Unterstützung für Delta Sharing.
  • Zusammengefasste Spalten können nicht mit CHECK Einschränkungen verwendet werden.
  • Generierte Spalten können keine Kollation verwenden.
  • Zusammengeführte Spalten können nicht mit Bloom-Filter-Indexspalten verwendet werden.
  • Es gibt keine Unterstützung für die Sortierung in OSS Delta Lake-APIs für Scala oder Python. Zum Aktivieren der Sortierung müssen Sie Spark SQL- oder DataFrame-APIs verwenden.
  • Dynamische Partitionsüberschreibung wird für sortierte Spalten nicht unterstützt.
  • Auf sortierte Spalten kann in strukturierten Streaming-Zustandsabfragen nicht verwiesen werden.
  • Externe Leser, die die collations-preview Tabellenfunktion ignorieren, fallen auf die Standardsortierung von UTF8_BINARY zurück.
  • Ein MAP kann keinen Schlüssel haben, der eine sortierte Zeichenfolge ist.
  • UniForm funktioniert nicht mit Sortierungen.