Bundle 2022_01

Unter diesem Thema werden die folgenden in diesem Monat vorgenommenen Verhaltensänderungen (falls vorhanden) beschrieben:

  • Features, die veraltet sind.

  • Gebündelte Änderungen, die aktiviert wurden.

  • Andere, nicht gebündelte Änderungen, die implementiert wurden.

Wenn Sie Fragen zu diesen Änderungen haben, wenden Sie sich an den Snowflake-Support.

Weitere Einzelheiten zu den in diesem Monat eingeführten neuen Features, Erweiterungen und Korrekturen finden Sie unter März 2022.

Wichtig

Sofern nicht anders angegeben, sind diese Änderungen in Bundle 2022_01 enthalten, das standardmäßig mit Release 6.7 aktiviert wurde.

Unter diesem Thema:

SQL-Änderungen – Allgemein

Transaktionen: Bestätigen einer abgebrochenen Transaktion gibt Fehlermeldung zurück

Mit dieser Änderung wird bei dem Versuch, eine bereits abgebrochene Transaktion zu bestätigen (Commit), eine Fehlermeldung zurückgegeben:

Bisher:

Wenn Sie eine COMMIT-Anweisung in einer Transaktion ausgeführt haben, die abgebrochen wurde (z. B. durch einen separaten SYSTEM$ABORT_TRANSACTION-Aufruf oder weil die Sitzung im Leerlauf war), schien die Anweisung mit der folgenden Meldung erfolgreich zu sein:

Statement executed successfully.

Die Transaktion selbst war jedoch bereits abgebrochen worden.

Die Ausgabemeldung für die COMMIT-Anweisung implizierte fälschlicherweise, dass die Transaktion erfolgreich war.

Jetzt:

Wenn Sie eine COMMIT-Anweisung in einer Transaktion ausführen, die abgebrochen wurde (z. B. durch einen separaten SYSTEM$ABORT_TRANSACTION-Aufruf oder weil die Sitzung im Leerlauf war), schlägt die Anweisung mit Fehlercode 000670 und der folgenden Meldung fehl:

000670 (57014): COMMIT failed. Your transaction '<Name>', id '<ID>', was already aborted.

SQL-Änderungen – Befehle und Funktionen

SHOW TAGS: Neue Spalte in der Ausgabe

Der Ausgabe des Befehls SHOW TAGS wurden die folgenden Spalten hinzugefügt:

  • allowed_values: Diese neue Spalte gibt die Zeichenfolgenwerte an, die festgelegt werden können, wenn ein Tag einem Objekt zugewiesen wird. Wenn für ein Tag keine allowed_values-Werte angegeben sind, lautet der Spaltenwert NULL.

Um die Auswirkungen dieser Änderung zu begrenzen, wurde die Spalte als letzte Spalte der Ausgabe hinzugefügt.

SHOW USERS: Unterstützung von paginierten Ergebnissen, begrenzten Ergebnissen und reduzierter Ausgabe hinzugefügt

Das Verhalten des Befehls SHOW USERS hat sich wie folgt geändert:

Bisher:

Der Befehl SHOW USERS beschränkte die SQL-Ausgabe auf 10.000 Zeilen und unterstützte nur die folgende Syntax:

SHOW USERS [ LIKE '<pattern>' ]
Copy
Jetzt:

Der Befehl SHOW USERS kann verwendet werden, um mehr als 10.000 Zeilen zurückzugeben und unterstützt die folgende Syntax:

SHOW [ TERSE ] USERS [ LIKE '<pattern>' ] [ STARTS WITH '<name_string>' ] [ LIMIT <rows> [ FROM '<name_string>' ] ]
Copy

