Kategorien:

DDL für Tabellen, Ansichten und Sequenzen

ALTER EXTERNAL TABLE

Ändert die Eigenschaften, Spalten oder Einschränkungen für eine vorhandene externe Tabelle.

Siehe auch:

CREATE EXTERNAL TABLE, DROP EXTERNAL TABLE, SHOW EXTERNAL TABLES

Unter diesem Thema:

Syntax

ALTER EXTERNAL TABLE [ IF EXISTS ] <name> REFRESH [ '<relative-path>' ]

ALTER EXTERNAL TABLE [ IF EXISTS ] <name> ADD FILES ( '<path>/[<filename>]' [ , [ '<path>/[<filename>'] ] )

ALTER EXTERNAL TABLE [ IF EXISTS ] <name> REMOVE FILES ( '<path>/[<filename>]' [ , [ '<path>/[<filename>]' ] )

ALTER EXTERNAL TABLE [ IF EXISTS ] <name> SET
  [ AUTO_REFRESH = { TRUE | FALSE } ]

ALTER EXTERNAL TABLE [ IF EXISTS ] <name>
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])

ALTER EXTERNAL TABLE [ IF EXISTS ] <name>
  DROP ROW ACCESS POLICY <policy_name>

ALTER EXTERNAL TABLE [ IF EXISTS ] <name>
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])
  , DROP ROW ACCESS POLICY <policy_name>

Parameter

Name

Bezeichner für die zu ändernde externe Tabelle. Wenn der Bezeichner Leerzeichen oder Sonderzeichen enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen gesetzt werden. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

REFRESH [ 'relativer_Pfad' ]

Greift auf die Staging-Datendateien zu, auf die in der Definition der externen Tabelle verwiesen wird, und aktualisiert die Tabellenmetadaten:

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

Geben Sie optional einen relativen Pfad an, um die Metadaten für eine bestimmte Teilmenge der Datendateien zu aktualisieren.

Die Verwendung dieses Parameters muss nur einmal erfolgen, wenn die externe Tabelle erstellt wird. Dieser Schritt synchronisiert die Metadaten mit dem neuesten Satz zugeordneter Dateien im Stagingbereich und Pfad in der externen Tabellendefinition. Außerdem wird durch diesen Schritt sichergestellt, dass die externe Tabelle die Datendateien im angegebenen Stagingbereich und Pfad lesen kann und dass in der Definition der externen Tabelle keine Dateien übersehen wurden.

ADD FILES

Fügt die angegebene, durch Kommas getrennte Liste von Dateien zu den Metadaten der externen Tabelle hinzu. In der Regel werden die Parameter ADD FILES und REMOVE FILES verwendet, um die Metadaten der externen Tabelle manuell zu aktualisieren (d. h. wenn AUTO_REFRESH = FALSE). Die Dateiverweise werden in der Definition der externen Tabelle als Pfade relativ zu [WITH] LOCATION ausgedrückt. Weitere Informationen dazu finden Sie unter CREATE EXTERNAL TABLE.

Listen Sie den Pfad und den Dateinamen jeder Datei oder nur den Pfad auf.

Die Anweisung ALTER EXTERNAL TABLE aktualisiert automatisch die Metadaten der externen Tabelle und fügt die Dateien hinzu, sofern sie am angegebenen Speicherort vorhanden sind.

REMOVE FILES

Entfernt die angegebene, durch Kommas getrennte Liste von Dateien aus den Metadaten der externen Tabelle. In der Regel werden die Parameter ADD FILES und REMOVE FILES verwendet, um die Metadaten der externen Tabelle manuell zu aktualisieren (d. h. wenn AUTO_REFRESH = FALSE). Die Dateiverweise werden in der Definition der externen Tabelle als Pfade relativ zu [WITH] LOCATION ausgedrückt. Weitere Informationen dazu finden Sie unter CREATE EXTERNAL TABLE.

Listen Sie den Pfad und den Dateinamen jeder Datei oder nur den Pfad auf.

Die Anweisung ALTER EXTERNAL TABLE aktualisiert automatisch die Metadaten der externen Tabelle und entfernt die Dateien.

