Einführung in externe Tabellen¶
Eine externe Tabelle ist ein Snowflake-Feature, mit dem Sie Daten, die in einem externen Stagingbereich gespeichert sind, so abfragen können, als befänden sich die Daten in einer Tabelle in Snowflake. Der externe Stagingbereich ist nicht Teil von Snowflake, sodass Snowflake den Stagingbereich nicht speichert oder verwaltet.
In externen Tabellen können Sie (innerhalb von Snowflake) bestimmte Metadaten auf Dateiebene speichern, darunter Dateinamen, Bezeichner von Versionen und zugehörige Eigenschaften. Externe Tabellen können auf Daten zugreifen, die in einem beliebigen von COPY INTO <Tabelle>-Anweisungen unterstützten Format gespeichert sind.
Externe Tabellen sind schreibgeschützt. Sie können keine Data Manipulation Language (DML)-Operationen auf ihnen ausführen. Sie können jedoch externe Tabellen für Abfragen und Verknüpfungsoperationen (Joins) verwenden. Sie können auch Ansichten auf externe Tabellen erstellen.
Das Abfragen von Daten einer externen Tabelle kann langsamer sein als das Abfragen von Daten, die Sie nativ in einer Tabelle in Snowflake speichern. Um die Abfrageleistung zu verbessern, können Sie eine materialisierte Ansicht verwenden, die auf einer externen Tabelle basiert.
Bemerkung
Wenn Snowflake beim Scannen einer Datei im Cloudspeicher während eines Abfragevorgangs auf einen Fehler stößt, wird die Datei übersprungen und das Scannen mit der nächsten Datei fortgesetzt. Eine Abfrage kann eine Datei teilweise scannen und die Zeilen zurückgeben, die gescannt wurden, bevor der Fehler auftrat.
Unter diesem Thema:
Planen des Schemas einer externen Tabelle¶
In diesem Abschnitt werden die Optionen zum Entwerfen externer Tabellen beschrieben.
Schema beim Lesen¶
Alle externen Tabellen enthalten die folgenden Spalten:
- VALUE:
Eine Spalte vom Typ VARIANT, die eine einzelne Zeile in der externen Datei darstellt.
- METADATA$FILENAME:
Eine Pseudospalte, die den Namen jeder in der externen Tabelle enthaltenen Staging-Datendatei einschließlich ihres Pfads im Stagingbereich angibt.
- METADATA$FILE_ROW_NUMBER:
Eine Pseudospalte, die für jeden Datensatz in einer Staging-Datendatei die Zeilennummer anzeigt.
Um externe Tabellen zu erstellen, müssen Sie nur einige Kenntnisse über das Dateiformat und das Datensatzformat der Quelldatendateien haben. Es ist nicht erforderlich, das Schema der Datendateien zu kennen.
Beachten Sie, dass SELECT *
immer die Spalte VALUE zurückgibt, in der alle regulären oder semistrukturierten Daten in VARIANT-Zeilen umgewandelt werden.
Virtuelle Spalten¶
Wenn Sie mit dem Schema der Quelldatendateien vertraut sind, können Sie mithilfe der VALUE-Spalte und/oder der METADATA$FILENAME- oder METADATA$FILE_ROW_NUMBER-Pseudospalte zusätzliche virtuelle Spalten als Ausdrücke erstellen. Beim Scannen der externen Daten müssen die Datentypen aller angegebenen Felder oder semistrukturierten Datenelemente in der Datendatei mit den Datentypen dieser zusätzlichen Spalten in der externen Tabelle übereinstimmen. Dies ermöglicht eine starke Typprüfung und Schemavalidierung der externen Daten.
Allgemeine Empfehlungen für Dateigrößen¶
Um bei der Abfrage externer Tabellen die Anzahl der parallelen Scanoperationen zu optimieren, empfehlen wir die folgenden Datei- oder Zeilengruppengrößen pro Format:
Format |
Empfohlener Größenbereich |
Anmerkungen |
---|---|---|
Parquet-Dateien |
256 - 512 MB |
|
Parquet-Zeilengruppen |
16 - 256 MB |
Beachten Sie, dass Snowflake bei Parquet-Dateien, die mehrere Zeilengruppen enthalten, jede Zeilengruppe auf einem anderen Server bearbeiten kann. Um die Abfrageleistung zu verbessern, empfehlen wir, bei der Größe der Parquet-Dateien den empfohlenen Bereich einzuhalten oder, falls große Dateien erforderlich sind, mehrere Zeilengruppen in jede Datei aufzunehmen. |
Alle anderen unterstützten Dateiformate |
16 - 256 MB |
Für eine optimale Leistung bei der Abfrage großer Datendateien sollten Sie materialisierte Ansichten über externe Tabellen erstellen und abfragen.
Partitionierte externe Tabellen¶
Es wird dringend empfohlen, Ihre externen Tabellen zu partitionieren. Dazu müssen Ihre zugrunde liegenden Daten unter Verwendung logischer Pfade organisiert sein, die Datum, Uhrzeit, Land oder ähnliche Dimensionen im Pfad enthalten. Durch Partitionierung werden Ihre externen Tabellendaten mithilfe von Partitionsspalten in mehrere Teile unterteilt.
Eine externe Tabellendefinition kann mehrere Partitionsspalten enthalten, die den externen Daten eine mehrdimensionale Struktur auferlegen. Partitionen werden in den Metadaten der externen Tabelle gespeichert.
Zu den Vorteilen der Partitionierung gehört eine verbesserte Abfrageleistung. Da die externen Daten in separate Segmente/Teile partitioniert sind, ist die Antwortzeit bei Abfragen kürzer, wenn ein nur kleiner Teil der Daten verarbeitet wird, anstatt das gesamte Dataset zu scannen.
Ausgehend von Ihren individuellen Anwendungsfällen können Sie zwischen den beiden folgende Optionen wählen:
Sie fügen neue Partitionen automatisch hinzu, indem Sie eine externe Tabelle aktualisieren, die einen Ausdruck für jede Partitionsspalte definiert.
Sie fügen neue Partitionen manuell hinzu.
Partitionsspalten werden beim Erstellen einer externen Tabelle mit der CREATE EXTERNAL TABLE … PARTITION BY-Syntax definiert. Nachdem eine externe Tabelle erstellt wurde, kann die Methode, mit der Partitionen hinzugefügt werden, nicht mehr geändert werden.
In den folgenden Abschnitten werden die verschiedenen Optionen zum Hinzufügen von Partitionen näher erläutert. Weitere Beispiele finden Sie unter CREATE EXTERNAL TABLE.
Automatisch hinzugefügte Partitionen¶
Beim Erstellen einer externen Tabelle werden die Partitionsspalten als Ausdrücke definiert, die die in der Pseudospalte METADATA$FILENAME gespeicherten Informationen zu Pfad und/oder Dateiname analysieren. Eine Partition besteht aus allen Datendateien, die mit dem Pfad und/oder Dateinamen im Ausdruck für die Partitionsspalte übereinstimmen.
Die CREATE EXTERNAL TABLE-Syntax zum automatischen Hinzufügen von Partitionen auf der Grundlage von Ausdrücken lautet wie folgt:
CREATE EXTERNAL TABLE
<table_name>
( <part_col_name> <col_type> AS <part_expr> )
[ , ... ]
[ PARTITION BY ( <part_col_name> [, <part_col_name> ... ] ) ]
..
Snowflake berechnet und fügt Partitionen basierend auf den definierten Partitionsspaltenausdrücken hinzu, wenn die Metadaten einer externen Tabelle aktualisiert werden. Standardmäßig werden die Metadaten automatisch beim Erstellen des Objekts aktualisiert. Darüber hinaus kann der Objekteigentümer die Metadaten so konfigurieren, dass sie automatisch aktualisiert werden, wenn neue oder aktualisierte Datendateien im externen Stagingbereich verfügbar sind. Der Eigentümer kann alternativ die Metadaten manuell durch Ausführen des Befehls ALTER EXTERNAL TABLE … REFRESH aktualisieren.
Manuell hinzugefügte Partitionen¶
Beim Erstellen einer externen Tabelle wird der Partitionstyp der neuen externen Tabelle als benutzerdefiniert festgelegt, und es werden nur die Datentypen der Partitionsspalten angegeben. Verwenden Sie diese Option, wenn Sie es vorziehen, Partitionen selektiv hinzuzufügen und zu entfernen, anstatt automatisch Partitionen für alle neuen Dateien an einem externen Speicherort hinzuzufügen, die mit einem Ausdruck übereinstimmen.
Diese Option wird im Allgemeinen gewählt, um externe Tabellen mit anderen Metaspeichern (z. B. AWS Glue oder Apache Hive) zu synchronisieren.
Die CREATE EXTERNAL TABLE-Syntax für manuell hinzugefügte Partitionen lautet wie folgt:
CREATE EXTERNAL TABLE
<table_name>
( <part_col_name> <col_type> AS <part_expr> )
[ , ... ]
[ PARTITION BY ( <part_col_name> [, <part_col_name> ... ] ) ]
PARTITION_TYPE = USER_SPECIFIED
..
Fügen Sie den erforderlichen Parameter PARTITION_TYPE = USER_SPECIFIED
ein.
Die Partitionsspaltendefinitionen sind Ausdrücke, die die Spaltenmetadaten in der internen (verborgenen) Spalte METADATA$EXTERNAL_TABLE_PARTITION analysieren.
Der Objekteigentümer kann durch Ausführen des Befehls ALTER EXTERNAL TABLE … ADD PARTITION Partitionen manuell zu den Metadaten der externen Tabelle hinzufügen:
ALTER EXTERNAL TABLE <name> ADD PARTITION ( <part_col_name> = '<string>' [ , <part_col_name> = '<string>' ] ) LOCATION '<path>'
Das automatische Aktualisieren einer externen Tabelle mit benutzerdefinierten Partitionen wird nicht unterstützt. Der Versuch, diesen Typ von externen Tabellen manuell zu aktualisieren, führt zu einem Benutzerfehler.
Unterstützung von Delta Lake¶
Delta Lake ist ein Tabellenformat für Ihren Data Lake, das neben anderen Features auch ACID-Transaktionen (Atomarität, Konsistenz, Isolation, Dauerhaftigkeit) unterstützt. Alle Daten in Delta Lake werden im Apache Parquet-Format gespeichert. Erstellen Sie externe Tabellen, die auf Ihre um Delta Lake erweiterten Cloudspeicherorte verweisen.
Um eine externe Tabelle zu erstellen, die auf einen Delta Lake verweist, legen Sie in der Anweisung CREATE EXTERNAL TABLE den Parameter TABLE_FORMAT = DELTA
fest.
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.
Die Reihenfolge der durch DDL-Operationen im Cloudspeicher ausgelösten Ereignisbenachrichtigungen ist nicht garantiert. Daher ist die Möglichkeit der automatischen Aktualisierung der Metadaten für externe Tabellen, die auf Delta Lake-Dateien verweisen, nicht verfügbar. Führen Sie in regelmäßigen Abständen eine ALTER EXTERNAL TABLE … REFRESH-Anweisung aus, um alle hinzugefügten oder entfernten Dateien zu registrieren.
Weitere Informationen, einschließlich Beispiele, finden Sie unter CREATE EXTERNAL TABLE.
Hinzufügen oder Löschen von Spalten¶
Ändern Sie eine vorhandene externe Tabelle, um mithilfe der folgenden ALTER TABLE-Syntax Spalten hinzuzufügen oder zu entfernen:
Hinzufügen von Spalten: ALTER TABLE … ADD COLUMN.
Entfernen von Spalten: ALTER TABLE … DROP COLUMN.
Bemerkung
Die Standard-VALUE-Spalte und die Pseudospalten METADATA$FILENAME und METADATA$FILE_ROW_NUMBER können nicht gelöscht werden.
Siehe Beispiel unter ALTER TABLE.
Schützen von externen Tabellen¶
Sie können eine externe Tabelle mithilfe von Maskierungsrichtlinien und Zeilenzugriffsrichtlinien schützen. Weitere Details dazu finden Sie unter:
Materialisierte Ansichten für externe Tabellen¶
In vielen Fällen können materialisierte Ansichten für externe Tabellen schnellere Leistung liefern als entsprechende Abfragen an der zugrunde liegenden externen Tabelle. Dieser Leistungsunterschied kann signifikant sein, wenn eine Abfrage häufig ausgeführt wird oder hinreichend komplex ist.
Aktualisieren Sie die Metadaten auf Dateiebene in allen abgefragten externen Tabellen, damit Ihre materialisierten Ansichten den aktuellen Satz von Dateien im referenzierten Cloudspeicherort verwenden.
Sie können die Metadaten einer externen Tabelle automatisch über den Ereignisbenachrichtigungsdienst Ihres Cloudspeicherdienstes oder manuell mit ALTER EXTERNAL TABLE … REFRESH-Anweisungen aktualisieren.
Automatische Aktualisierung der Metadaten externer Tabellen¶
Die Metadaten von externen Tabellen können automatisch über den Ereignisbenachrichtigungsdienst Ihres Cloudspeicherdienstes aktualisiert werden.
Bei Aktualisierungsoperationen werden die Metadaten mit dem neuesten Satz zugeordneter Dateien im externen Stagingbereich und Pfad synchronisiert, d. h.:
Neue Dateien im Pfad werden zu den Tabellenmetadaten hinzugefügt.
Änderungen an Dateien im Pfad werden in den Tabellenmetadaten aktualisiert.
Dateien, die sich nicht mehr im Pfad befinden, werden aus den Tabellenmetadaten entfernt.
Weitere Informationen dazu finden Sie unter Automatisches Aktualisieren externer Tabellen.
Abrechnung für externe Tabellen¶
Verwaltungskosten für Ereignisbenachrichtigungen zur automatischen Aktualisierung der Metadaten von externen Tabellen sind in Ihren Gebühren enthalten. Diese Verwaltungskosten steigen in Abhängigkeit von der Anzahl der Dateien, die für die externen Stagingbereiche und Pfade in Cloudspeicher hinzugefügt werden, die für Ihre externen Tabellen angegeben sind. Diese Overhead-Kosten erscheinen auf der Abrechnung als Snowpipe-Gebühren, da Snowpipe für die Ereignisbenachrichtigungen bei der automatischen Aktualisierung der externen Tabellen verwendet wird. Sie können diese Kosten schätzen, indem Sie die Funktion PIPE_USAGE_HISTORY abfragen oder die Account Usage-Ansicht Ansicht PIPE_USAGE_HISTORY untersuchen.
Außerdem wird ein geringer Wartungsaufwand für die manuelle Aktualisierung der Metadaten der externen Tabelle (mit ALTER EXTERNAL TABLE … REFRESH) berechnet. Diese Verwaltungskosten werden gemäß dem Standardabrechnungsmodell für Clouddienste berechnet, wie alle ähnlichen Aktivitäten in Snowflake. Manuelle Aktualisierungen von externen Standardtabellen sind ausschließlich Operationen von Clouddiensten. Manuelle Aktualisierungen von externen Tabellen, die um Delta Lake erweitert wurden, sind jedoch auf benutzerverwaltete Computeressourcen (d. h. auf ein virtuelles Warehouse) angewiesen.
Benutzer mit der Rolle ACCOUNTADMIN oder einer Rolle mit der globalen Berechtigung MONITOR USAGE können die Tabellenfunktion AUTO_REFRESH_REGISTRATION_HISTORY abfragen, um den Verlauf der in den Metadaten der angegebenen Objekte registrierten Datendateien und die für diese Operationen in Rechnung gestellten Credits abzurufen.
Workflow¶
Amazon S3¶
Dieser Abschnitt bietet einen umfassenden Überblick über den Setup- und Lade-Workflow bei externen Tabellen, die auf Amazon S3-Stagingbereiche verweisen. Eine vollständige Anleitung finden Sie unter Automatisches Aktualisieren externer Tabellen für Amazon S3.
Erstellen Sie ein benanntes Stagingobjekt (mit CREATE STAGE), das auf den externen Speicherort (d. h. S3-Bucket) verweist, in dem das Staging Ihrer Datendateien erfolgt.
Erstellen Sie eine externe Tabelle (mit CREATE EXTERNAL TABLE), die auf den angegebenen Stagingbereich verweist.
Aktualisieren Sie die Metadaten der externen Tabellen mit ALTER EXTERNAL TABLE … REFRESH, um die Metadaten mit der aktuellen Liste der Dateien im Stagingbereichspfad zu synchronisieren. In diesem Schritt werden auch die Einstellungen in der Definition der externen Tabellen überprüft.
Konfigurieren Sie eine Ereignisbenachrichtigung für den S3-Bucket. Snowflake verwendet Ereignisbenachrichtigungen, um die Metadaten einer externen Tabelle kontinuierlich zu aktualisieren und die Konsistenz mit den Stagingdateien sicherzustellen.
Aktualisieren Sie die Metadaten der externen Tabelle noch einmal manuell mit ALTER EXTERNAL TABLE … REFRESH, um die Metadaten mit allen Änderungen zu synchronisieren, die seit Schritt 3 aufgetreten sind. Danach lösen die S3-Ereignisbenachrichtigungen die Aktualisierung der Metadaten automatisch aus.
Konfigurieren Sie Snowflake-Zugriffssteuerungsrechte für beliebige zusätzliche Rollen, um ihnen Abfragezugriff auf die externe Tabelle zu gewähren.
Google Cloud Storage¶
Dieser Abschnitt bietet einen umfassenden Überblick über den Setup- und Lade-Workflow bei externen Tabellen, die auf Google Cloud Storage (GCS)-Stagingbereiche verweisen.
Konfigurieren Sie ein Google Pub/Sub-Abonnement für GCS-Ereignisse.
Erstellen Sie eine Benachrichtigungsintegration in Snowflake. Eine Benachrichtigungsintegration ist ein Snowflake-Objekt, das als Schnittstelle zwischen Snowflake und Cloud-Meldungswarteschlangendiensten von Drittanbietern wie Pub/Sub dient.
Erstellen Sie ein benanntes Stagingobjekt (mit CREATE STAGE), das auf den externen Speicherort (d. h. GCS-Bucket) verweist, in dem das Staging Ihrer Datendateien erfolgt.
Erstellen Sie eine externe Tabelle (mit CREATE EXTERNAL TABLE), die auf den benannten Stagingbereich und die Integration verweist.
Aktualisieren Sie die Metadaten der externen Tabelle manuell mit ALTER EXTERNAL TABLE … REFRESH, um die Metadaten mit allen Änderungen zu synchronisieren, die seit Schritt 4 vorgenommen wurden. Danach lösen die Pub/Sub-Benachrichtigungen automatisch die Aktualisierung der Metadaten aus.
Konfigurieren Sie Snowflake-Zugriffssteuerungsrechte für beliebige zusätzliche Rollen, um ihnen Abfragezugriff auf die externe Tabelle zu gewähren.
Microsoft Azure¶
Dieser Abschnitt bietet einen umfassenden Überblick über den Setup- und Lade-Workflow bei externen Tabellen, die auf Azure-Stagingbereiche verweisen. Eine vollständige Anleitung finden Sie unter Automatisches Aktualisieren externer Tabellen für Azure Blob Storage.
Konfigurieren Sie ein Event Grid-Abonnement für Azure-Speicherereignisse.
Erstellen Sie eine Benachrichtigungsintegration in Snowflake. Eine Benachrichtigungsintegration ist ein Snowflake-Objekt, das eine Schnittstelle zwischen Snowflake und Cloud-Nachrichtenwarteschlangendiensten von Drittanbietern wie Microsoft Event Grid bereitstellt.
Erstellen Sie ein benanntes Stagingobjekt (mit CREATE STAGE), das auf den externen Speicherort (d. h. Azure-Container) verweist, in dem das Staging Ihrer Datendateien erfolgt.
Erstellen Sie eine externe Tabelle (mit CREATE EXTERNAL TABLE), die auf den benannten Stagingbereich und die Integration verweist.
Aktualisieren Sie die Metadaten der externen Tabelle manuell mit ALTER EXTERNAL TABLE … REFRESH, um die Metadaten mit allen Änderungen zu synchronisieren, die seit Schritt 4 vorgenommen wurden. Anschließend wird die Aktualisierung der Metadaten automatisch durch Event Grid-Benachrichtigungen ausgelöst.
Konfigurieren Sie Snowflake-Zugriffssteuerungsrechte für beliebige zusätzliche Rollen, um ihnen Abfragezugriff auf die externe Tabelle zu gewähren.
Abfragen von externen Tabellen¶
Führen Sie Abfragen externer Tabellen genauso aus, wie Sie es mit Standardtabellen tun würden.
Wenn Snowflake beim Scannen einer Datei im Cloudspeicher während eines Abfragevorgangs auf einen Fehler stößt, wird die Datei übersprungen und das Scannen mit der nächsten Datei fortgesetzt. Eine Abfrage kann eine Datei teilweise scannen und die Zeilen zurückgeben, die gescannt wurden, bevor der Fehler auftrat.
Filtern von Datensätzen in Parquet-Dateien¶
Um die Vorteile von Zeilengruppenstatistiken zum Bereinigen von Daten in Parquet-Dateien zu nutzen, kann eine WHERE-Klausel entweder Partitionsspalten oder reguläre Spalten oder beides enthalten. Es gelten die folgenden Einschränkungen:
Die Klausel darf keine VARIANT-Spalten enthalten.
Die Klausel kann nur einen oder mehrere der folgenden Vergleichsoperatoren enthalten:
=
>
<
Die Klausel kann nur einen oder mehrere logische/boolesche Operatoren sowie die SQL-Funktion STARTSWITH enthalten.
Darüber hinaus nutzen Abfragen der Form "value:<Pfad>::<Datentyp>"
(oder die äquivalenten Funktionen GET/GET_PATH, :) die Vorteile des vektorisierten Scanners. Abfragen der Form "value"
oder einfach "value:<Pfad>"
werden mit dem nicht vektorisierten Scanner verarbeitet. Konvertieren Sie alle Zeitzonendaten in eine Standardzeitzone, indem Sie die Funktion CONVERT_TIMEZONE für Abfragen verwenden, die den vektorisierten Scanner verwenden.
Wenn Dateien nach einem in einem Abfragefilter enthaltenen Schlüssel sortiert sind und mehrere Zeilengruppen in den Dateien vorhanden sind, werden beim Verkürzen bessere Ergebnisse erzielt.
Die folgende Tabelle zeigt ähnliche Abfragestrukturen, die das Verhalten in diesem Abschnitt veranschaulichen, wobei et
eine externe Tabelle ist und c1
, c2
und c3
virtuelle Spalten sind:
Optimiert |
Nicht optimiert |
---|---|
|
|
|
|
Persistente Abfrageergebnisse¶
Ähnlich wie bei Tabellen bleiben die Abfrageergebnisse für externe Tabellen für 24 Stunden persistent. Innerhalb dieses 24-Stunden-Zeitraums wird der Abfrageergebnis-Cache für externe Tabellen durch die folgenden Operationen ungültig gemacht und bereinigt:
Jede DDL-Operation, die die externe Tabellendefinition modifiziert. Dazu gehört das explizite Ändern der externen Tabellendefinition (mit ALTER EXTERNAL TABLE) oder das Neuerstellen der externen Tabelle (mit CREATE OR REPLACE EXTERNAL TABLE).
Änderungen an der Menge der Dateien im Cloudspeicher, die in den Metadaten der externen Tabelle registriert sind. Der Ergebnis-Cache wird entweder durch automatische Aktualisierungsoperationen unter Verwendung des Ereignisbenachrichtigungsdienstes für den Speicherort oder durch manuelle Aktualisierungsvorgänge (unter Verwendung von ALTER EXTERNAL TABLE … REFRESH) ungültig gemacht.
Beachten Sie, dass Änderungen in den referenzierten Dateien im Cloudspeicher den Cache für Abfrageergebnisse unter den folgenden Umständen nicht ungültig machen, was zu veralteten Abfrageergebnissen führt:
Die automatische Aktualisierungsoperation ist deaktiviert (d. h. AUTO_REFRESH = FALSE) oder nicht korrekt konfiguriert.
Die Metadaten der externen Tabelle werden nicht manuell aufgefrischt.
Entfernen älterer Stagingdateien aus den Metadaten externer Tabellen¶
Eine gespeicherte Prozedur kann ältere Stagingdateien aus den Metadaten einer externen Tabelle mithilfe einer ALTER EXTERNAL TABLE … REMOVE FILES-Anweisung entfernen. Die gespeicherte Prozedur entfernt Dateien aus den Metadaten auf der Grundlage des letzten Änderungsdatums im Stagingbereich entfernen.
Beispiel:
Erstellen Sie die gespeicherte Prozedur mit einer CREATE PROCEDURE-Anweisung:
CREATE or replace PROCEDURE remove_old_files(external_table_name varchar, num_days float) RETURNS varchar LANGUAGE javascript EXECUTE AS CALLER AS $$ // 1. Get the relative path of the external table // 2. Find all files registered before the specified time period // 3. Remove the files var resultSet1 = snowflake.execute({ sqlText: `call exttable_bucket_relative_path('` + EXTERNAL_TABLE_NAME + `');` }); resultSet1.next(); var relPath = resultSet1.getColumnValue(1); var resultSet2 = snowflake.execute({ sqlText: `select file_name from table(information_schema.EXTERNAL_TABLE_FILES ( TABLE_NAME => '` + EXTERNAL_TABLE_NAME +`')) where last_modified < dateadd(day, -` + NUM_DAYS + `, current_timestamp());` }); var fileNames = []; while (resultSet2.next()) { fileNames.push(resultSet2.getColumnValue(1).substring(relPath.length)); } if (fileNames.length == 0) { return 'nothing to do'; } var alterCommand = `ALTER EXTERNAL TABLE ` + EXTERNAL_TABLE_NAME + ` REMOVE FILES ('` + fileNames.join(`', '`) + `');`; var resultSet3 = snowflake.execute({ sqlText: alterCommand }); var results = []; while (resultSet3.next()) { results.push(resultSet3.getColumnValue(1) + ' -> ' + resultSet3.getColumnValue(2)); } return results.length + ' files: \n' + results.join('\n'); $$; CREATE or replace PROCEDURE exttable_bucket_relative_path(external_table_name varchar) RETURNS varchar LANGUAGE javascript EXECUTE AS CALLER AS $$ var resultSet = snowflake.execute({ sqlText: `show external tables like '` + EXTERNAL_TABLE_NAME + `';` }); resultSet.next(); var location = resultSet.getColumnValue(10); var relPath = location.split('/').slice(3).join('/'); return relPath.endsWith("/") ? relPath : relPath + "/"; $$;
Rufen Sie die gespeicherte Prozedur auf:
-- Remove all files from the exttable external table metadata: call remove_old_files('exttable', 0); -- Remove files staged longer than 90 days ago from the exttable external table metadata: call remove_old_files('exttable', 90);
Alternativ können Sie mit CREATE TASK eine Aufgabe erstellen, die die gespeicherte Prozedur periodisch aufruft, um ältere Dateien regelmäßig aus den Metadaten der externen Tabelle zu entfernen.
Apache Hive Metastore-Integration¶
Snowflake unterstützt die Integration von Apache Hive-Metastores in Snowflake mithilfe externer Tabellen. Der Hive-Konnektor erkennt Metastore-Ereignisse und überträgt sie an Snowflake, um die externen Tabellen mit dem Hive-Metastore synchron zu halten. Auf diese Weise können Benutzer ihre Daten in Hive verwalten, während sie über Snowflake abgefragt werden.
Anweisungen dazu finden Sie unter Integration von Apache Hive-Metastores in Snowflake.
DDL für externe Tabellen¶
Um das Erstellen und Verwalten von externen Tabellen zu unterstützen, bietet Snowflake den folgenden Satz von speziellen DDL-Befehlen:
Erforderliche Zugriffsrechte¶
Für das Erstellen und Verwalten externer Tabellen ist eine Rolle mit mindestens den folgenden Rollenberechtigungen erforderlich:
Objekt |
Berechtigung |
---|---|
Datenbank |
USAGE |
Schema |
USAGE, CREATE STAGE (wenn ein neuer Stagingbereich erstellt wird), CREATE EXTERNAL TABLE |
Stagingbereich (wenn ein vorhandener Stagingbereich verwendet wird) |
USAGE |
Information Schema¶
Das Snowflake Snowflake Information Schema enthält Ansichten und Tabellenfunktionen, die Sie abfragen können, um Informationen über Ihre externen Tabellen und ihre Staging-Datendateien abzurufen.
Ansicht¶
- EXTERNAL_TABLES-Ansicht
Zeigt Informationen zu externen Tabellen in der angegebenen (oder aktuellen) Datenbank an.
Tabellenfunktionen¶
- AUTO_REFRESH_REGISTRATION_HISTORY
Rufen Sie den Verlauf der in den Metadaten der angegebenen Objekte registrierten Datendateien und der für diese Operationen in Rechnung gestellten Credits ab.
- EXTERNAL_TABLE_FILES
Rufen Sie Informationen zu den Staging-Datendateien ab, die in den Metadaten für eine angegebene externe Tabelle enthalten sind.
- EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY
Rufen Sie Informationen zum Metadatenverlauf für eine externe Tabelle ab, einschließlich etwaiger Fehler beim Aktualisieren der Metadaten.