Kategorien:

DDL für Tabellen, Ansichten und Sequenzen

CREATE EXTERNAL TABLE TYPE = CSV | JSON | AVRO | ORC | PARQUET [ ... ]

Erstellt eine neue externe Tabelle im aktuellen/angegebenen Schema oder ersetzt eine bestehende externe Tabelle. Bei Abfragen liest eine externe Tabelle Daten aus einer Gruppe von einer oder mehreren Dateien in einem angegebenen externen Stagingbereich und gibt die Daten in einer einzelnen VARIANT-Spalte aus.

Zusätzliche Spalten können definiert werden, wobei jede Spaltendefinition aus einem Namen, einem Datentyp und optional der Angabe besteht, ob für die Spalte ein Wert (NOT NULL) erforderlich ist oder ob für die referenzielle Integrität Einschränkungen gelten (Primärschlüssel, Fremdschlüssel usw.). Weitere Informationen dazu finden Sie in den Nutzungshinweisen.

Siehe auch:

ALTER EXTERNAL TABLE, DROP EXTERNAL TABLE, SHOW EXTERNAL TABLES

Unter diesem Thema:

Syntax

CREATE [ OR REPLACE ] EXTERNAL TABLE [IF NOT EXISTS]
  <table_name>
    ( [ <col_name> <col_type> AS <expr> | <part_col_name> <col_type> AS <part_expr> ]
      [ inlineConstraint ]
      [ , <col_name> <col_type> AS <expr> | <part_col_name> <col_type> AS <part_expr> ... ]
      [ , ... ] )
  cloudProviderParams
  [ PARTITION BY ( <part_col_name> [, <part_col_name> ... ] ) ]
  [ WITH ] LOCATION = externalStage
  [ REFRESH_ON_CREATE =  { TRUE | FALSE } ]
  [ AUTO_REFRESH = { TRUE | FALSE } ]
  [ PATTERN = '<regex_pattern>' ]
  FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET } [ formatTypeOptions ] } )
  [ AWS_SNS_TOPIC = <string> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]

Wobei:

inlineConstraint ::=
  [ NOT NULL ]
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) } }
  [ <constraint_properties> ]

Weitere Details zu Inline-Einschränkungen finden Sie unter CREATE | ALTER TABLE … CONSTRAINT.

cloudProviderParams (for Microsoft Azure) ::=
  [ INTEGRATION = '<integration_name>' ]
externalStage ::=
  @[<namespace>.]<ext_stage_name>[/<path>]
formatTypeOptions ::=
-- If FILE_FORMAT = ( TYPE = CSV ... )
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     RECORD_DELIMITER = '<character>' | NONE
     FIELD_DELIMITER = '<character>' | NONE
     SKIP_HEADER = <integer>
     SKIP_BLANK_LINES = TRUE | FALSE
-- If FILE_FORMAT = ( TYPE = JSON ... )
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
-- If FILE_FORMAT = ( TYPE = AVRO ... )
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
-- If FILE_FORMAT = ( TYPE = PARQUET ... )
     COMPRESSION = AUTO | SNAPPY | NONE

Erforderliche Parameter

Tabellenname

Zeichenfolge, die den Bezeichner (d. h. den Namen) für die Tabelle angibt; muss für das Schema, in dem die Tabelle erstellt wird, eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß- und Kleinschreibung zu beachten.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

[ WITH ] LOCATION =

Gibt den externen Stagingbereich an, in dem die Dateien mit den zu lesenden Daten bereitgestellt werden:

@[Namespace.]Name_des_externen_Stagingbereichs[/Pfad]

Dateien befinden sich im angegebenen, benannten externen Stagingbereich.

Wobei:

  • Namespace ist die Datenbank und/oder das Schema, in dem sich der externe Stagingbereich befindet, in Form von Datenbankname.Schemaname oder Schemaname. Die Angabe ist optional, wenn in der Benutzersitzung aktuell eine Datenbank und ein Schema verwendet werden, andernfalls ist die Angabe obligatorisch.

  • Pfad ist ein optionaler Pfad mit Unterscheidung von Groß-/Kleinschreibung für Dateien am Cloudspeicherort (d. h. Dateien haben Namen, die mit einer gemeinsamen Zeichenfolge beginnen), wodurch die zu ladenden Dateien eingegrenzt werden. Pfade werden von den verschiedenen Cloudspeicherdiensten alternativ als Präfixe oder Ordner bezeichnet.

    Beachten Sie, dass die externe Tabelle diesen Pfad an jeden in der Stagingbereichsdefinition angegebenen Pfad anfügt. Führen Sie zum Anzeigen der Stagingbereichsdefinition DESC STAGE Stagingbereichsname aus, und überprüfen Sie den Eigenschaftswert URL. Wenn die URL des Stagingbereichs beispielsweise den Pfad a enthält und der Speicherort der externen Tabelle den Pfad b enthält, liest die externe Tabelle Dateien, die in Stagingbereich/a/b bereitgestellt wurden.

FILE_FORMAT = ( FORMAT_NAME = 'Dateiformatname' ) oder . FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET [ ... ] )

Zeichenfolge (Konstante), die das Dateiformat angibt:

FORMAT_NAME = Dateiformatname

Gibt ein vorhandenes benanntes Dateiformat an, das die zu überprüfenden bereitgestellten Datendateien beschreibt. Das benannte Dateiformat bestimmt über den Formattyp (CSV, JSON usw.) sowie alle anderen Formatoptionen für Datendateien.

TYPE = CSV | JSON | AVRO | ORC | PARQUET [ ... ]

Gibt den Formattyp der bereitgestellten Datendateien an, die beim Abfragen der externen Tabelle geprüft werden sollen.

Wenn ein Dateiformattyp angegeben wird, können zusätzliche formatspezifische Optionen angegeben werden. Weitere Informationen dazu finden Sie unter Formattypoptionen (unter diesem Thema).

Die Dateiformatoptionen können entweder auf der Ebene der externen Tabelle oder des Stagingbereichs konfiguriert werden. Alle Einstellungen, die auf der Ebene der externen Tabelle festgelegt werden, haben Vorrang. Alle Einstellungen, die auf keiner Ebene festgelegt werden, gehen von den Standardwerten aus.

Standard: TYPE = CSV.

Wichtig

Die externe Tabelle erbt nicht das Dateiformat, falls dieses in der Stagingbereichsdefinition vorhanden ist. Sie müssen alle Dateiformatoptionen für die externe Tabelle mit dem Parameter FILE_FORMAT explizit festlegen.

Bemerkung

FORMAT_NAME und TYPE schließen sich gegenseitig aus. Um unbeabsichtigtes Verhalten zu vermeiden, sollten Sie beim Erstellen einer externen Tabelle nur einen von beiden Werten angeben.

Optionale Parameter

Spaltenname

Zeichenfolge, die den Spaltenbezeichner (z. B. Name) angibt. Alle Anforderungen an Tabellenbezeichner gelten auch für Spaltenbezeichner.

Externe Tabellenspalten sind virtuelle Spalten, die mit einem expliziten Ausdruck definiert werden.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

Spaltentyp

Zeichenfolge (Konstante), die den Datentyp für die Spalte angibt. Der Datentyp der Spalte muss mit dem Ergebnis von Ausdruck übereinstimmen.

Einzelheiten zu den Datentypen, die für Tabellenspalten angegeben werden können, finden Sie unter Datentypen.

Ausdruck

Zeichenfolge, die den Ausdruck für die Spalte angibt. Bei einer Abfrage gibt die Spalte Ergebnisse zurück, die von diesem Ausdruck abgeleitet sind.

CONSTRAINT ...

Zeichenfolge, die eine Inline- oder Out-of-Line-Beschränkung für die angegebenen Spalten in der Tabelle definiert.

Weitere Informationen zur Syntax finden Sie unter CREATE | ALTER TABLE … CONSTRAINT. Weitere Informationen zu Einschränkungen finden Sie unter Einschränkungen.

REFRESH_ON_CREATE = TRUE | FALSE

Gibt an, ob die Metadaten der externen Tabelle sofort nach dem Erstellen automatisch aktualisiert werden sollen. Durch das Aktualisieren der Metadaten der externen Tabelle werden die Metadaten mit der aktuellen Liste der Datendateien im angegebenen Stagingbereichspfad synchronisiert. Diese Aktion ist erforderlich, damit die Metadaten alle vorhandenen Datendateien in dem in der Einstellung [ WITH ] LOCATION = angegebenen externen Stagingbereich registrieren.

TRUE

Snowflake aktualisiert die Metadaten der externen Tabelle nach der Erstellung einmal automatisch.

FALSE

Snowflake aktualisiert die Metadaten der externen Tabelle nicht automatisch. Um im Stagingbereich vorhandene Datendateien zu registrieren, müssen Sie die Metadaten der externen Tabelle einmal manuell mit ALTER EXTERNAL TABLE … REFRESH aktualisieren.

Standard: TRUE

AUTO_REFRESH = TRUE | FALSE

Gibt an, ob Snowflake das Auslösen einer automatischen Aktualisierung der Metadaten der externen Tabelle aktivieren soll, wenn in dem in [ WITH ] LOCATION = angegebenen benannten externen Stagingbereich neue oder aktualisierte Datendateien verfügbar sind.

Bemerkung

  • Sie müssen eine Ereignisbenachrichtigung für Ihren Speicherort (Amazon S3 oder Microsoft Azure) konfigurieren, um Snowflake zu benachrichtigen, wenn neue oder aktualisierte Daten zum Einlesen in die Metadaten der externen Tabelle verfügbar sind. Weitere Informationen dazu finden Sie unter Automatisches Aktualisieren externer Tabellen für Amazon S3 (S3) oder Automatisches Aktualisieren externer Tabellen für Azure Blob-Speicher (Azure).

  • Derzeit besteht keine Möglichkeit zum automatischen Aktualisieren der Metadaten bei externen Tabellen, die auf Google Cloud Storage-Stagingbereiche verweisen.

    Als Problemumgehung empfehlen wir Ihnen, unsere Best Practices für das Staging Ihrer Datendateien zu befolgen und regelmäßig eine ALTER EXTERNAL TABLE … REFRESH-Anweisung auszuführen, um fehlende Dateien zu registrieren. Für eine zufriedenstellende Leistung empfehlen wir außerdem die Verwendung eines selektiven Pfadpräfixes mit ALTER EXTERNAL TABLE, um die Anzahl der Dateien zu reduzieren, die aufgelistet und daraufhin geprüft werden müssen, ob sie bereits registriert wurden (z. B. Bucketname/YYYY/MM/DD/ oder auch Bucketname/YYYY/MM/DD/HH/, abhängig vom Volumen).

  • Wenn eine externe Tabelle erstellt wird, werden deren Metadaten automatisch einmal aktualisiert, es sei denn, REFRESH_ON_CREATE = FALSE.

TRUE

Snowflake ermöglicht das Auslösen automatischer Aktualisierungen von Metadaten externer Tabellen.

FALSE

Snowflake ermöglicht nicht das Auslösen automatischer Aktualisierungen von Metadaten externer Tabellen. Sie müssen die Metadaten der externen Tabellen manuell mit ALTER EXTERNAL TABLE … REFRESH aktualisieren, um die Metadaten mit der aktuellen Liste der Dateien im Stagingbereichspfad zu synchronisieren.

Standard: TRUE

PATTERN = 'Muster_für_regAusdruck'

Eine Musterzeichenfolge mit regulären Ausdrücken, die in einfache Anführungszeichen eingeschlossen ist und die die Dateinamen und/oder Pfade zum externen Stagingbereich angibt, die übereinstimmen sollen.

Tipp

Um die beste Leistung zu erzielen, sollten Sie vermeiden, Muster anzuwenden, die eine große Anzahl von Dateien filtern.

Bemerkung

Derzeit wird dieser Parameter nur unterstützt, wenn die Metadaten der externen Tabelle manuell aktualisiert werden, indem eine ALTER EXTERNAL TABLE ... REFRESH-Anweisung ausgeführt wird, um die Dateien zu registrieren. Der Parameter wird nicht unterstützt, wenn die Metadaten mithilfe von Ereignisbenachrichtigungen aktualisiert werden.

AWS_SNS_TOPIC = Zeichenfolge

Nur erforderlich, wenn AUTO_REFRESH für Amazon S3-Stagingbereiche mit dem Amazon Simple Notification Service (SNS) konfiguriert wird. Gibt den Amazon-Ressourcennamen (ARN) für das SNS-Thema für Ihren S3-Bucket an. Mit der CREATE EXTERNAL TABLE-Anweisung wird die Warteschlange von Amazon Simple Queue Service (SQS) für das angegebene SNS-Thema abonniert. Ereignisbenachrichtigungen über das Thema SNS lösen Metadatenaktualisierungen aus. Weitere Informationen dazu finden Sie unter Automatisches Aktualisieren externer Tabellen für Amazon S3.

