Kategorien:

DDL für Tabellen, Ansichten und Sequenzen

CREATE EXTERNAL TABLE

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, DESCRIBE EXTERNAL TABLE

Unter diesem Thema:

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>' ]
  [ TABLE_FORMAT = DELTA ]
  [ COPY GRANTS ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON (VALUE) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]

-- 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 ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON (VALUE) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]

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 = '<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 = ORC ... )
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ]
-- 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ß-/Kleinschreibung zu beachten.

Weitere Details 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.]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.

    Die externe Tabelle fügt diesen Pfad an jeden in der Stagingbereichsdefinition angegebenen Pfad an. 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.

    Beachten Sie, dass der [ WITH ] LOCATION-Wert nicht auf bestimmte Dateinamen verweisen kann. Wenn eine externe Tabelle auf einzelne Stagingdateien verweisen soll, verwenden Sie den Parameter PATTERN.

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.

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.

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 und/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: <Spalte_2_Wert>, c3: <Spalte_1_Wert> ...}).

Fügen Sie z. B. eine VARCHAR-Spalte mit dem Namen mycol hinzu, 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 mycol hinzu, die auf das verschachtelte, sich wiederholende Element c in der Stagingdatei verweist:

mycol varchar as (value:"b"."c"::varchar)
Apache Parquet

Entweder referenzieren Sie die Elementnamen mit der Notation für semistrukturierte Daten oder referenzieren d Parquet-Feld-ID für eine bestimmte Spalte.

Fügen Sie z. B. unter Verwendung der Feld-ID eine VARCHAR-Spalte mit dem Namen mycol hinzu, die auf die zweite Spalte in den Parquet-Stagingdateien verweist:

mycol VARCHAR as (value:"2"::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 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 = FALSE einzustellen. 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 (d. h. 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 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

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.

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.

TABLE_FORMAT = DELTA

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.

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.json, _delta_log/00000000000000000010.checkpoint.parquet usw.

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

  • 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_CREATE als auch AUTO_REFRESH müssen auf FALSE gesetzt werden.

    Führen Sie in regelmäßigen Abständen eine ALTER EXTERNAL TABLE … REFRESH-Anweisung aus, um alle hinzugefügten oder entfernten Dateien zu registrieren.

  • Der Wert von FILE_FORMAT muss Parquet als Dateityp angeben.

  • Um eine optimale Leistung zu erzielen, sollten für die externe Tabelle Partitionsspalten definiert werden.

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

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-Wert' [ , Tag-Name = 'Tag-Wert' , ... ] )

Gibt den Tag-Namen (d. h. den Schlüssel) und den Tag-Wert an.

Der Tag-Wert ist immer eine Zeichenfolge, die maximale 256 Zeichen lang sein kann. Die maximale Anzahl von eindeutigen Tag-Schlüsseln, die für ein Objekt festgelegt werden können, ist 20.

Bemerkung

Für eine Tabelle oder Ansicht und deren Spalten ist die Gesamtzahl der eindeutigen Tag-Schlüssel, die gesetzt werden können, 20.

Wenn beispielsweise für eine einzelne Spalte einer Tabelle 10 eindeutige Tag-Schlüssel gesetzt wurden, erlaubt Snowflake das Setzen von 10 zusätzlichen eindeutigen Tag-Schlüsseln entweder für diese Spalte, für andere Spalten in der Tabelle, für die Tabelle selbst oder für eine Kombination aus der Tabelle und deren Spalten. Sobald die Grenze von 20 eindeutigen Tag-Schlüsseln erreicht ist, können keine weiteren Tag-Schlüssel für die Tabelle oder deren Spalten gesetzt werden.

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

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 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:

Manuell hinzugefügt

Erforderlich: Setzen Sie auch den Wert des Parameters PARTITION_TYPE auf 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 Format der Partitionsspaltendefinition ist wie folgt:

Partitionsspaltenname Spaltentyp AS ( PARSE_JSON (METADATA$EXTERNALTABLE_PARTITION:Partitionsspaltenname::Datentyp )

Angenommen, die Spalten col1, col2 und col3 enthalten 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.

PARTITION_TYPE = USER_SPECIFIED

Definiert den Partitionstyp für die externe Tabelle als benutzerdefiniert. Der Eigentümer der externen Tabelle (d. h. 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 ( 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)

Google Cloud Storage

INTEGRATION = Name_der_Integration

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 automatischen Aktualisierungsfunktion finden Sie unter Automatisches Aktualisieren externer Tabellen für Google Cloud Storage.

Microsoft Azure

INTEGRATION = Name_der_Integration

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 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 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/Entladen 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

Zu ladende Datendateien wurden nicht komprimiert.

RECORD_DELIMITER = 'Zeichen' | 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 0x oder \x vorangestellt). Geben Sie beispielsweise für Datensätze, die durch das Zirkumflex-Akzentzeichen (^) getrennt sind, den Oktalwert (\\5e) 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\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 Escapesequenzen oder die folgenden Einzelbyte- oder Multibyte-Zeichen:

Einzelbyte-Zeichen

Oktalwerte (mit \\ vorangestellt) oder Hex-Werte (mit 0x oder \x vorangestellt). Geben Sie beispielsweise für Datensätze, die durch das Zirkumflex-Akzentzeichen (^) getrennt sind, den Oktalwert (\\5e) 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: 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 = 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 während der Datenladeoperation zu entfernen.

Diese Dateiformatoption wird nur bei folgenden Aktionen angewendet:

  • Abfragen von Objektwerten in ORC-Datendateien in Stagingbereichen.

  • Laden von ORC-Daten in separate Spalten unter Verwendung der Kopieroption MATCH_BY_COLUMN_NAME.

  • Laden von ORC-Daten in separate Spalten durch Angabe einer Abfrage in der COPY-Anweisung (d. h. COPY-Transformation).

Standard: FALSE

NULL_IF = ( 'Zeichenfolge1' [ , 'Zeichenfolge2' , ... ] )

Zeichenfolge, die zum Konvertieren in und von SQL NULL verwendet wird. Snowflake ersetzt diese Zeichenfolgen in der Datenladequelle 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. 2 als Wert angegeben wird, werden alle Instanzen von 2 entweder 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 nur bei folgenden Aktionen angewendet:

  • Abfragen von Objektwerten in ORC-Datendateien in Stagingbereichen.

  • Laden von ORC-Daten in separate Spalten unter Verwendung der Kopieroption MATCH_BY_COLUMN_NAME.

  • Laden von ORC-Daten in separate Spalten durch Angabe einer Abfrage in der COPY-Anweisung (d. h. COPY-Transformation).

Standard: \\N (d. h. NULL mit der Annahme, dass der ESCAPE_UNENCLOSED_FIELD-Wert \\ ist)

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

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls 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.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer benutzerdefinierten Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von benutzerdefinierten Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Zugriffssteuerung in Snowflake.

Nutzungshinweise

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

    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.

  • Folgendes wird bei externen Tabellen nicht unterstützt:

    • Gruppierungsschlüssel

    • Klonen

    • Daten im XML-Format

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

  • Richtlinien:

    • Sie können beim Erstellen einer externen Tabelle keine Maskierungsrichtlinie zu einer externen Tabellenspalte hinzufügen, da eine Maskierungsrichtlinie nicht mit einer virtuellen Spalte verbunden werden kann.

    • Sie können beim Erstellen einer externen Tabelle aber eine Zeilenzugriffsrichtlinie zu der externen Tabelle hinzufügen.

  • Die Verwendung von OR REPLACE ist 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. Die Aktionen für Löschen und Erstellen erfolgen in einer einzigen atomaren Operation. 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 „Benutzer“), 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.

Beispiele

Automatisch aus Partitionsspaltenausdrücken hinzugefügte Partitionen

Erstellen Sie eine externe Tabelle mit Partitionen, die aus Ausdrücken in den Partitionsspaltendefinitionen berechnet werden.

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

  • logs/2018/08/05/0524/

  • logs/2018/08/27/1408/

  1. Erstellen Sie einen externen Stagingbereich mit dem Namen s1 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 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/'
      ...
      ;
    
  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 @s1/;
    
    +----------------------------------------+
    | 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.

    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);
    
  4. Aktualisieren der Metadaten der externen Tabelle:

    ALTER EXTERNAL TABLE et1 REFRESH;
    

Filtern Sie beim Abfragen der externen Tabelle die Daten anhand der Partitionsspalte mit 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 (d. h. die Partitionen werden vom Eigentümer der externen Tabelle manuell hinzugefügt).

  1. Erstellen Sie einen externen Stagingbereich mit dem Namen s2 fü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/'
      ...
      ;
    
  2. Erstellen Sie die partitionierte externe Tabelle. Die externe Tabelle enthält drei Partitionsspalten mit unterschiedlichen Datentypen.

    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);
    
  3. 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;

Externe Tabelle, die auf Dateien in einem Delta Lake verweist

Erstellen Sie eine partitionierte externe Tabelle mit dem Namen ext_twitter_feed, die auf die Delta Lake-Dateien im Parquet-Format im externen Stagingbereich mystage und im Pfad daily verweist.

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

Amazon S3

CREATE EXTERNAL TABLE ext_twitter_feed(
 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=@mystage/daily/
 REFRESH_ON_CREATE =  FALSE
 AUTO_REFRESH = FALSE
 FILE_FORMAT = (TYPE = PARQUET)
 TABLE_FORMAT = DELTA;

Google Cloud Storage

CREATE EXTERNAL TABLE ext_twitter_feed(
  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=@mystage/daily/
  REFRESH_ON_CREATE =  FALSE
  AUTO_REFRESH = FALSE
  FILE_FORMAT = (TYPE = PARQUET)
  TABLE_FORMAT = DELTA;

Microsoft Azure

CREATE EXTERNAL TABLE ext_twitter_feed(
  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=@mystage/daily/
  REFRESH_ON_CREATE =  FALSE
  AUTO_REFRESH = FALSE
  FILE_FORMAT = (TYPE = PARQUET)
  TABLE_FORMAT = DELTA;

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.