SET ...

Gibt eine (oder mehrere) Eigenschaften/Parameter an, die für die externe Tabelle festgelegt werden sollen (getrennt durch Leerzeichen, Kommas oder Neue-Zeile-Zeichen):

AUTO_REFRESH = TRUE | FALSE

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

Bemerkung

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

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

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

TRUE

Snowflake ermöglicht das automatische Aktualisieren der Metadaten der externen Tabelle.

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

Name_der_Richtlinie

Bezeichner für die Zeilenzugriffsrichtlinie, der für Ihr Schema eindeutig sein muss.

ADD ROW ACCESS POLICY <Name_der_Richtlinie> ON (<Name_der_Spalte> [ , ])

Fügt eine Zeilenzugriffsrichtlinie zu einer Tabelle hinzu.

Es muss mindestens ein Spaltenname angegeben werden. Zusätzliche Spalten können mit einem Komma zwischen den einzelnen Spaltennamen angegeben werden.

DROP ROW ACCESS POLICY <Name_der_Richtlinie>

Entfernt eine Zeilenzugriffsrichtlinie aus einer Tabelle oder Ansicht.

Nutzungshinweise

  • Nur der Eigentümer der externen Tabelle (d. h. die Rolle mit der Berechtigung OWNERSHIP für die externe Tabelle) oder ein Benutzer mit weitreichenderen Berechtigungen kann diesen Befehl ausführen.

  • Die folgenden Befehle können in expliziten Transaktionen verwendet werden (mit BEGINCOMMIT):

    • ALTER EXTERNAL TABLE ... REFRESH

    • ALTER EXTERNAL TABLE ... ADD FILES

    • ALTER EXTERNAL TABLE ... REMOVE FILES

    Explizite Transaktionen können verwendet werden, um beim manuellen Ersetzen aktualisierter Dateien in den Metadaten der externen Tabelle einen konsistenten Status sicherzustellen.

  • Verwenden Sie für das Hinzufügen oder Entfernen von Spalten einer externen Tabelle die folgende Syntax:

    Spalte hinzufügen
    ALTER TABLE <name> ADD COLUMN ( <col_name> <col_type> AS <expr> ) [, ...]
    
    Spalte umbenennen
    ALTER TABLE <name> RENAME COLUMN <col_name> to <new_col_name>
    
    Spalte löschen
    ALTER TABLE <name> DROP COLUMN <col_name>
    

    Bemerkung

    Die Standardspalten VALUE und METADATA$FILENAME können nicht gelöscht werden.

    Entsprechende Beispiele finden Sie unter dem Thema ALTER TABLE.

  • Für Zeilenzugriffsrichtlinien:

    • Snowflake unterstützt das Hinzufügen und Löschen von Zeilenzugriffsrichtlinien mit einer einzigen SQL-Anweisung.

      Wenn Sie z. B. eine bereits für eine Tabelle festgelegte Zeilenzugriffsrichtlinie durch eine andere Richtlinie ersetzen möchten, müssen Sie zuerst die Zeilenzugriffsrichtlinie löschen und dann die neue Zeilenzugriffsrichtlinie hinzufügen.

    • Für eine gegebene Ressource (d. h. Tabelle oder Ansicht) müssen Sie für ein ADD oder DROP der Zeilenzugriffsrichtlinie entweder über die APPLY ROW ACCESS POLICY-Berechtigung für das Schema oder über die OWNERSHIP-Berechtigung für die Ressource und die APPLY-Berechtigung für die Ressource der Zeilenzugriffsrichtlinie verfügen.

    • Eine Tabelle oder Ansicht kann nur durch jeweils eine einzige Zeilenzugriffsrichtlinie geschützt werden. Das Hinzufügen einer Richtlinie schlägt fehl, wenn sich der Richtlinientext auf eine Tabellen- oder Ansichtsspalte bezieht, die durch eine Zeilenzugriffsrichtlinie geschützt ist, oder auf eine Spalte, die durch eine Maskierungsrichtlinie geschützt ist.

      In ähnlicher Weise schlägt das Hinzufügen einer Maskierungsrichtlinie zu einer Tabellenspalte fehl, wenn der Richtlinientext der Maskierungsrichtlinie auf eine Tabelle verweist, die durch eine Zeilenzugriffsrichtlinie oder eine andere Maskierungsrichtlinie geschützt ist.

    • Zeilenzugriffsrichtlinien können nicht auf systemspezifische Ansichten oder Tabellenfunktionen angewendet werden.

    • Ähnlich wie bei anderen DROP <Objekt>-Operationen gibt Snowflake einen Fehler zurück, wenn versucht wird, eine Zeilenzugriffsrichtlinie aus einer Ressource zu löschen, der keine Zeilenzugriffsrichtlinie hinzugefügt wurde.

    • Wenn ein Objekt sowohl eine Zeilenzugriffsrichtlinie als auch eine oder mehrere Sicherheit auf Spaltenebene-Maskierungsrichtlinien hat, wird die Zeilenzugriffsrichtlinie zuerst ausgewertet.