COPY GRANTS

Gibt an, dass die Zugriffsberechtigungen der ursprünglichen Tabelle beibehalten werden, wenn mit der Variante CREATE OR REPLACE TABLE eine externe Tabelle neu erstellt wird. Der Parameter kopiert alle Berechtigungen, mit Ausnahme von OWNERSHIP, aus der bestehenden Tabelle in die neue Tabelle. Standardmäßig ist die Rolle, die den Befehl CREATE EXTERNAL TABLE ausführt, Eigentümer der neuen externen Tabelle.

Anmerkung:

Die Operation zum Kopieren von Berechtigungen erfolgt atomar im Befehl CREATE EXTERNAL TABLE (d. h. innerhalb derselben Transaktion).

COMMENT = 'Zeichenfolgenliteral'

Zeichenfolge (Literal), die einen Kommentar zur externen Tabelle enthält.

Standard: Kein Wert

Partitionierungsparameter

Verwenden Sie diese Parameter, um Ihre externe Tabelle zu partitionieren.

Partitionsspaltenname Spaltentyp AS Partitionsausdruck

Erforderlich für die Partitionierung der Daten in einer externen Tabelle

Gibt eine oder mehrere Partitionsspalten in der externen Tabelle an.

Eine Partitionsspalte muss als Ausdruck ausgewertet werden, der die Pfad- und/oder Dateinamendaten in der Pseudospalte METADATA$FILENAME analysiert. Partitionsspalten optimieren die Abfrageleistung, indem sie jene Datendateien entfernen, die nicht gescannt werden müssen (d. h. Partitionierung der externen Tabelle). Eine Partition besteht aus allen Datendateien, die mit dem Pfad und/oder Dateinamen im Ausdruck für die Partitionsspalte übereinstimmen.

Partitionsspaltenname

Zeichenfolge, die den Bezeichner der Partitionsspalte (d. h. den Namen) angibt. Alle Anforderungen an Tabellenbezeichner gelten auch für Spaltenbezeichner.

Spaltentyp

Zeichenfolge (Konstante), die den Datentyp für die Spalte angibt. Der Datentyp muss mit dem Ergebnis von Partitionsausdruck für die Spalte übereinstimmen.

Partitionsausdruck

Zeichenfolge, die den Ausdruck für die Spalte angibt. Der Ausdruck muss die Pseudospalte METADATA$FILENAME enthalten.

Externe Tabellen unterstützen in Partitionsausdrücken derzeit die folgende Teilmenge von Funktionen:

Liste der unterstützten Funktionen:

Identifizieren Sie nach dem Definieren von Partitionsspalten für die Tabelle diese Spalten mit der Klausel PARTITION BY.

[ PARTITION BY ( Partitionsspaltenname [, Partitionsspaltenname ... ] ) ]

Gibt alle Partitionsspalten an, die für die externe Tabelle ausgewertet werden sollen.

Verwendung

Fügen Sie beim Abfragen einer externen Tabelle eine oder mehrere Partitionsspalten in eine WHERE-Klausel ein, z. B.:

... WHERE Partitionsspaltenname = 'Filterwert'

Snowflake-Filter auf den Partitionsspalten beschränken die Menge der zu scannenden Datendateien. Beachten Sie, dass alle Zeilen in diesen Dateien gescannt werden. Wenn eine WHERE-Klausel Spalten ohne Partition enthält, werden diese Filter ausgewertet, nachdem die Datendateien gefiltert wurden.

Es ist üblich, die Datendateien anhand von Zeitintervallen zu partitionieren, oder, wenn die Datendateien aus mehreren Quellen bereitgestellt werden, anhand eines Datenquellenbezeichners und eines Datums oder eines Zeitstempels zu partitionieren.

Cloudanbieterparameter (cloudProviderParams)

Microsoft Azure

INTEGRATION = Integrationsname

Gibt den Namen der Benachrichtigungsintegration an, mit der die Metadaten der externen Tabelle unter Verwendung von Azure Event Grid-Benachrichtigungen automatisch aktualisiert werden. Eine Benachrichtigungsintegration ist ein Snowflake-Objekt, das als Schnittstelle zwischen Snowflake und Warteschlangendiensten von Drittanbietern dient.

Dieser Parameter ist erforderlich, um automatische Aktualisierungsvorgänge für die externe Tabelle zu aktivieren. Anweisungen zum Konfigurieren der automatischen Aktualisierungsfunktion finden Sie unter Automatisches Aktualisieren externer Tabellen für Azure Blob-Speicher.

Formattypoptionen (formatTypeOptions)

Formattypoptionen werden zum Laden von Daten in und Entladen von Daten aus Tabellen verwendet.

Je nach angegebenem Dateiformattyp (FILE_FORMAT = ( TYPE = ... )) können Sie eine oder mehrere der folgenden formatspezifischen Optionen (durch Leerzeichen, Kommas oder Neue-Zeile-Zeichen getrennt) einschließen:

TYPE = CSV

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE

Zeichenfolge (Konstante), die den aktuellen Komprimierungsalgorithmus für die zu ladenden Datendateien angibt. Snowflake verwendet diese Option, um zu ermitteln, wie bereits komprimierte Datendateien komprimiert wurden, sodass die komprimierten Daten in den Dateien zum Laden extrahiert werden können.

Unterstützte Werte

Anmerkungen

AUTO

Der Komprimierungsalgorithmus wird automatisch erkannt, mit Ausnahme von Brotli-komprimierten Dateien, die derzeit nicht automatisch erkannt werden können. Wenn Sie Brotli-komprimierte Dateien laden, verwenden Sie explizit BROTLI anstelle von AUTO.

GZIP

BZ2

BROTLI

Muss beim Laden von Brotli-komprimierten Dateien verwendet werden.

ZSTD

Zstandard v0.8 (und höher) wird unterstützt.

DEFLATE

Deflate-komprimierte Dateien (mit zlib-Header, RFC1950).

RAW_DEFLATE

Raw Deflate-komprimierte Dateien (ohne Header, RFC1951).

NONE

Zu ladende Datendateien wurden nicht komprimiert.

RECORD_DELIMITER = 'Zeichen' | NONE

Ein oder mehrere Einzelbyte- oder Multibyte-Zeichen, die Datensätze in einer Eingabedatei voneinander trennen.

Akzeptiert gängige Escape-Sequenzen, Oktalwerte (mit \\ vorangestellt) oder Hex-Werte (mit 0x vorangestellt). Geben Sie beispielsweise für Datensätze, die durch das Thornzeichen (Þ) getrennt sind, den Oktalwert (\\336) oder den Hexadezimalwert (0xDE) an. Akzeptiert auch den Wert NONE.

Das angegebene Trennzeichen muss ein gültiges UTF-8-Zeichen sein und darf keine zufällige Folge von Bytes sein.

