Enable automatic table schema evolution¶
Semistrukturierte Daten neigen dazu, sich im Laufe der Zeit weiterzuentwickeln. Systeme, die Daten generieren, fügen neue Spalten hinzu, um zusätzliche Informationen unterzubringen, sodass sich die nachgelagerten Tabellen entsprechend weiterentwickeln müssen.
Die Struktur der Tabellen in Snowflake kann sich automatisch weiterentwickeln, um die Struktur neuer Daten zu unterstützen, die von den Datenquellen empfangen werden. Snowflake unterstützt Folgendes:
Automatisches Hinzufügen neuer Spalten
Automatisches Löschen der NOT-NULL-Einschränkung von Spalten, die in neuen Datendateien fehlen
Um die Tabellenschemaentwicklung zu aktivieren, gehen Sie wie folgt vor:
Wenn Sie eine neue Tabelle erstellen und dabei den Befehl CREATE TABLE verwenden, setzen Sie den Parameter
ENABLE_SCHEMA_EVOLUTIONauf TRUE.Bei einer bestehenden Tabelle ändern Sie die Tabelle mit dem Befehl ALTER TABLE und setzen den Parameter
ENABLE_SCHEMA_EVOLUTIONauf TRUE.
Beim Laden von Daten aus Dateien erfolgt eine Tabellenspaltenentwicklung, wenn die folgenden Bedingungen erfüllt sind:
In der Snowflake-Tabelle ist der Parameter
ENABLE_SCHEMA_EVOLUTIONauf TRUE gesetzt.Die Anweisung COPY INTO <Tabelle> verwendet die Option
MATCH_BY_COLUMN_NAME.Die Rolle, mit der die Daten geladen werden, hat die EVOLVE SCHEMA- oder die OWNERSHIP-Berechtigung für die Tabelle.
Außerdem muss für die Schemaentwicklung mit CSV bei Verwendung von MATCH_BY_COLUMN_NAME und PARSE_HEADER der Parameter ERROR_ON_COLUMN_COUNT_MISMATCH auf „false“ gesetzt sein.
Die Schemaentwicklung ist ein eigenständiges Feature, kann aber zusammen mit der Schemaerkennungsunterstützung für das Abrufen von Spaltendefinitionen für eine Menge von Dateien des Cloudspeicher verwendet werden. In Kombination ermöglichen diese Features kontinuierliche Datenpipelines, indem neue Tabellen aus einer Menge von Datendateien in einem Cloudspeicher erstellt und dann Spalten der Tabellen geändert werden, wenn sich das Schema der neuen Quelldatendateien durch Hinzufügen oder Löschen von Spalten weiterentwickelt.
Nutzungshinweise¶
Diese Feature unterstützt Apache Avro-, Apache Parquet-, CSV-, JSON- und ORC-Dateien.
Dieses Feature ist auf COPY INTO <Tabelle>-Anweisungen und das Laden von Daten mit Snowpipe beschränkt. INSERT-Operationen können das Schema der Zieltabelle nicht automatisch weiterentwickeln.
Snowpipe Streaming-Datenlasten, die das Snowflake Ingest-SDK direkt nutzen, werden von der Schemaentwicklung nicht unterstützt. Der Kafka-Konnektor mit Snowpipe Streaming unterstützt Schemaerkennung und Schemaentwicklung.
Standardmäßig ist dieses Feature darauf beschränkt, maximal 100 Spalten hinzuzufügen oder nicht mehr als 1 Schema pro COPY-Operation weiterzuentwickeln. Wenn Sie mehr als 100 hinzugefügte Spalten oder 1 Schema pro COPY-Operation anfordern möchten, wenden Sie sich an den Snowflake-Support.
Es gibt keine Beschränkung für das Löschen von NOT NULL-Spalteneinschränkungen.
Die Schemaentwicklung wird durch die
SchemaEvolutionRecord-Ausgabe in den folgenden Ansichten und Befehlen verfolgt: INFORMATION_SCHEMA-Ansicht COLUMNS, ACCOUNT_USAGE-Ansicht COLUMNS, Befehl DESCRIBE TABLE und Befehl SHOW COLUMNS.Für den Kafka-Konnektor mit Snowpipe Streaming wird die Entwicklung des Schemas in der Ausgabe von
SchemaEvolutionRecordjedoch nicht verfolgt. Die Ausgabe vonSchemaEvolutionRecordzeigt immer NULL an.Wenn eine Spalte nach einer Schemaentwicklung manuell umbenannt oder geändert wird, wird der Datensatz der Schema-Evolution geleert.
Die Schemaentwicklung wird von Aufgaben nicht unterstützt.
Unterstützung der Schemaentwicklung: Vergleich der Datenaufnahmemethoden¶
Das spezifische Metadatenfeld SchemaEvolutionRecord wird zum Verfolgen der Schemaentwicklung verwendet. Sie können das Feld mit dem Befehl INFORMATION_SCHEMA.COLUMNS View, DESCRIBE TABLE und mit dem Befehl SHOW COLUMNS anzeigen.
Die folgende Tabelle fasst die Unterstützung der Schemaentwicklung und das entsprechende SchemaEvolutionRecord-Verfolgungsverhalten über die verschiedenen Snowflake-Datenaufnahmemethoden hinweg zusammen:
Datenaufnahmemethoden |
Architektur oder Kontext |
Status der Unterstützung der Schemaentwicklung |
SchemaEvolutionRecord-Verfolgungsverhalten |
|---|---|---|---|
Dateibasiert (Batch/Microbatch) |
Befehl COPY INTO <table> |
Vollständig unterstützt |
Sichtbar in Tracking-Ansichten/-Befehlen. |
Dateibasiert (Batch/Microbatch) |
Snowpipe, mit Verwendung des automatischen Ladens |
Vollständig unterstützt |
Sichtbar in Tracking-Ansichten oder -Befehlen. |
Streaming auf Zeilenebene |
Snowpipe Streaming (Architektur mit hoher Performance) |
Vollständig unterstützt |
Sichtbar in Tracking-Ansichten oder -Befehlen. |
Streaming auf Zeilenebene |
Snowpipe Streaming mit klassischer Architektur; zum Beispiel Kafka-Konnektor |
Es wird nur die klassischen Architektur mit Kafka-Konnektor unterstützt, und die Verfolgung ist beschränkt. |
Zeigt immer NULL in Verfolgungsansichten oder -befehlen an. |
Beispiele¶
Das folgende Beispiel erstellt eine Tabelle mit Spaltendefinitionen, die aus einer Menge von Parquet-Daten abgeleitet werden. Wenn die automatische Tabellenschemaentwicklung für die Tabelle aktiviert ist, werden beim Laden von Daten aus Parquet-Dateien, die zusätzliche Name/Wert-Paare enthalten, automatisch Spalten zur Tabelle hinzugefügt:
Beachten Sie, dass der Stagingbereich mystage und das Dateiformat my_parquet_format, auf die in der Anweisung verwiesen wird, bereits vorhanden sein müssen. Ein Satz von Dateien muss bereits in dem Stagingbereich an dem Cloudspeicherort bereitgestellt sein, auf den in der Stagingbereichsdefinition verwiesen wird.
Das folgende Beispiel baut auf einem Beispiel aus dem Thema INFER_SCHEMA auf: