CREATE EXTERNAL TABLE¶
Erstellt eine neue externe Tabelle im aktuellen oder 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 dann 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 (z. B. Primärschlüssel, Fremdschlüssel). Weitere Informationen dazu finden Sie in den Nutzungshinweisen.
Syntax¶
-- Partitions computed from expressions
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>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON (VALUE) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
-- Partitions added and removed manually
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
  PARTITION_TYPE = USER_SPECIFIED
  FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET } [ formatTypeOptions ] } )
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON (VALUE) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
-- Delta Lake
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
  PARTITION_TYPE = USER_SPECIFIED
  FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET } [ formatTypeOptions ] } )
  [ TABLE_FORMAT = DELTA ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON (VALUE) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
Wobei:
inlineConstraint ::= [ NOT NULL ] [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> ] ) ] } [ <constraint_properties> ]Weitere Details zu Inline-Einschränkungen finden Sie unter CREATE | ALTER TABLE … CONSTRAINT.
cloudProviderParams (for Google Cloud Storage) ::= [ INTEGRATION = '<integration_name>' ] 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 = '<string>' | NONE FIELD_DELIMITER = '<string>' | NONE MULTI_LINE = TRUE | FALSE SKIP_HEADER = <integer> SKIP_BLANK_LINES = TRUE | FALSE ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE TRIM_SPACE = TRUE | FALSE FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE NULL_IF = ( '<string1>' [ , '<string2>' , ... ] ) EMPTY_FIELD_AS_NULL = TRUE | FALSE ENCODING = '<string>' -- If FILE_FORMAT = ( TYPE = JSON ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE MULTI_LINE = TRUE | FALSE ALLOW_DUPLICATE = TRUE | FALSE STRIP_OUTER_ARRAY = TRUE | FALSE STRIP_NULL_VALUES = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE -- If FILE_FORMAT = ( TYPE = AVRO ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE REPLACE_INVALID_CHARACTERS = TRUE | FALSE -- If FILE_FORMAT = ( TYPE = ORC ... ) TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] -- If FILE_FORMAT = ( TYPE = PARQUET ... ) COMPRESSION = AUTO | SNAPPY | NONE BINARY_AS_TEXT = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE
Syntaxvariante¶
CREATE EXTERNAL TABLE … USING TEMPLATE¶
Erstellt eine neue externe Tabelle mit Spaltendefinitionen, die aus einer Menge von Stagingdateien abgeleitet sind, die semistrukturierten Daten enthalten. Diese Feature unterstützt Apache Parquet-, Apache Avro-, ORC-, JSON- und CSV-Dateien. Die Unterstützung für CSV- und JSON-Dateien befindet sich derzeit in der Vorschau.
CREATE [ OR REPLACE ] EXTERNAL TABLE <table_name> USING TEMPLATE <query> [ ... ] [ COPY GRANTS ]
Bemerkung
Wenn die Anweisung eine vorhandene Tabelle mit demselben Namen ersetzt, werden die Berechtigungen aus der zu ersetzenden Tabelle kopiert. Wenn keine Tabelle mit diesem Namen vorhanden ist, werden die Berechtigungen aus der zu klonenden Quelltabelle kopiert.
Weitere Informationen zu COPY GRANTS finden Sie in diesem Dokument unter COPY GRANTS.
Erforderliche Parameter¶
- table_name
- Zeichenfolge, die den Bezeichner (also 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 doppelten Anführungszeichen eingeschlossen sind, wird ebenfalls zwischen Groß- und Kleinschreibung unterschieden.- Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner. 
- [ WITH ] LOCATION =
- Gibt den externen Stagingbereich und einen optionalen Pfad an, wo die Dateien mit den zu lesenden Daten bereitgestellt werden: - @[namespace.]ext_stage_name[/path]- Die Dateien befinden sich im angegebenen, benannten externen Stagingbereich. - Es werden weder Zeichenfolgenliterale noch SQL-Variablen unterstützt. - Wobei: - namespaceist die Datenbank oder das Schema, in dem sich der externe Stagingbereich befindet, in der Form- database_name.schema_nameoder- schema_name. Die Angabe ist optional, wenn in der Benutzersitzung aktuell eine Datenbank und ein Schema verwendet werden, andernfalls ist die Angabe obligatorisch.
- pathist ein optionaler Verzeichnispfad in Groß- und Kleinschreibung für Dateien im Cloud-Speicher, der die Menge der zu ladenden Dateien einschränkt. Pfade werden von verschiedenen Cloudspeicherdiensten alternativ als Präfixe oder Ordner bezeichnet.- Die externe Tabelle fügt diesen Verzeichnispfad an jeden in der Stagingbereichsdefinition angegebenen Pfad an. Führen Sie zum Anzeigen der Stagingbereichsdefinition - DESC STAGE stage_nameaus, und überprüfen Sie den Eigenschaftswert- url. Wenn die URL des Stagingbereichs beispielsweise den Pfad- aenthält und der Speicherort der externen Tabelle den Pfad- benthält, liest die externe Tabelle Dateien, die in- stage/a/bbereitgestellt wurden.- Bemerkung - Geben Sie einen vollständigen Pfad für das Verzeichnis an und nicht einen Teilpfad (gemeinsames Präfix) für die Dateien in Ihrem Speicherort (verwenden Sie z. B. einen Pfad wie - @my_ext_stage/2025/statt- @my_ext_stage/2025-*). Um nach Dateien zu filtern, die ein gemeinsames Präfix haben, verwenden Sie stattdessen Partitionsspalten.
- Das - [ WITH ] LOCATION-Wert kann nicht auf bestimmte Dateinamen verweisen. Wenn eine externe Tabelle auf einzelne Stagingdateien verweisen soll, verwenden Sie den Parameter- PATTERN.
 
 
- FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' )oder .- FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET [ ... ] )
- Zeichenfolge (Konstante), die das Dateiformat angibt: - FORMAT_NAME = file_format_name
- Gibt ein vorhandenes benanntes Dateiformat an, das die zu überprüfenden bereitgestellten Datendateien beschreibt. Das benannte Dateiformat bestimmt den Formattyp (z. B. CSV, JSON) 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. 
 - Standard: - TYPE = CSV.- Wichtig - Eine externe Tabelle erbt nicht FILE_FORMAT-Optionen, die in einem Stagingbereich angegeben sind, wenn dieser Stagingbereich zum Laden von Daten in die Tabelle verwendet wird. Um FILE_FORMAT-Optionen anzugeben, müssen Sie dies ausdrücklich in der Definition der externen Tabelle tun. Snowflake verwendet Standardwerte für alle FILE_FORMAT-Parameter, die in der externen Tabellendefinition fehlen. - Bemerkung - FORMAT_NAMEund- TYPEschließen sich gegenseitig aus. Um unbeabsichtigtes Verhalten zu vermeiden, sollten Sie beim Erstellen einer externen Tabelle nur einen der beiden Werte angeben.
Optionale Parameter¶
- col_name
- Zeichenfolge, die den Spaltenbezeichner (also Namen) angibt. Alle Anforderungen an Tabellenbezeichner gelten auch für Spaltenbezeichner. - Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner. 
- col_type
- Zeichenfolge (Konstante), die den Datentyp für die Spalte angibt. Der Datentyp der Spalte muss mit dem Ergebnis von - exprübereinstimmen.- Weitere Informationen zu den Datentypen, die für Tabellenspalten angegeben werden können, finden Sie unter Referenz der SQL-Datentypen. 
- expr
- Zeichenfolge, die den Ausdruck für die Spalte angibt. Bei einer Abfrage gibt die Spalte Ergebnisse zurück, die von diesem Ausdruck abgeleitet sind. - Externe Tabellenspalten sind virtuelle Spalten, die mit einem expliziten Ausdruck definiert werden. Fügen Sie virtuelle Spalten als Ausdrücke hinzu, indem Sie die VALUE-Spalte oder die METADATA$FILENAME-Pseudospalte verwenden: - VALUE:
- Eine Spalte vom Typ VARIANT, die eine einzelne Zeile in der externen Datei darstellt. - CSV:
- Die VALUE-Spalte strukturiert jede Zeile als ein Objekt mit Elementen, die durch die Spaltenposition identifiziert werden (d. h. - {c1: <Spalte_1_Wert>, c2: <column_2_value>, c3: <column_1_value> ...}).- Fügen Sie z. B. eine VARCHAR-Spalte mit dem Namen - mycolhinzu, die auf die erste Spalte in den CSV-Stagingdateien verweist:- mycol varchar as (value:c1::varchar) 
- Semistrukturierte Daten:
- Schließen Sie Elementnamen und Werte in doppelte Anführungszeichen ein. Durchlaufen Sie den Pfad in der VALUE-Spalte mithilfe der punktierten Schreibweise. - Nehmen wir zum Beispiel an, dass das Folgende eine einzelne Zeile mit semistrukturierten Daten in einer Stagingdatei darstellt: - { "a":"1", "b": { "c":"2", "d":"3" } } - Fügen Sie eine VARCHAR-Spalte mit dem Namen - mycolhinzu, die auf das verschachtelte, sich wiederholende Element- cin der Stagingdatei verweist:- mycol varchar as (value:"b"."c"::varchar) 
 
- METADATA$FILENAME:
- Eine Pseudospalte, die den Namen jeder in der externen Tabelle enthaltenen Staging-Datendatei einschließlich ihres Pfads im Stagingbereich angibt. Ein Beispiel finden Sie unter Automatisch aus Partitionsspaltenausdrücken hinzugefügte Partitionen unter diesem Thema. 
 
- 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 einmalig 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. - Bemerkung - Wenn der angegebene Speicherort fast 1 Millionen Dateien oder mehr enthält, empfehlen wir Ihnen, - REFRESH_ON_CREATE = FALSEeinzustellen. Nachdem Sie die externe Tabelle erstellt haben, aktualisieren Sie schrittweise die Metadaten durch Ausführen von ALTER EXTERNAL TABLE…REFRESH -Anweisungen unter Angabe der Unterpfade am Speicherort (also Teilmengen von Dateien, die in die Aktualisierung einbezogen werden sollen), bis die Metadaten alle Dateien am Speicherort berücksichtigen.
- 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 einmalig 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 - Das Einstellen dieses Parameters auf TRUE :emph:` wird nicht` bei partitionierten externen Tabellen, deren Partitionen manuell vom Objekteigentümer hinzugefügt werden unterstützt (d. h. wenn nicht:samp: - PARTITION_TYPE = USER_SPECIFIED).
- Die Einstellung dieses Parameters auf TRUE zu setzen, wird nicht unterstützt, wenn die externen Tabellen auf Datendateien in einem S3-kompatiblen Speicher verweisen (eine Speicheranwendung oder ein Gerät, die/das eine mit S3 API RESTkompatible API bereitstellt). Weitere Informationen dazu finden Sie unter Verwenden von Amazon S3-kompatiblem Speicher. - Sie müssen die Metadaten manuell aktualisieren, indem Sie den Befehl ALTER EXTERNAL TABLE … REFRESH ausführen. 
- Sie müssen eine Ereignisbenachrichtigung für Ihren Speicherort 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 in der Anleitung Ihres Cloudspeicherdienstes: 
- Google Cloud Storage:
- Externe Tabellen für Google Cloud Storage automatisch aktualisieren 
 
- Microsoft Azure:
- Automatisches Aktualisieren externer Tabellen für Azure Blob Storage 
 
 
- Wenn eine externe Tabelle erstellt wird, werden deren Metadaten automatisch einmalig 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 = 'regex_pattern'
- Eine Musterzeichenfolge mit regulären Ausdrücken, die in einfache Anführungszeichen eingeschlossen ist und die die Dateinamen und Pfade zum externen Stagingbereich angibt, die übereinstimmen sollen. - Tipp - Um die beste Leistung zu erzielen, sollten Sie keine Muster anwenden, die auf eine große Anzahl von Dateien filtern. 
- AWS_SNS_TOPIC = 'string'
- Nur erforderlich bei der Konfigurierung von AUTO_REFRESH für Amazon S3-Stagingbereiche mit Amazon Simple Notification Service (SNS). Gibt den Amazon Resource Name (ARN) für das SNS-Thema Ihres S3-Buckets an. Mit der CREATE EXTERNAL TABLE-Anweisung wird die Warteschlange von Amazon Simple Queue Service (SQS) für das angegebene SNS-Thema abonniert. Ereignisbenachrichtigungen durch das Thema :emph:` lösen Metadatenaktualisierungen aus. Weitere Informationen dazu finden Sie unter Automatisches Aktualisieren externer Tabellen für Amazon S3. 
- TABLE_FORMAT = DELTA
- Bemerkung - Dieses Feature wird zwar noch unterstützt, wird aber in einem zukünftigen Release veraltet sein. - Erwägen Sie stattdessen die Verwendung einer Apache Iceberg™-Tabelle. Iceberg-Tabellen verwenden ein externes Volume, um eine Verbindung zu Delta-Tabellendateien in Ihrem Cloudspeicher herzustellen. - Weitere Informationen finden Sie unter Iceberg-Tabellen und CREATE ICEBERG TABLE (Delta-Dateien im Objektspeicher). Sie können auch Externe Delta-Tabelle nach Apache Iceberg™ migrieren aufrufen. - Kennzeichnet die externe Tabelle als Verweis auf einen Delta Lake am Cloudspeicherort. Ein Delta Lake wird auf Amazon S3, Google Cloud Storage oder Microsoft Azure-Cloudspeicher unterstützt. - Bemerkung - Dieses Vorschau-Feature ist für alle Konten verfügbar. - Wenn dieser Parameter gesetzt ist, sucht die externe Tabelle nach Delta Lake-Transaktionsprotokolldateien am - [ WITH ] LOCATION-Speicherort. Delta-Protokolldateien haben Namen wie- _delta_log/00000000000000000000.jsonund- _delta_log/00000000000000000010.checkpoint.parquet.- Wenn die Metadaten einer externen Tabelle aktualisiert werden, analysiert Snowflake die Delta Lake-Transaktionsprotokolle und ermittelt, welche Parquet-Dateien aktuell sind. Im Hintergrund werden im Zuge der Aktualisierung Operationen zum Hinzufügen und Entfernen von Dateien ausgeführt, um die Metadaten der externen Tabelle auf dem neuesten Stand zu halten. - Bemerkung - Der in - [ WITH ] LOCATION =angegebene externe Stagingbereich und der optionale Pfad müssen die Datendateien und Metadaten für eine einzelne Delta Lake-Tabelle enthalten. Das heißt, der angegebene Speicherort kann nur ein- __delta_log-Verzeichnis enthalten.
- Die Reihenfolge der durch DDL-Operationen im Cloudspeicher ausgelösten Ereignisbenachrichtigungen ist nicht garantiert. Daher ist die Möglichkeit der automatischen Aktualisierung für externe Tabellen, die auf Delta Lake-Dateien verweisen, nicht verfügbar. Sowohl - REFRESH_ON_CREATEals auch- AUTO_REFRESHmüssen auf FALSE gesetzt werden.- Um hinzugefügte oder entfernte Dateien zu registrieren, führen Sie in regelmäßigen Abständen die Anweisung:doc: - ALTER EXTERNAL TABLE ... REFRESH </sql-reference/sql/alter-external-table>aus.
- Der Wert von - FILE_FORMATmuss Parquet als Dateityp angeben.
- Um eine optimale Leistung zu erzielen, sollten für die externe Tabelle Partitionsspalten definiert werden. 
- Die folgenden Parameter werden beim Referenzieren auf einen Delta Lake nicht unterstützt: - AWS_SNS_TOPIC = 'string'
- PATTERN = 'regex_pattern'
 
 
- 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. - Bemerkung - Die Operation zum Kopieren von Berechtigungen erfolgt atomar im Befehl CREATE EXTERNAL TABLE (d. h. innerhalb derselben Transaktion). 
- COMMENT = 'string_literal'
- Zeichenfolge (Literal), die einen Kommentar zur externen Tabelle enthält. - Standard: Kein Wert 
- ROW ACCESS POLICY <policy_name> ON (VALUE)
- Gibt die Zeilenzugriffsrichtlinie an, die für die Tabelle festgelegt werden soll. - Geben Sie die Spalte VALUE an, wenn Sie eine Zeilenzugriffsrichtlinie auf eine externe Tabelle anwenden. 
- TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
- Gibt den Namen des Tags und den Wert der Tag-Zeichenfolge an. - Der Tag-Wert ist immer eine Zeichenfolge, die maximale 256 Zeichen lang sein kann. - Weitere Informationen zur Angabe von Tags in einer Anweisung finden Sie unter Tag-Kontingent für Objekte. 
- WITH CONTACT ( purpose = contact [ , purpose = contact ...] )
- Verknüpfen Sie das neue Objekt mit einem oder mehreren Kontakten. 
Partitionierungsparameter¶
Verwenden Sie diese Parameter, um Ihre externe Tabelle zu partitionieren.
- part_col_name col_type AS part_expr
- Definiert eine oder mehrere Partitionsspalten in der externen Tabelle. - Das Format einer Partitionsspaltendefinition unterscheidet sich je nachdem, ob die Partitionen anhand eines Ausdrucks in jeder Partitionsspalte automatisch berechnet und hinzugefügt werden oder ob die Partitionen manuell hinzugefügt werden. - Aus einem Ausdruck hinzugefügt:
- Eine Partitionsspalte muss als ein 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 (also Partitionierung der externen Tabelle). Eine Partition besteht aus allen Datendateien, die mit dem Pfad oder Dateinamen im Ausdruck für die Partitionsspalte übereinstimmen. - part_col_name- Zeichenfolge, die den Bezeichner der Partitionsspalte (also den Namen) angibt. Alle Anforderungen an Tabellenbezeichner gelten auch für Spaltenbezeichner. - col_type- Zeichenfolge (Konstante), die den Datentyp für die Spalte angibt. Der Datentyp der Spalte muss mit dem Ergebnis von - part_exprübereinstimmen.- part_expr- 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: - =,- <>,- >,- >=,- <,- <=
- ||
- +,- -
- -(negieren)
- *
- AND,- OR
- NOT
 
- Manuell hinzugefügt:
- Erforderlich: Setzen Sie auch den Wert des Parameters - PARTITION_TYPEauf- USER_SPECIFIED.- Eine Partitionsspaltendefinition ist ein Ausdruck, der die Spaltenmetadaten in der internen (verborgenen) Spalte METADATA$EXTERNAL_TABLE_PARTITION analysiert. Im Wesentlichen definiert die Definition nur den Datentyp für die Spalte. Das folgende Beispiel zeigt das Format der Partitionsspaltendefinition: - part_col_name col_type AS ( PARSE_JSON (METADATA$EXTERNALTABLE_PARTITION):part_col_name::data_type )- Angenommen, die Spalten - col1,- col2und- col3enthalten Varchar-, Zahlen- bzw. Zeitstempel-Daten (Zeitzone):- col1 varchar as (parse_json(metadata$external_table_partition):col1::varchar), col2 number as (parse_json(metadata$external_table_partition):col2::number), col3 timestamp_tz as (parse_json(metadata$external_table_partition):col3::timestamp_tz) 
 - Identifizieren Sie nach dem Definieren von Partitionsspalten für die Tabelle diese Spalten mit der Klausel PARTITION BY. - Bemerkung - Die maximale Länge der Namen von benutzerdefinierten Partitionsspalten beträgt 32 Zeichen. 
- PARTITION_TYPE = USER_SPECIFIED
- Definiert den Partitionstyp für die externe Tabelle als benutzerdefiniert. Der Eigentümer der externen Tabelle (also die Rolle mit OWNERSHIP-Berechtigung für die externe Tabelle) muss Partitionen manuell mit der ALTER EXTERNAL TABLE … ADD PARTITION-Anweisungen zu den externen Metadaten hinzufügen. - Legen Sie diesen Parameter nicht fest, wenn bei Auswertung der Ausdrücke in den Partitionsspalten Partitionen automatisch zu den Metadaten der externen Tabelle hinzugefügt werden. 
- [ PARTITION BY ( part_col_name [, part_col_name ... ] ) ]
- Gibt alle Partitionsspalten an, die für die externe Tabelle ausgewertet werden sollen. - Verwendung:
- Wenn Sie eine externe Tabelle abfragen, fügen Sie eine oder mehrere Partitionsspalten in eine WHERE-Klausel ein; zum Beispiel: - ... WHERE part_col_name = 'filter_value'- Snowflake-Filter auf den Partitionsspalten beschränken die Menge der zu scannenden Datendateien. Alle Zeilen in diesen Dateien werden gescannt. Wenn eine WHERE-Klausel Spalten ohne Partition enthält, werden diese Filter ausgewertet, nachdem die Datendateien gefiltert werden. - 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)¶
Google Cloud Storage
INTEGRATION = integration_name
Gibt den Namen der Benachrichtigungsintegration an, mit der die Metadaten der externen Tabelle unter Verwendung von Google Pub/Sub-Ereignisbenachrichtigungen automatisch aktualisiert werden. Eine Benachrichtigungsintegration ist ein Snowflake-Objekt, das als Schnittstelle zwischen Snowflake und Cloud-Meldungswarteschlangendiensten von Drittanbietern dient.
Dieser Parameter ist erforderlich, um automatische Aktualisierungsvorgänge für die externe Tabelle zu aktivieren. Anweisungen zum Konfigurieren der Funktion zur automatischen Aktualisierung finden Sie unter Externe Tabellen für Google Cloud Storage automatisch aktualisieren.
Microsoft Azure
INTEGRATION = integration_name
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 Funktion zur automatischen Aktualisierung finden Sie unter Automatisches Aktualisieren externer Tabellen für Azure Blob Storage.
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 abzufragenden Datendateien angibt. Snowflake verwendet diese Option, um zu ermitteln, wie bereits komprimierte Datendateien komprimiert wurden, sodass die komprimierten Daten in den Dateien zum Abfragen 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 abfragen, verwenden Sie explizit - BROTLIanstelle von- AUTO.- GZIP- BZ2- BROTLI- Muss beim Abfragen von Brotli-komprimierten Dateien angegeben 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- Die Datendateien wurden nicht komprimiert. 
- RECORD_DELIMITER = 'string' | NONE
- Ein oder mehrere Zeichen, die Datensätze in einer Eingabedatei trennen. Akzeptiert gängige Escapesequenzen oder die folgenden Einzelbyte- oder Multibyte-Zeichen: - Einzelbyte-Zeichen:
- Oktalwerte (mit - \\vorangestellt) oder Hex-Werte (mit- 0xoder- \xvorangestellt). Geben Sie beispielsweise für Datensätze, die durch das Zirkumflex-Akzentzeichen (- ^) getrennt sind, den Oktalwert (- \\136) oder den Hexadezimalwert (- 0x5e) an.
- Multibyte-Zeichen:
- Hex-Werte (mit vorangestelltem - \x). Geben Sie beispielsweise für Datensätze, die durch das Centzeichen (- ¢) getrennt sind, den Hexadezimalwert (- \xC2\xA2) an.- 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 angegebene Trennzeichen muss ein gültiges UTF-8-Zeichen sein und darf keine zufällige Sequenz von Bytes sein. Beachten Sie auch, dass das Trennzeichen nur maximal 20 Zeichen lang sein darf. - Akzeptiert auch den Wert - NONE.- Standard: Neue-Zeile-Zeichen. Beachten Sie, dass „neue Zeile“ logisch ist, sodass - \r\nals neue Zeile für Dateien auf einer Windows-Plattform verstanden wird.
- FIELD_DELIMITER = 'string' | NONE
- Ein oder mehrere Einzelbyte- oder Multibyte-Zeichen, die Felder in einer Eingabedatei voneinander trennen. Akzeptiert gängige Escapesequenzen oder die folgenden Einzelbyte- oder Multibyte-Zeichen: - Einzelbyte-Zeichen:
- Oktalwerte (mit - \\vorangestellt) oder Hex-Werte (mit- 0xoder- \xvorangestellt). Geben Sie beispielsweise für Datensätze, die durch das Zirkumflex-Akzentzeichen (- ^) getrennt sind, den Oktalwert (- \\136) oder den Hexadezimalwert (- 0x5e) an.
- Multibyte-Zeichen:
- Hex-Werte (mit vorangestelltem - \x). Geben Sie beispielsweise für Datensätze, die durch das Centzeichen (- ¢) getrennt sind, den Hexadezimalwert (- \xC2\xA2) an.- 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').- Bemerkung - Für Nicht-ASCII-Zeichen müssen Sie den Hex-Byte-Sequenzwert verwenden, um ein deterministisches Verhalten zu erreichen. 
 - Das angegebene Trennzeichen muss ein gültiges UTF-8-Zeichen sein und darf keine zufällige Sequenz von Bytes sein. Beachten Sie auch, dass das Trennzeichen nur maximal 20 Zeichen lang sein darf. - Akzeptiert auch den Wert - NONE.- Standard: Komma ( - ,)
- MULTI_LINE = TRUE | FALSE
- Boolescher Wert, der angibt, ob mehrere Zeilen erlaubt sind. - Wenn MULTI_LINE auf - FALSEgesetzt ist und das angegebene Datensatz-Trennzeichen innerhalb eines CSV-Feldes vorhanden ist, wird der Datensatz, der das Feld enthält, als Fehler interpretiert.- Standard: - TRUE
- SKIP_HEADER = integer
- 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 abzufragenden Datenzeilen zu bestimmen. - Standard: - 0
- SKIP_BLANK_LINES = TRUE | FALSE
- Verwendung:
- Nur Datenabfragen 
- 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
- ESCAPE_UNENCLOSED_FIELD = 'character' | NONE
- Zeichenfolge mit Einzelbyte-Zeichen, das als Escapezeichen nur für nicht eingeschlossene Feldwerte verwendet wird. Ein Escapezeichen ruft eine alternative Interpretation für nachfolgende Zeichen in einer Sequenz von Zeichen auf. Sie können das ESCAPE-Zeichen verwenden, um Instanzen von - FIELD_DELIMITER- oder- RECORD_DELIMITER-Zeichen in den Daten als Literale zu interpretieren. Das Escapezeichen kann auch verwendet werden, um Instanzen von sich selbst in den Daten in Escapezeichen einzuschließen.- Akzeptiert gängige Escapesequenzen, Oktalwerte oder Hexadezimalwerte. - Gibt nur das Escapezeichen für nicht eingeschlossene Felder an. - Bemerkung - Der Standardwert ist - \\. Wenn eine Zeile in einer Datendatei mit dem umgekehrten Schrägstrich (- \) endet, wird das für die Dateiformatoption- RECORD_DELIMITERangegebene Zeilenumbruch- oder Wagenrücklaufzeichen durch dieses Zeichen ersetzt. Infolgedessen werden diese und die nächste Zeile als eine Datenzeile behandelt. Um dieses Problem zu vermeiden, setzen Sie diesen Wert auf- NONE.
- Diese Dateiformatoption unterstützt nur Einzelbyte-Zeichen. Beachten Sie, dass die UTF-8-Zeichencodierung höherwertige ASCII-Zeichen als Multibyte-Zeichen darstellt. Wenn Ihre Datendatei mit dem UTF-8-Zeichensatz kodiert ist, können Sie keine höherwertigen ASCII-Zeichen als Optionswert angeben. - Wenn Sie ein höherwertiges Zeichen (ASCII) angeben, empfehlen wir Ihnen außerdem, die Dateiformatoption - ENCODING = 'string'als Zeichencodierung für Ihre Datendateien festzulegen, damit das Zeichen korrekt interpretiert wird.
 - Standard: Backslash ( - \\)
- TRIM_SPACE = TRUE | FALSE
- Boolescher Wert, der angibt, ob Leerzeichen aus Feldern entfernt werden sollen. - Wenn Ihre externe Datenbanksoftware beispielsweise Felder in Anführungszeichen setzt, aber ein führendes Leerzeichen einfügt, liest Snowflake das führende Leerzeichen und nicht das öffnende Anführungszeichen als Anfang des Feldes (d. h. die Anführungszeichen werden als Teil der Zeichenfolge von Felddaten interpretiert). Setzen Sie diese Option auf - TRUE, um beim Abfragen von Daten unerwünschte Leerzeichen zu entfernen.- Weiteres Beispiel: Wenn Zeichenfolgen von Anführungszeichen umschlossen sind und diese Anführungszeichen wiederum von führenden oder nachstehende Leerzeichen, können Sie mit dieser Option die umgebenden Leerzeichen entfernen und mit der Option - FIELD_OPTIONALLY_ENCLOSED_BYdie Anführungszeichen. Beachten Sie, dass alle innerhalb der Anführungszeichen befindlichen Leerzeichen erhalten bleiben. Zum Beispiel bei- FIELD_DELIMITER = '|'und- FIELD_OPTIONALLY_ENCLOSED_BY = '"':- |"Hello world"| /* returned as */ >Hello world< |" Hello world "| /* returned as */ > Hello world < | "Hello world" | /* returned as */ >Hello world< - Beachten Sie, dass die Klammern in diesem Beispiel nicht zurückgegeben werden. Sie dienen lediglich dazu, den Anfang und das Ende der geladenen Zeichenfolgen zu markieren. - Standard: - FALSE
- FIELD_OPTIONALLY_ENCLOSED_BY = 'character' | NONE
- Zeichen, das verwendet wird, um Zeichenfolgen einzuschließen. Der Wert kann - NONE, ein einfaches Anführungszeichen (- ') oder ein doppeltes Anführungszeichen (- ") sein. Um das einfache Anführungszeichen verwenden zu können, müssen Sie die oktale oder hexadezimale Darstellung (- 0x27) oder das doppelte einfache Anführungszeichen als Escape-Zeichen (- '') verwenden.- Standard: - NONE
- NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- Zeichenfolge, die zum Konvertieren in und von SQL NULL verwendet wird: - Beim Abfragen von Daten ersetzt Snowflake diese Werte in den zurückgegebenen Daten durch SQL NULL. Um mehr als eine Zeichenfolge anzugeben, schließen Sie die Liste der Zeichenfolgen in Klammern ein und trennen Sie jeden Wert durch Kommas. - Beachten Sie, dass Snowflake alle Instanzen des Wertes in einen NULL-Wert konvertiert, unabhängig vom Datentyp. Wenn z. B. - 2als Wert angegeben wird, werden alle Instanzen von- 2entweder in eine Zeichenfolge oder in eine Zahl konvertiert.- Beispiel: - NULL_IF = ('\N', 'NULL', 'NUL', '')- Beachten Sie, dass diese Option leere Zeichenfolgen enthalten kann. - Standardwert: - \N(d. h. NULL, was voraussetzt, dass der- ESCAPE_UNENCLOSED_FIELD-Wert- \\ist)
- EMPTY_FIELD_AS_NULL = TRUE | FALSE
- Gibt an, ob für leere Felder einer Eingabedatei, die durch zwei aufeinanderfolgende Trennzeichen (z. B. - ,,) repräsentiert werden, SQL NULL zurückgegeben werden soll.- Wenn der Wert - FALSEist, versucht Snowflake, ein leeres Feld in den entsprechenden Spaltentyp umzuwandeln. Für Spalten des Typs STRING wird eine leere Zeichenfolge zurückgegeben. Bei anderen Spaltentypen gibt die Abfrage einen Fehler zurück.- Standard: - TRUE
- ENCODING = 'string'
- Zeichenfolge (Konstante), die bei der Datenabfrage den Zeichensatz der Quelldaten angibt. - Zeichensatz - ENCODING-Wert- Unterstützte Sprachen - Anmerkungen - Big5 - BIG5- Traditionelles Chinesisch - EUC-JP - EUCJP- Japanisch - EUC-KR - EUCKR- Koreanisch - GB18030 - GB18030- Chinesisch - IBM420 - IBM420- Arabisch - IBM424 - IBM424- Hebräisch - IBM949 - IBM949- Koreanisch - ISO-2022-CN - ISO2022CN- Vereinfachtes Chinesisch - ISO-2022-JP - ISO2022JP- Japanisch - ISO-2022-KR - ISO2022KR- Koreanisch - ISO-8859-1 - ISO88591- Dänisch, Deutsch, Englisch, Französisch, Italienisch, Niederländisch, Norwegisch, Portugiesisch, Schwedisch - ISO-8859-2 - ISO88592- Polnisch, Rumänisch, Tschechisch, Ungarisch - ISO-8859-5 - ISO88595- Russisch - ISO-8859-6 - ISO88596- Arabisch - ISO-8859-7 - ISO88597- Griechisch - ISO-8859-8 - ISO88598- Hebräisch - ISO-8859-9 - ISO88599- Türkisch - ISO-8859-15 - ISO885915- Dänisch, Deutsch, Englisch, Französisch, Italienisch, Niederländisch, Norwegisch, Portugiesisch, Schwedisch - Identisch mit ISO-8859-1, bis auf 8 Zeichen, zu denen auch das Euro-Währungssymbol gehört. - KOI8-R - KOI8R- Russisch - Shift_JIS - SHIFTJIS- Japanisch - UTF-8 - UTF8- Alle Sprachen - Zum Laden von Daten aus Dateien mit Trennzeichen (CSV, TSV usw.) ist UTF-8 die Standardeinstellung. . . Beim Laden von Daten aus allen anderen unterstützten Dateiformaten (JSON, Avro usw.) sowie zum Entladen von Daten ist UTF-8 der einzige unterstützte Zeichensatz. - UTF-16 - UTF16- Alle Sprachen - UTF-16BE - UTF16BE- Alle Sprachen - UTF-16LE - UTF16LE- Alle Sprachen - UTF-32 - UTF32- Alle Sprachen - UTF-32BE - UTF32BE- Alle Sprachen - UTF-32LE - UTF32LE- Alle Sprachen - windows-874 - WINDOWS874- Thailändisch - windows-949 - WINDOWS949- Koreanisch - windows-1250 - WINDOWS1250- Polnisch, Rumänisch, Tschechisch, Ungarisch - windows-1251 - WINDOWS1251- Russisch - windows-1252 - WINDOWS1252- Dänisch, Deutsch, Englisch, Französisch, Italienisch, Niederländisch, Norwegisch, Portugiesisch, Schwedisch - windows-1253 - WINDOWS1253- Griechisch - windows-1254 - WINDOWS1254- Türkisch - windows-1255 - WINDOWS1255- Hebräisch - windows-1256 - WINDOWS1256- Arabisch - Standard: - UTF8- Bemerkung - Snowflake speichert alle Daten intern im UTF-8-Zeichensatz. Die Daten werden in UTF-8 umgewandelt. 
TYPE = JSON¶
- COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- Zeichenfolge (Konstante), die den aktuellen Komprimierungsalgorithmus für die zurückzugebenden Datendateien angibt. Snowflake verwendet diese Option, um zu ermitteln, wie bereits komprimierte Datendateien komprimiert wurden, sodass die komprimierten Daten in den Dateien zum Abfragen 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 abfragen, verwenden Sie explizit - BROTLIanstelle 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 nicht komprimiert wurden. - Standard: - AUTO
- MULTI_LINE = TRUE | FALSE
- Boolescher Wert, der angibt, ob mehrere Zeilen erlaubt sind. - Wenn MULTI_LINE auf - FALSEeingestellt ist und eine neue Zeile innerhalb eines JSON-Datensatzes vorhanden ist, wird der Datensatz, der die neue Zeile enthält, als Fehler interpretiert.- Standard: - TRUE
- ALLOW_DUPLICATE = TRUE | FALSE
- Boolescher Wert, der angibt, dass doppelte Objektfeldnamen erlaubt sind (nur der letzte wird beibehalten). - Standard: - FALSE
- STRIP_OUTER_ARRAY = TRUE | FALSE
- Boolescher Wert, der den JSON-Parser anweist, äußere Klammern zu entfernen (also - [ ]).- Standard: - FALSE
- STRIP_NULL_VALUES = TRUE | FALSE
- Boolescher Wert, der den JSON-Parser anweist, Objektfelder oder Array-Elemente mit - null-Werten zu entfernen. Zum Beispiel, wenn auf- TRUEgesetzt:- Vorher - Nachher - [null]- []- [null,null,3]- [,,3]- {"a":null,"b":null,"c":123}- {"c":123}- {"a":[1,null,2],"b":{"x":null,"y":88}}- {"a":[1,,2],"b":{"y":88}}- Standard: - FALSE
- REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen ( - �). Diese Option führt eine 1:1-Zeichenersetzung aus.- Bei Einstellung auf - TRUEersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.- Bei Einstellung auf - FALSEgibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard: - FALSE
TYPE = AVRO¶
- COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- Zeichenfolge (Konstante), die den aktuellen Komprimierungsalgorithmus für die abzufragenden Datendateien angibt. Snowflake verwendet diese Option, um zu ermitteln, wie bereits komprimierte Datendateien komprimiert wurden, sodass die komprimierten Daten in den Dateien zum Abfragen 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 abfragen, verwenden Sie explizit - BROTLIanstelle von- AUTO.- GZIP- BZ2- BROTLI- ZSTD- DEFLATE- Deflate-komprimierte Dateien (mit zlib-Header, RFC1950). - RAW_DEFLATE- Raw Deflate-komprimierte Dateien (ohne Header, RFC1951). - NONE- Die abzufragenden Datendateien wurden nicht komprimiert. - Standard: - AUTO.
Bemerkung
Wir empfehlen die Verwendung der Standardoption AUTO, da mit dieser sowohl die Datei- als auch die Codec-Komprimierung bestimmt wird. Die Angabe einer Komprimierungsoption bezieht sich auf die Komprimierung von Dateien, nicht auf die Komprimierung von Blöcken (Codecs).
- REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen ( - �). Diese Option führt eine 1:1-Zeichenersetzung aus.- Bei Einstellung auf - TRUEersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.- Bei Einstellung auf - FALSEgibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard: - FALSE
TYPE = ORC¶
- TRIM_SPACE = TRUE | FALSE
- Boolescher Wert, der angibt, ob vorangestellte und nachstehende Leerzeichen aus Zeichenfolgen entfernt werden sollen. - Wenn Ihre externe Datenbanksoftware beispielsweise Felder in Anführungszeichen setzt, aber ein führendes Leerzeichen einfügt, liest Snowflake das führende Leerzeichen und nicht das öffnende Anführungszeichen als Anfang des Feldes (d. h. die Anführungszeichen werden als Teil der Zeichenfolge von Felddaten interpretiert). Setzen Sie diese Option auf - TRUE, um unerwünschte Leerzeichen zu entfernen.- Diese Dateiformatoption wird nur bei folgenden Aktionen angewendet: - Abfragen von Objektwerten in ORC-Datendateien in Stagingbereichen. 
- Abfragen von ORC-Daten in separaten Spalten unter Verwendung der Kopieroption MATCH_BY_COLUMN_NAME. 
- Abfrage von ORC-Daten in separaten Spalten durch Angabe einer Abfrage in der COPY-Anweisung (d. h. COPY-Transformation). 
 - Standard: - FALSE
- REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen ( - �). Diese Option führt eine 1:1-Zeichenersetzung aus.- Bei Einstellung auf - TRUEersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.- Bei Einstellung auf - FALSEgibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard: - FALSE
- NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- Zeichenfolge, die zum Konvertieren in und von SQL NULL verwendet wird. Snowflake ersetzt diese Zeichenfolgen in der Datenquelle durch SQL NULL. Um mehr als eine Zeichenfolge anzugeben, schließen Sie die Liste der Zeichenfolgen in Klammern ein und trennen Sie jeden Wert durch Kommas. - Beachten Sie, dass Snowflake alle Instanzen des Wertes in einen NULL-Wert konvertiert, unabhängig vom Datentyp. Wenn z. B. - 2als Wert angegeben wird, werden alle Instanzen von- 2entweder in eine Zeichenfolge oder in eine Zahl konvertiert.- Beispiel: - NULL_IF = ('\N', 'NULL', 'NUL', '')- Beachten Sie, dass diese Option leere Zeichenfolgen enthalten kann. - Diese Dateiformatoption wird bei der Abfrage von Objektwerten in ORC-Datendateien in Stagingbereichen angewendet. - Standardwert: - \N(das heißt, NULL)
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 und Zstandard v0.8 (und höher). - SNAPPY- NONE- Die Datendateien wurden nicht komprimiert. - Standard: - AUTO
- BINARY_AS_TEXT = TRUE | FALSE
- Boolescher Wert, der angibt, ob Spalten ohne definierten logischen Datentyp als UTF-8-Text interpretiert werden sollen. Wenn auf - FALSEgesetzt, interpretiert Snowflake diese Spalten als Binärdaten.- Standard: - TRUE- Bemerkung - Snowflake empfiehlt, BINARY_AS_TEXT auf FALSE zu setzen, um mögliche Konvertierungsprobleme zu vermeiden. 
- REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen ( - �). Diese Option führt eine 1:1-Zeichenersetzung aus.- Bei Einstellung auf - TRUEersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.- Bei Einstellung auf - FALSEgibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard: - FALSE
Anforderungen an die Zugriffssteuerung¶
Eine Rolle, die zur Ausführung dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:
| Berechtigung | Objekt | Anmerkungen | 
|---|---|---|
| CREATE EXTERNAL TABLE | Schema | |
| CREATE STAGE | Schema | Erforderlich, wenn ein neuer Stagingbereich erstellt wird. | 
| USAGE | Stagingbereich | Erforderlich, wenn auf einen vorhandenen Stagingbereich verwiesen wird. | 
| USAGE | Dateiformat | 
USAGE-Berechtigung für die übergeordnete Datenbank und das Schema ist erforderlich, um Operationen an einem beliebigen Objekt in einem Schema durchzuführen. Beachten Sie, dass eine Rolle, die eine beliebige Berechtigung für ein Schema erhalten hat, es dieser Rolle erlaubt, das Schema aufzulösen. Zum Beispiel kann eine Rolle, der die CREATE-Berechtigung für ein Schema gewährt wurde, Objekte in diesem Schema erstellen, ohne auch USAGE für dieses Schema gewährt bekommen zu haben.
Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.
Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.
Nutzungshinweise¶
- Externe Tabellen unterstützen nur externe (S3, Azure oder GCS) Stagingbereiche; interne (Snowflake) Stagingbereiche werden nicht unterstützt. - Externe Tabellen unterstützen keine Speicherversionierung (S3-Versionierung, Objekt-Versionierung in Google Cloud Storage oder Versionierung für Azure Storage). - Sie können nicht auf Daten in archivierten Cloudspeicherklassen zugreifen, die erst wiederhergestellt werden müssen, bevor sie abgerufen werden können. Zu diesen Archivspeicherklassen gehören zum Beispiel die Amazon S3-Speicherklassen Glacier Flexible Retrieval und Glacier Deep Archive oder Microsoft Azure Archive Storage. 
- Snowflake setzt keine Integritätseinschränkungen für externe Tabellen durch. Insbesondere erzwingt Snowflake, anders als normale Tabellen, keine NOT NULL-Einschränkungen. 
- 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. 
- METADATA$FILE_ROW_NUMBER: Zeilenzahl für jeden Datensatz in der Staging-Datendatei. 
 
- Die folgenden Elemente werden bei externen Tabellen nicht unterstützt: - Gruppierungsschlüssel 
- Klonen 
- Daten im XML-Format 
- Time Travel 
 
- Informationen zur Verwendung einer externen Tabelle mit einer Richtlinie finden Sie unter den folgenden Themen: 
- Die Verwendung von - OR REPLACEist gleichbedeutend mit der Ausführung von DROP EXTERNAL TABLE auf der vorhandenen externen Tabelle und der anschließenden Erstellung einer neuen externen Tabelle mit demselben Namen.- CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion. - Das bedeutet, dass alle Abfragen, die gleichzeitig mit der Operation CREATE OR REPLACE EXTERNAL TABLE ausgeführt werden, entweder die alte oder die neue Version der externen Tabelle verwenden. 
- Metadaten: - Achtung - Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „User“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake. 
- Wenn Sie eine externe Tabelle mit einer zur externen Tabelle hinzugefügten Zeilenzugriffsrichtlinie erstellen, verwenden Sie die Funktion POLICY_CONTEXT, um eine Abfrage auf die externe Tabelle zu simulieren, die durch eine Zeilenzugriffsrichtlinie geschützt ist. 
- SELECT - *gibt immer die Spalte VALUE zurück, in der alle regulären oder semistrukturierten Daten in Variant-Zeile umgewandelt werden.
- Die - OR REPLACE- und- IF NOT EXISTS-Klauseln schließen sich gegenseitig aus. Sie können nicht beide in derselben Anweisung verwendet werden.
Beispiele¶
Automatisch aus Partitionsspaltenausdrücken hinzugefügte Partitionen¶
Erstellen Sie eine externe Tabelle mit Partitionen, die aus Ausdrücken in den Partitionsspaltendefinitionen berechnet werden.
In step 2 of the following example, the data files are organized in cloud storage with the following structure: logs/YYYY/MM/DD/HH24. Beispiel:
- logs/2018/08/05/0524/
- logs/2018/08/27/1408/
- Erstellen Sie einen externen Stagingbereich mit dem Namen - s1fü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 s1 URL='s3://mybucket/files/logs/' ... ; - Google Cloud Storage - CREATE STAGE s1 URL='gcs://mybucket/files/logs/' ... ; - Microsoft Azure - CREATE STAGE s1 URL='azure://mycontainer/files/logs/' ... ; 
- Fragen Sie die Pseudospalte METADATA$FILENAME in den bereitgestellten Daten ab. Verwenden Sie dann die Ergebnisse, um Ihre Partitionsspalten zu entwickeln: - SELECT metadata$filename FROM @s1/; +----------------------------------------+ | METADATA$FILENAME | |----------------------------------------| | files/logs/2018/08/05/0524/log.parquet | | files/logs/2018/08/27/1408/log.parquet | +----------------------------------------+ 
- Erstellen Sie die partitionierte externe Tabelle. - In der Partitionsspalte - date_partwird- YYYY/MM/DDin der Pseudospalte METADATA$FILENAME unter Verwendung von TO_DATE , DATE in ein Datum umgewandelt. Im SQL-Befehl wird auch Parquet als Dateiformattyp angegeben.- Die externen Tabellen für Amazon S3 und Microsoft Azure-Cloudspeicher enthalten den Parameter, der erforderlich ist, um die Metadaten automatisch zu aktualisieren, wenn dies durch Ereignisbenachrichtigungen vom jeweiligen Cloudmessagingdienst ausgelöst wird: - Amazon S3 - CREATE EXTERNAL TABLE et1( date_part date AS TO_DATE(SPLIT_PART(metadata$filename, '/', 3) || '/' || SPLIT_PART(metadata$filename, '/', 4) || '/' || SPLIT_PART(metadata$filename, '/', 5), 'YYYY/MM/DD'), timestamp bigint AS (value:timestamp::bigint), col2 varchar AS (value:col2::varchar)) PARTITION BY (date_part) LOCATION=@s1/logs/ AUTO_REFRESH = true FILE_FORMAT = (TYPE = PARQUET) AWS_SNS_TOPIC = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket'; - Google Cloud Storage - CREATE EXTERNAL TABLE et1( date_part date AS TO_DATE(SPLIT_PART(metadata$filename, '/', 3) || '/' || SPLIT_PART(metadata$filename, '/', 4) || '/' || SPLIT_PART(metadata$filename, '/', 5), 'YYYY/MM/DD'), timestamp bigint AS (value:timestamp::bigint), col2 varchar AS (value:col2::varchar)) PARTITION BY (date_part) LOCATION=@s1/logs/ AUTO_REFRESH = true FILE_FORMAT = (TYPE = PARQUET); - Microsoft Azure - CREATE EXTERNAL TABLE et1( date_part date AS TO_DATE(SPLIT_PART(metadata$filename, '/', 3) || '/' || SPLIT_PART(metadata$filename, '/', 4) || '/' || SPLIT_PART(metadata$filename, '/', 5), 'YYYY/MM/DD'), timestamp bigint AS (value:timestamp::bigint), col2 varchar AS (value:col2::varchar)) PARTITION BY (date_part) INTEGRATION = 'MY_INT' LOCATION=@s1/logs/ AUTO_REFRESH = true FILE_FORMAT = (TYPE = PARQUET); 
- Aktualisieren der Metadaten der externen Tabelle: - ALTER EXTERNAL TABLE et1 REFRESH; 
Filtern Sie beim Abfragen der externen Tabelle die Daten anhand der Partitionsspalte unter Verwendung einer WHERE-Klausel: Snowflake durchsucht nur die Dateien in den angegebenen Partitionen, die mit den Filterbedingungen übereinstimmen:
SELECT timestamp, col2 FROM et1 WHERE date_part = to_date('08/05/2018');
Manuell hinzugefügte Partitionen¶
Erstellen Sie eine externe Tabelle mit benutzerdefinierten Partitionen (also die Partitionen werden vom Eigentümer der externen Tabelle manuell hinzugefügt).
- Erstellen Sie einen externen Stagingbereich mit dem Namen - s2für den Speicherort, an dem die Datendateien gespeichert sind.- Die Stagingbereichsdefinition enthält den Pfad - /files/logs/:- Amazon S3 - CREATE STAGE s2 URL='s3://mybucket/files/logs/' ... ; - Google Cloud Storage - CREATE STAGE s2 URL='gcs://mybucket/files/logs/' ... ; - Microsoft Azure - CREATE STAGE s2 URL='azure://mycontainer/files/logs/' ... ; 
- Erstellen Sie die partitionierte externe Tabelle. Die externe Tabelle enthält drei Partitionsspalten mit unterschiedlichen Datentypen. - Es gelten die folgenden Regeln: - Bei den Spaltennamen in den Partitionsausdrücken ist die Groß-/Kleinschreibung zu beachten 
- Der Name einer Partitionsspalte muss in Großbuchstaben geschrieben werden, es sei denn, der Spaltenname ist in Anführungszeichen eingeschlossen. Alternativ können Sie im SQL-Ausdruck auch GET_IGNORE_CASE anstelle des - :-Zeichens verwenden, bei dem Groß-/Kleinschreibung relevant ist.
- Wenn ein Spaltenname in doppelte Anführungszeichen eingeschlossen ist (z. B. „Column1“), muss der Name der Partitionsspalte ebenfalls in Anführungszeichen gesetzt werden und genau mit dem Spaltennamen übereinstimmen. 
 - Beachten Sie, dass die Syntax für jeden der drei Cloudspeicherdienste (Amazon S3, Google Cloud Storage und Microsoft Azure) identisch ist, da die Metadaten der externen Tabelle nicht aktualisiert werden: - create external table et2( col1 date as (parse_json(metadata$external_table_partition):COL1::date), col2 varchar as (parse_json(metadata$external_table_partition):COL2::varchar), col3 number as (parse_json(metadata$external_table_partition):COL3::number)) partition by (col1,col2,col3) location=@s2/logs/ partition_type = user_specified file_format = (type = parquet); 
- Fügen Sie Partitionen für die Partitionsspalten hinzu: - ALTER EXTERNAL TABLE et2 ADD PARTITION(col1='2022-01-24', col2='a', col3='12') LOCATION '2022/01'; - Snowflake fügt die Partitionen zu den Metadaten der externen Tabelle hinzu. Bei dieser Operation werden auch alle neuen Datendateien am angegebenen Speicherort zu den Metadaten hinzugefügt: - +---------------------------------------+----------------+-------------------------------+ | file | status | description | +---------------------------------------+----------------+-------------------------------+ | mycontainer/files/logs/2022/01/24.csv | REGISTERED_NEW | File registered successfully. | | mycontainer/files/logs/2022/01/25.csv | REGISTERED_NEW | File registered successfully. | +---------------------------------------+----------------+-------------------------------+ 
Filtern Sie beim Abfragen der externen Tabelle die Daten anhand der Partitionsspalten mit einer WHERE-Klausel. In diesem Beispiel werden die Datensätze in der Reihenfolge zurückgegeben, in der sie in der Staging-Datendatei gespeichert sind:
SELECT col1, col2, col3 FROM et1 WHERE col1 = TO_DATE('2022-01-24') AND col2 = 'a' ORDER BY METADATA$FILE_ROW_NUMBER;
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 Automatisch aus Partitionsspaltenausdrücken hinzugefügte Partitionen erstellt wurde:
CREATE MATERIALIZED VIEW et1_mv
  AS
  SELECT col2 FROM et1;
Die allgemeine Syntax sowie Verwendungshinweise und weitere Beispiele für diesen SQL-Befehl finden Sie unter CREATE MATERIALIZED VIEW.
Externe Tabelle, die mit erkannten Spaltendefinitionen erstellt wird¶
Erstellen Sie eine externe Tabelle, bei der die Spaltendefinitionen von einer Menge von Stagingdateien abgeleitet sind, die Avro-, Parquet- oder ORC-Daten enthalten.
Bemerkung
Der Stagingbereich mystage und das Dateiformat my_parquet_format, auf die in der Anweisung verwiesen wird, müssen bereits vorhanden sein. 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:
CREATE EXTERNAL TABLE mytable USING TEMPLATE ( SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) FROM TABLE( INFER_SCHEMA( LOCATION=>'@mystage', FILE_FORMAT=>'my_parquet_format' ) ) ) LOCATION=@mystage FILE_FORMAT=my_parquet_format AUTO_REFRESH=false;
Die Verwendung von * für ARRAY_AGG(OBJECT_CONSTRUCT()) kann zu einem Fehler führen, wenn das zurückgegebene Ergebnis größer als 16 MB ist. Vermeiden Sie die Verwendung von * bei größeren Resultsets, und verwenden Sie für die Abfrage nur die erforderlichen Spalten COLUMN NAME, TYPE und NULLABLE, wie im folgenden Beispiel gezeigt. Die optionale Spalte ORDER_ID kann bei Verwendung von WITHIN GROUP (ORDER BY order_id) hinzugefügt werden:
CREATE EXTERNAL TABLE mytable USING TEMPLATE ( SELECT ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME',COLUMN_NAME, 'TYPE',TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION',EXPRESSION)) FROM TABLE( INFER_SCHEMA( LOCATION=>'@mystage', FILE_FORMAT=>'my_parquet_format' ) ) ) LOCATION=@mystage FILE_FORMAT=my_parquet_format AUTO_REFRESH=false;