Trennzeichen mit mehreren Zeichen werden ebenfalls unterstützt. Das Trennzeichen für RECORD_DELIMITER oder FIELD_DELIMITER darf jedoch keine Teilzeichenfolge des Trennzeichens der anderen Dateiformatoption sein (z. B. FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb'). Das Trennzeichen darf maximal 20 Zeichen lang sein.

Standard: Neue-Zeile-Zeichen. Beachten Sie, dass „neue Zeile“ logisch ist, sodass \r\n als neue Zeile für Dateien auf einer Windows-Plattform verstanden wird.

FIELD_DELIMITER = 'Zeichen' | NONE

Ein oder mehrere Einzelbyte- oder Multibyte-Zeichen, die Felder in einer Eingabedatei voneinander trennen.

Akzeptiert gängige Escape-Sequenzen, Oktalwerte (mit \\ vorangestellt) oder Hex-Werte (mit 0x vorangestellt). Geben Sie beispielsweise für Felder, die durch das Thornzeichen (Þ) getrennt sind, den Oktalwert (\\336) oder den Hexadezimalwert (0xDE) an. Akzeptiert auch den Wert NONE.

Das angegebene Trennzeichen muss ein gültiges UTF-8-Zeichen sein und darf keine zufällige Folge von Bytes sein.

Trennzeichen mit mehreren Zeichen werden ebenfalls unterstützt. Das Trennzeichen für RECORD_DELIMITER oder FIELD_DELIMITER darf jedoch keine Teilzeichenfolge des Trennzeichens der anderen Dateiformatoption sein (z. B. FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb'). Das Trennzeichen darf maximal 20 Zeichen lang sein.

Standard: Komma (,)

SKIP_HEADER = Ganzzahl

Anzahl der Zeilen am Anfang der zu überspringenden Datei.

Beachten Sie, dass SKIP_HEADER nicht die Werte RECORD_DELIMITER oder FIELD_DELIMITER verwendet, um zu bestimmen, was eine Kopfzeile ist. Stattdessen wird einfach die angegebene Anzahl von CRLF (Wagenrücklauf, Zeilenvorschub)-begrenzten Zeilen in der Datei übersprungen. RECORD_DELIMITER und FIELD_DELIMITER werden dann verwendet, um die zu ladenden Datenzeilen zu bestimmen.

Standard: 0

SKIP_BLANK_LINES = TRUE | FALSE
Verwendung

Nur Laden von Daten

Definition

Boolescher Wert, der angibt, ob Leerzeilen in den Datendateien übersprungen werden sollen oder ob sie zu einem Datensatzende-Fehler (Standardverhalten) führen.

Standard: FALSE

TYPE = JSON

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE

Zeichenfolge (Konstante), die den aktuellen Komprimierungsalgorithmus für die zu ladenden Datendateien angibt. Snowflake verwendet diese Option, um zu ermitteln, wie bereits komprimierte Datendateien komprimiert wurden, sodass die komprimierten Daten in den Dateien zum Laden extrahiert werden können.

Unterstützte Werte

Anmerkungen

AUTO

Der Komprimierungsalgorithmus wird automatisch erkannt, mit Ausnahme von Brotli-komprimierten Dateien, die derzeit nicht automatisch erkannt werden können. Wenn Sie Brotli-komprimierte Dateien laden, verwenden Sie explizit BROTLI anstelle von AUTO.

GZIP

BZ2

BROTLI

ZSTD

DEFLATE

Deflate-komprimierte Dateien (mit zlib-Header, RFC1950).

RAW_DEFLATE

Raw Deflate-komprimierte Dateien (ohne Header, RFC1951).

NONE

Zeigt an, dass die Dateien zum Laden von Daten nicht komprimiert wurden.

Standard: AUTO

TYPE = AVRO

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE

Zeichenfolge (Konstante), die den aktuellen Komprimierungsalgorithmus für die zu ladenden Datendateien angibt. Snowflake verwendet diese Option, um zu ermitteln, wie bereits komprimierte Datendateien komprimiert wurden, sodass die komprimierten Daten in den Dateien zum Laden extrahiert werden können.

Unterstützte Werte

Anmerkungen

AUTO

Der Komprimierungsalgorithmus wird automatisch erkannt, mit Ausnahme von Brotli-komprimierten Dateien, die derzeit nicht automatisch erkannt werden können. Wenn Sie Brotli-komprimierte Dateien laden, verwenden Sie explizit BROTLI anstelle von AUTO.

GZIP

BZ2

BROTLI

ZSTD

DEFLATE

Deflate-komprimierte Dateien (mit zlib-Header, RFC1950).

RAW_DEFLATE

Raw Deflate-komprimierte Dateien (ohne Header, RFC1951).

NONE

Zu ladende Datendateien wurden nicht komprimiert.

Standard: AUTO

TYPE = PARQUET

COMPRESSION = AUTO | SNAPPY | NONE

Zeichenfolge (Konstante), die den aktuellen Komprimierungsalgorithmus für Spalten der Parquet-Dateien angibt.

Unterstützte Werte

Anmerkungen

AUTO

Komprimierungsalgorithmus automatisch erkannt. Unterstützt die folgenden Komprimierungsalgorithmen: Brotli, gzip, Lempel-Ziv-Oberhumer (LZO), LZ4, Snappy oder Zstandard v0.8 (und höher).

SNAPPY

NONE

Zu ladende Datendateien wurden nicht komprimiert.

Standard: AUTO

Nutzungshinweise

  • Externe Tabellen unterstützen nur externe (d. h. S3, Azure oder GCS) Stagingbereiche. Interne (d. h. Snowflake) Stagingbereiche werden nicht unterstützt.

  • Jede externe Tabelle hat eine Spalte mit dem Namen VALUE vom Typ VARIANT. Zusätzliche Spalten können angegeben werden. Alle Spalten werden als virtuelle Spalten behandelt.

    • Die Spalte VALUE strukturiert Zeilen in einer CSV-Datendatei als JSON-Objekte mit Elementen, die durch die Spaltenposition gekennzeichnet sind, z. B. {c1: col_1_value, c2: col_2_value, c3: col_3_value ...}.

  • Snowflake erzwingt bei externen Tabellen keine Konstanten für referenzielle Integrität. Dies unterscheidet sich vom Verhalten bei normalen Tabellen, bei denen die Einschränkung NOT NULL für Spalten erzwungen wird.

  • Externe Tabellen enthalten die folgende Metadatenspalte:

    • METADATA$FILENAME: Name der einzelnen in der externen Tabelle enthaltenen Staging-Datendateien. Enthält den Pfad zur Datendatei im Stagingbereich.

  • Folgendes wird bei externen Tabellen nicht unterstützt:

    • Gruppierungsschlüssel

    • Klonen

    • Daten im XML-Format

  • Time Travel wird bei externen Tabellen nicht unterstützt.

Beispiele

Einfache externe Tabelle

  1. Erstellen Sie einen externen Stagingbereich mit dem Namen mystage für den Speicherort, an dem die Parquet-Datendateien gespeichert sind. Weitere Informationen dazu finden Sie unter CREATE STAGE.

    Amazon S3

    Erstellen Sie mithilfe eines privaten/geschützten S3-Buckets namens mybucket einen externen Stagingbereich mit einem Ordnerpfad namens files:

    CREATE OR REPLACE STAGE mystage URL='s3://mybucket/files/'
    ..
    ;
    

    Google Cloud Storage

    Erstellen Sie einen externen Stagingbereich mit einem Google Cloud Storage-Container namens mybucket mit einem Ordnerpfad namens files:

    CREATE OR REPLACE STAGE mystage
      URL='gcs://mybucket/files'
      ..
      ;
    

    Microsoft Azure

    Erstellen Sie mit einem Azure-Speicherkonto namens myaccount und einem Container namens mycontainer einen externen Stagingbereich mit einem Ordnerpfad namens files:

    CREATE OR REPLACE STAGE mystage
      URL='azure://myaccount.blob.core.windows.net/mycontainer/files'
      ..
      ;
    

    Bemerkung

    Verwenden Sie den Endpunkt blob.core.windows.net für alle unterstützten Typen von Azure-Blob-Speicherkonten, einschließlich Data Lake Storage Gen2.

  2. Erstellen Sie eine externe Tabelle mit dem Namen ext_twitter_feed, die auf die Parquet-Dateien im externen Stagingbereich mystage verweist. Die Stagingbereichsreferenz enthält einen Ordnerpfad mit dem Namen daily. Die externe Tabelle hängt diesen Pfad an die Stagingbereichsdefinition an, d. h. die externe Tabelle verweist auf die Datendateien in @mystage/files/daily:

    Im SQL-Befehl wird Parquet als Dateiformattyp angegeben. Außerdem wird der Dateimustererkennung angewendet, um nur Parquet-Dateien einzuschließen, deren Namen die Zeichenfolge sales enthalten:

    Amazon S3

    CREATE OR REPLACE EXTERNAL TABLE ext_twitter_feed
      WITH LOCATION = @mystage/daily/
      AUTO_REFRESH = true
      FILE_FORMAT = (TYPE = PARQUET)
      PATTERN='.*sales.*[.]parquet';
    

    Google Cloud Storage

    CREATE OR REPLACE EXTERNAL TABLE ext_twitter_feed
      WITH LOCATION = @mystage/daily/
      FILE_FORMAT = (TYPE = PARQUET)
      PATTERN='.*sales.*[.]parquet';
    

    Microsoft Azure

    CREATE OR REPLACE EXTERNAL TABLE ext_twitter_feed
     INTEGRATION = 'MY_AZURE_INT'
     WITH LOCATION = @mystage/daily/
     AUTO_REFRESH = true
     FILE_FORMAT = (TYPE = PARQUET)
     PATTERN='.*sales.*[.]parquet';
    
  3. Aktualisieren der Metadaten der externen Tabelle:

    ALTER EXTERNAL TABLE ext_twitter_feed REFRESH;
    

Partitionierte externe Tabelle

Erstellen Sie eine partitionierte externe Tabelle, die Daten anhand der logischen, genauen Details im Stagingbereichspfad partitioniert.

Im folgenden Beispiel sind die Datendateien im Cloudspeicher anhand der folgenden Struktur organisiert: logs/YYYY/MM/DD/HH24, z. B.:

  • logs/2018/08/05/0524/

  • logs/2018/08/27/1408/

  1. Erstellen Sie einen externen Stagingbereich mit dem Namen exttable_part_stage für den Speicherort, an dem die Datendateien gespeichert sind. Weitere Informationen dazu finden Sie unter CREATE STAGE.

    Die Stagingbereichsdefinition enthält den Pfad /files/logs/:

    Amazon S3

    CREATE STAGE exttable_part_stage
      URL='s3://mybucket/files/logs/'
      ..
      ;
    

    Google Cloud Storage

    CREATE STAGE exttable_part_stage
      URL='gcs://mybucket/files/logs/'
      ..
      ;
    

    Microsoft Azure

    CREATE STAGE exttable_part_stage
      URL='azure://mycontainer/files/logs/'
      ..
      ;
    
  2. Fragen Sie die Pseudospalte METADATA$FILENAME in den bereitgestellten Daten ab. Verwenden Sie die Ergebnisse, um Ihre Partitionsspalten zu entwickeln:

    SELECT metadata$filename FROM @exttable_part_stage/;
    
    +----------------------------------------+
    | METADATA$FILENAME                      |
    |----------------------------------------|
    | files/logs/2018/08/05/0524/log.parquet |
    | files/logs/2018/08/27/1408/log.parquet |
    +----------------------------------------+
    
  3. Erstellen Sie die partitionierte externe Tabelle.

    In der Partitionsspalte date_part wird YYYY/MM/DD in der Pseudospalte METADATA$FILENAME unter Verwendung von TO_DATE , DATE in ein Datum umgewandelt:

    Im SQL-Befehl wird auch Parquet als Dateiformattyp angegeben.

    Amazon S3

    CREATE EXTERNAL TABLE exttable_part(
      date_part date as to_date(substr(metadata$filename, 12, 10), 'YYYY/MM/DD'),
      timestamp bigint AS (value:timestamp::bigint),
      col2 varchar AS (value:col2::varchar))
      PARTITION BY (date_part)
      LOCATION=@exttable_part_stage/logs/
      AUTO_REFRESH = true
      FILE_FORMAT = (TYPE = PARQUET);
    

    Google Cloud Storage

    CREATE EXTERNAL TABLE exttable_part(
      date_part date as to_date(substr(metadata$filename, 12, 10), 'YYYY/MM/DD'),
      timestamp bigint AS (value:timestamp::bigint),
      col2 varchar AS (value:col2::varchar))
      PARTITION BY (date_part)
      LOCATION=@exttable_part_stage/logs/
      AUTO_REFRESH = true
      FILE_FORMAT = (TYPE = PARQUET);
    

    Microsoft Azure

    CREATE EXTERNAL TABLE exttable_part(
     date_part date as to_date(substr(metadata$filename, 12, 10), 'YYYY/MM/DD'),
     timestamp bigint AS (value:timestamp::bigint),
     col2 varchar AS (value:col2::varchar))
     INTEGRATION = 'MY_INT'
     PARTITION BY (date_part)
     LOCATION=@exttable_part_stage/logs/
     AUTO_REFRESH = true
     FILE_FORMAT = (TYPE = PARQUET);
    
  4. Aktualisieren der Metadaten der externen Tabelle:

    ALTER EXTERNAL TABLE exttable_part REFRESH;
    

Filtern Sie beim Abfragen der externen Tabelle die Daten anhand der Partitionsspalte mit einer WHERE-Klausel:

SELECT timestamp, col2 FROM exttable_part WHERE date_part = to_date('08/05/2018');

Einfache externe Tabelle: AUTO_REFRESH mit Amazon SNS verwenden

Erstellen Sie im aktuellen Schema eine nicht partitionierte externe Tabelle, deren Metadaten automatisch aktualisiert werden, wenn dies durch von Amazon SNS empfangene Ereignisbenachrichtigungen ausgelöst wird:

CREATE OR REPLACE EXTERNAL TABLE ext_table
     WITH LOCATION = @mystage/path1/
     FILE_FORMAT = (TYPE = JSON)
     AWS_SNS_TOPIC = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket';

Materialisierte Ansicht für eine externe Tabelle

Erstellen Sie eine materialisierte Ansicht basierend auf einer Unterabfrage der Spalten in der externen Tabelle, die im Beispiel Partitionierte externe Tabelle erstellt wurde:

CREATE MATERIALIZED VIEW exttable_part_mv
  AS
  SELECT col2 FROM exttable_part;

Die allgemeine Syntax sowie Verwendungshinweise und weitere Beispiele für diesen SQL-Befehl finden Sie unter CREATE MATERIALIZED VIEW.