Beispiele

Aktualisieren Sie den gesamten Satz an Metadaten der externen Tabelle manuell, basierend auf Änderungen in den referenzierten Dateien:

ALTER EXTERNAL TABLE exttable_json REFRESH;

Ähnlich wie das erste Beispiel, aber aktualisieren Sie manuell nur einen Unterpfad der Metadaten einer externen Tabelle:

CREATE OR REPLACE STAGE mystage
  URL='<cloud_platform>://twitter_feed/logs/'
  .. ;

-- Create the external table
-- 'daily' path includes paths in </YYYY/MM/DD/> format
CREATE OR REPLACE EXTERNAL TABLE daily_tweets
  WITH LOCATION = @twitter_feed/daily/;

-- Refresh the metadata for a single day of data files by date
ALTER EXTERNAL TABLE exttable_part REFRESH '2018/08/05/';

Fügen Sie den Metadaten der externen Tabelle eine explizite Liste von Dateien hinzu:

ALTER EXTERNAL TABLE exttable1 ADD FILES ('path1/sales4.json.gz', 'path1/sales5.json.gz');

Entfernen Sie eine explizite Liste von Dateien aus den Metadaten der externen Tabelle:

ALTER EXTERNAL TABLE exttable1 REMOVE FILES ('path1/sales4.json.gz', 'path1/sales5.json.gz');

Ersetzen Sie in den Metadaten der externen Tabelle eine aktualisierte Protokolldatei für Dezember 2019 mit einer expliziten Transaktion:

BEGIN;

ALTER EXTERNAL TABLE extable1 REMOVE FILES ('2019/12/log1.json.gz');

ALTER EXTERNAL TABLE extable1 ADD FILES ('2019/12/log1.json.gz');

COMMIT;

Das folgende Beispiel fügt eine Zeilenzugriffsrichtlinie zu einer Tabelle unter Angabe einer einzelnen Spalte hinzu. Nach dem Einstellen der Richtlinie können Sie diese durch Überprüfen des Information Schema verifizieren.

alter external table t1
  add row access policy rap_t1 on (empl_id);

Das folgende Beispiel fügt eine Zeilenzugriffsrichtlinie unter Angabe von zwei Spalten in einer einzelnen Tabelle hinzu.

alter external table t1
  add row access policy rap_test2 on (cost, item);

Im folgenden Beispiel wird eine Zeilenzugriffsrichtlinie aus einer Tabelle entfernt. Überprüfen Sie, ob die Richtlinien gelöscht wurden, indem Sie das Information Schema abfragen.

alter external table t1
  drop row access policy rap_v1;

Das folgende Beispiel zeigt, wie Sie das Hinzufügen und Löschen von Zeilenzugriffsrichtlinien in einer einzigen SQL-Anweisung für eine Tabelle kombinieren. Überprüfen Sie die Ergebnisse, indem Sie das Information Schema überprüfen.

alter external table t1
  drop row access policy rap_t1_version_1,
  add row access policy rap_t1_version_2 on (empl_id);