Wobei:

  • TERSE gibt optional nur die folgende Teilmenge der Ausgabespalten zurück:

    name, created_on, display_name, first_name, last_name, email, org_identity, comment, has_password, has_rsa_public_key.

    Standard: Kein Wert (alle Spalten sind in der Ausgabe enthalten).

  • STARTS WITH 'name_string' filtert die Befehlsausgabe optional anhand der Zeichen, die am Anfang des Objektnamens angezeigt werden. Die Zeichenfolge muss in einfache Anführungszeichen gesetzt werden, wobei zwischen Groß-/Kleinschreibung unterschieden wird. Die folgende Klausel gibt unterschiedliche Ergebnisse zurück:

    ... STARTS WITH 'B' ...

    ... STARTS WITH 'b' ...

    Standard: Kein Wert (die Ausgabe wird nicht gefiltert).

  • LIMIT rows [ FROM 'name_string' ] schränkt optional die maximale Anzahl der zurückgegebenen Zeilen ein und ermöglicht gleichzeitig die „Paginierung“ der Ergebnisse. Beachten Sie, dass die tatsächliche Anzahl der zurückgegebenen Zeilen möglicherweise unter dem angegebenen Grenzwert liegt (z. B. liegt die Anzahl der vorhandenen Objekte unter dem angegebenen Grenzwert).

    Die optionale Unterklausel FROM 'name_string' dient als „Cursor“ für die Ergebnisse. Dies ermöglicht das Abrufen der angegebenen Anzahl von Zeilen nach der ersten Zeile, deren Objektname mit der angegebenen Zeichenfolge übereinstimmt:

    Die Zeichenfolge muss in einfache Anführungszeichen gesetzt werden, wobei zwischen Groß-/Kleinschreibung unterschieden wird. Die Zeichenfolge muss nicht den vollständigen Objektnamen enthalten. Partielle Namen werden unterstützt.

    Standard: Kein Wert (die Ausgabe wird nicht begrenzt).

Standardmäßig gibt SHOW USERS wie bisher 10.000 Zeilen zurück. Wenn Ihr Konto mehr als 10.000 Benutzer hat, können Sie den Befehl zweimal ausführen, um die Benutzer oberhalb der Grenze von 10.000 zurückzugeben:

SHOW USERS;

SHOW USERS LIMIT 10000 FROM 'JOE';
Copy
  • Die erste Anweisung gibt die ersten 10.000 Benutzer zurück. Die letzte zurückgegebene Zeile ist ein Benutzer mit dem Benutzernamen JOE.

  • Die zweite Anweisung gibt die nächsten 10.000 Benutzer nach JOE zurück.

Funktion SYSTEM$EXTERNAL_TABLE_PIPE_STATUS und SYSTEM$PIPE_STATUS: Zusätzliche Details in JSON-Ausgabe

Die JSON-Ausgabe der Funktionen SYSTEM$EXTERNAL_TABLE_PIPE_STATUS und SYSTEM$PIPE_STATUS enthält jetzt die folgenden zusätzlichen Name/Wert-Zeichenfolgenpaare, um genauere Informationen über das Laden von Daten zu erhalten einschließlich der während des Ladens aufgetretenen Fehler:

Name

Beschreibung

Anmerkungen

oldestPendingFilePath

Pfad zur ältesten Datendatei, die derzeit in der Warteschlange zur Verarbeitung bereitsteht. Der Zeitstempel, zu dem die Datei der Warteschlange hinzugefügt wurde, wird über die vorhandene Eigenschaft oldestFileTimestamp zurückgegeben.

lastIngestedTimestamp

Zeitstempel der jüngsten Datei, die von Snowpipe erfolgreich in die Zieltabelle geladen wurde.

Nur SYSTEM$PIPE_STATUS.

lastIngestedFilePath

Pfad zu der Datei, die zu dem in lastIngestedTimestamp angegebenen Zeitstempel geladen wurde.

Nur SYSTEM$PIPE_STATUS.

lastPipeErrorTimestamp

Zeitstempel, zu dem die Kompilierung der COPY INTO-Anweisung in der Pipedefinition zuletzt einen Fehler ergab.

Nur SYSTEM$PIPE_STATUS.

lastPipeFaultTimestamp

Zeitstempel, wann zuletzt ein interner Snowflake-Prozessfehler festgestellt wurde.

lastPulledFromChannelTimestamp

Zeitstempel, zu dem Snowpipe zuletzt „create object“-Ereignisbenachrichtigungen für die Pipe aus der Amazon Simple Queue Service (SQS)-Warteschlange, der Google Pub/Sub-Warteschlange oder der Microsoft Azure-Speicherwarteschlange abgerufen hat.

lastForwardedFilePath

Pfad der Datendatei, die in der letzten an die Pipe weitergeleiteten „Objekt erstellen“-Ereignismeldung identifiziert wurde.

In den folgenden Beispielen wird die Ausgabe für typische Probleme im Zusammenhang mit Snowpipe gezeigt. Die zusätzlichen Details in der Funktionsausgabe können Ihnen helfen, diese und andere Probleme beim Laden von Daten zu diagnostizieren:

  • Die Benachrichtigungswarteschlange ist nicht korrekt konfiguriert:

    {"executionState":"RUNNING","pendingFileCount":0,"notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":0,"lastPulledFromChannelTimestamp:"2022-01-20T06:24:44.771Z"}
    
    Copy

    Snowpipe versucht, in regelmäßigen Abständen „Objekt erstellen“-Ereignisbenachrichtigungen für die Pipe aus der Amazon Simple Queue Service (SQS)-Warteschlange, der Google Pub/Sub-Warteschlange oder der Microsoft Azure-Speicherwarteschlange abzurufen. Ein fehlender oder veralteter lastPulledFromChannelTimestamp-Wert bedeutet, dass Snowpipe keine Verbindung zur Speicherwarteschlange herstellen konnte.

    Wenn der Zeitstempel lastPulledFromChannelTimestamp neu ist, aber numOutstandingMessagesOnChannel den Wert 0 hat, dann kann Snowpipe zwar Ereignisbenachrichtigungen aus der Warteschlange empfangen, aber es werden keine Benachrichtigungen in die Warteschlange gestellt. Dieses letzte Problem kann auftreten, wenn am Speicherort keine Datendateien erstellt wurden oder das Abonnement der Warteschlange falsch konfiguriert ist.

  • Problem mit der Berechtigung für die Benachrichtigungswarteschlange:

    {"executionState":"RUNNING","pendingFileCount":0,"lastIngestedTimestamp":"2022-01-20T04:30:02.518Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T04:30:02.319Z","lastForwardedMessageTimestamp":"2022-01-20T04:30:03.27Z","channelErrorMessage":"no monitoring permission: numOutstandingMessagesOnChannel is not accurate","lastErrorRecordTimestamp":"2022-01-20T04:44:08.461Z","lastPulledFromChannelTimestamp":"2022-01-20T04:44:08.461Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    Der Wert channelErrorMessage zeigt an, dass Snowflake keine ausreichenden Berechtigungen für den Zugriff auf die Speicherwarteschlange und das Abrufen der Ereignisbenachrichtigungen erhalten hat.

  • Pfade in der Pipedefinition und in der Konfiguration der Ereignisbenachrichtigung stimmen nicht überein:

    {"executionState":"RUNNING","pendingFileCount":0,"lastIngestedTimestamp":"2022-01-20T06:00:01.669Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T06:04:01.089Z","lastForwardedMessageTimestamp":"2022-01-20T06:00:02.741Z","lastPulledFromChannelTimestamp":"2022-01-20T06:05:28.49Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    Der Zeitstempel lastForwardedMessageTimestamp ist früher als der Zeitstempel lastReceivedMessageTimestamp. Dies zeigt an, dass Snowpipe mindestens eine „Objekt erstellen“-Ereignismeldung aus der Speicherwarteschlange abgerufen hat, diese Meldung jedoch nicht mit dem in der Pipe definierten Pfad übereinstimmte und daher nicht zur Verarbeitung an die Pipe weitergeleitet wurde.

  • Problem mit der Berechtigung für einen externen Speicherort:

    {"executionState":"STALLED_STAGE_PERMISSION_ERROR","pendingFileCount":0,"error":"Failed to access the stage, please check storage permission.", "lastPipeErrorTimestamp":"2022-01-20T04:40:01.747Z", "lastIngestedTimestamp":"2022-01-20T04:30:02.518Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T04:30:02.319Z","lastForwardedMessageTimestamp":"2022-01-20T04:30:03.27Z","channelErrorMessage":"no monitoring permission: numOutstandingMessagesOnChannel is not accurate","lastErrorRecordTimestamp":"2022-01-20T04:44:08.461Z","lastPulledFromChannelTimestamp":"2022-01-20T04:39:58.494Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    Der Wert executionState und die Fehlermeldung zeigen an, dass Snowflake nicht die Mindestberechtigungen für den Speicherort (d. h. Amazon S3 oder Google Cloud Storage Bucket oder Microsoft Azure Container) erhalten hat, um auf die Datendateien im Speicherort zuzugreifen.

  • Fehler beim Kompilieren der COPY INTO <Tabelle>-Anweisung in der Pipedefinition:

    {"executionState":"STALLED_COMPILATION_ERROR","pendingFileCount":0,"error":"SQL compilation error: error line 1 at position 29\ninvalid identifier 'LAST_NAME'",", "lastPipeErrorTimestamp":"2022-01-20T17:54:30.4Z", "lastIngestedTimestamp":"2022-01-20T17:51:04.73Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T17:51:03.336Z","lastForwardedMessageTimestamp":"2022-01-20T17:51:05.081Z","lastPulledFromChannelTimestamp":"2022-01-20T18:03:00.637Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    Der Wert executionState und die Fehlermeldung zeigen an, dass Snowpipe die COPY INTO <Tabelle>-Anweisung in der Pipedefinition zum Laden der vom Speicherort abgerufenen Datendateien nicht ausführen konnte.

SQL-Änderungen – Nutzungsansichten & Information Schema

Ansicht FUNCTIONS: Neue Spalten

Die folgenden Spalten wurden der Ansicht ACCOUNT_USAGE.FUNCTIONS hinzugefügt, um mit der Ansicht INFORMATION_SCHEMA.FUNCTIONS konsistent zu sein:

  • handler

  • imports

  • target_path

Um die Auswirkungen dieser Änderung zu begrenzen, wurden die neuen Spalten als letzte Spalten der Ausgabe hinzugefügt.

Ansicht FUNCTIONS, Befehl DESCRIBE FUNCTION und Funktion GET_DDL: Neue Spalten

Die folgenden Spalten wurden der Ansicht INFORMATION_SCHEMA.FUNCTIONS hinzugefügt, ebenso wie die Ausgabe des Befehls DESCRIBE FUNCTION und der Funktion GET_DDL:

  • request_translator: Name der benutzerdefinierten JavaScript-Funktion für den Anforderungsübersetzer, falls vorhanden.

  • response_translator: Name der benutzerdefinierten JavaScript-Funktion für den Antwortübersetzer, falls vorhanden.

​​​​​Mit Anforderungs- und Antwortübersetzern haben Sie die Möglichkeit, für Remotedienste, die von externen Funktionen verwendet werden, das Format der gesendeten oder empfangenen Daten zu verändern. Weitere Informationen dazu finden Sie unter Verwendung von Anforderungs- und Antwortübersetzern mit Daten für einen Remotedienst.

Funktion POLICY_REFERENCES: Neue Spalten

Die Spalte created_on wurde aus der Ausgabe der Tabellenfunktion INFORMATION_SCHEMA.POLICY_REFERENCES entfernt.

Der Ausgabe der Tabellenfunktion INFORMATION_SCHEMA.POLICY_REFERENCES wurden folgende Spalten hinzugefügt:

  • tag_name

  • tag_database

  • tag_schema

  • policy_status

Diese neuen Spalten können verwendet werden, um Richtlinienzuordnungen für eine Spalte anhand des Tag-Namens zu ermitteln.

Um die Auswirkungen dieser Änderung zu begrenzen, wurden die neuen Spalten als letzte Spalten der Ausgabe hinzugefügt.

Ansicht TAGS: Neue Spalte

Der Ansicht ACCOUNT_USAGE.TAGS wurde folgende Spalte hinzugefügt:

  • allowed_values: Gibt die Zeichenfolgenwerte an, die festgelegt werden können, wenn ein Tag einem Objekt zugewiesen wird. Wenn für ein Tag keine allowed_values-Werte angegeben sind, lautet der Spaltenwert NULL.

Um die Auswirkungen dieser Änderung zu begrenzen, wurde die Spalte als letzte Spalte in der Ansicht hinzugefügt.

Funktion TASK_HISTORY: Gibt Nutzungsverlauf der Aufgabe standardmäßig für die letzten 7 Tage zurück

Das Verhalten der Tabellenfunktion INFORMATION_SCHEMA.TASK_HISTORY hat sich wie folgt geändert:

Bisher:

Standardmäßig lieferte die Funktion Datensätze zu Aufgaben, die innerhalb eines Zeitbereichs ausgeführt wurden und kein bestimmtes Startdatum oder eine bestimmte Startzeit hatten. Aufgrund interner Datenbereinigungsaktivitäten war die Zeitbereich im Allgemeinen auf die letzten 14 Tage beschränkt. In seltenen Fällen konnte die Periode jedoch weiter in die Vergangenheit reichen.

Wenn das Argument SCHEDULED_TIME_RANGE_START in einer Abfrage angegeben wurde, war der Zeitbereich auf historische Datensätze der letzten 7 Tage oder weniger beschränkt.

Jetzt:

Die Funktion gibt Datensätze für die ausgeführten Aufgaben zurück, die innerhalb der letzten 7 Tage gestartet wurden.

Wenn das Argument SCHEDULED_TIME_RANGE_START in einer Abfrage angegeben wird, ist der Zeitbereich wie beim vorherigen Verhalten weiterhin auf historische Datensätze der letzten 7 Tage oder weniger beschränkt.

Ansicht/Funktion TASK_HISTORY: Neue Spalte

Der Ausgabe der Ansicht ACCOUNT_USAGE.TASK_HISTORY und der Tabellenfunktion INFORMATION_SCHEMA.TASK_HISTORY wurde folgende Spalte hinzugefügt:

  • scheduled_from: Gibt den Mechanismus an, der die Ausführung der Aufgabe veranlasst hat. Der einzige in der Spalte zurückgegebene Wert ist SCHEDULE. Dieser Wert zeigt an, dass die Aufgabenausführung durch den Zeitplan in der Aufgabendefinition ausgelöst wurde. Für die Ausführung von untergeordneten Aufgaben in einem Aufgabenstrukturbaum gibt die Spalte ebenfalls SCHEDULE zurück.

Die Spalte wurde eingeführt, um zukünftige Funktionen zu unterstützen.

Warehouse-Ansichten: Konsistente Ausgabe der Namen von Warehouses

Der Eigentümer eines Warehouses (d. h. die Rolle mit der Berechtigung OWNERSHIP für das Warehouse) oder eine höhere Rolle kann das Warehouse über die neue Weboberfläche oder mit dem Befehl ALTER WAREHOUSE … RENAME umbenennen.

Das Verhalten bei der Umbenennung eines Warehouses hat sich wie folgt geändert:

Bisher:

Der Name des Warehouses wurde in den folgenden Spalten der Ansicht inkonsistent angezeigt:

  • ACCOUNT_USAGE, READER_ACCOUNT_USAGE und ORGANIZATION_USAGE

    • WAREHOUSE_METERING_HISTORY.WAREHOUSE_HAME

  • ACCOUNT_USAGE

    • METERING_HISTORY.NAME

Jüngere Datensätze in den Ansichten (2-3 Stunden vor der Änderung des Warehouse-Namens) zeigten den neuen Namen an, während ältere Datensätze den alten Namen anzeigten.

Jetzt:

Die Spalten WAREHOUSE_NAME und NAME in diesen Ansichten zeigen den neuen Warehouse-Namen für alle Datensätze an.

Bemerkung

Diese Verhaltensänderung hat keine Auswirkungen auf die folgenden Ansichten und Tabellenfunktionen, die bereits den neuen Warehouse-Namen für alle Datensätze in der Spalte WAREHOUSE_NAME anzeigen:

  • ACCOUNT_USAGE

    • Ansicht WAREHOUSE_EVENTS_HISTORY

    • Ansicht WAREHOUSE_LOAD_HISTORY

  • INFORMATION_SCHEMA

    • Tabellenfunktion WAREHOUSE_LOAD_HISTORY

    • Tabellenfunktion WAREHOUSE_METERING_HISTORY

Änderungen an der Erweiterbarkeit

Gespeicherte JavaScript-Prozeduren: Änderungen bei der Fehlerbehandlung

Die Fehlerbehandlung für gespeicherte Prozeduren, die in JavaScript geschrieben sind, wurde wie folgt geändert:

Bisher:

Alle von gespeicherten JavaScript-Prozeduren ausgelösten Fehler hatten denselben Fehlercode und denselben SQLSTATE-Wert (100183 bzw. P0000) sowie die gleiche allgemeine Fehlermeldung ("Execution error in stored procedure SP_NAME...").

Der Name der Eigenschaft für den Zugriff auf den Stacktrace war stackTraceTxt.

Wenn zum Beispiel ein Datenbankobjekt nicht existiert, enthält das Ausnahmeobjekt Folgendes:

{
  "stackTraceTxt":"At Statement.execute, line 12 position 19",
  "state":"P0000",
  "code":100183,
  "message":"SQL compilation error:\nObject 'X' does not exist or not authorized."
}
Copy

Wenn die gespeicherte Prozedur die Ausnahme nicht abgefangen hat, lieferte der Aufruf der gespeicherten Prozedur die folgende Ausgabe:

100183 (P0000): Execution error in store procedure ...:
SQL compilation error:
Object 'X' does not exist or not authorized.
At Statement.execute, line 12 position 19
Copy
Jetzt:

Wenn die gespeicherte Prozedur irgendwelche Abfragen ausführt (wie die meisten gespeicherten Prozeduren) und der Fehler während der Ausführung der untergeordneten Abfrage auftritt, wurden der Fehlercode und SQLSTATE der untergeordneten Abfrage verwendet.

Außerdem wurde der Name der Eigenschaft für den Zugriff auf den Stacktrace in stack geändert. Obwohl die Eigenschaft stackTraceTxt bei aktivierter Verhaltensänderung immer noch vorhanden ist, wird stackTraceTxt in einem zukünftigen Release entfernt werden.

Wenn zum Beispiel ein Datenbankobjekt nicht existiert, enthält das Ausnahmeobjekt Folgendes:

{
  "stack":"Statement.execute, line 12 position 19",
  "stackTraceTxt":"Statement.execute, line 12 position 19", // To be removed in a future release
  "state":"42S02",
  "code":2003,
  "message":"SQL compilation error:\nObject 'X' does not exist or not authorized."
}
Copy

Wenn die gespeicherte Prozedur die Ausnahme nicht abfängt, liefert der Aufruf der gespeicherten Prozedur die folgende Ausgabe:

002003 (42S02): Execution error in store procedure ...:
SQL compilation error:
Object 'X' does not exist or not authorized.
At Statement.execute, line 12 position 19
Copy