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 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>' ]
- 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>' ] ]
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';
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 |
---|---|---|
|
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. |
|
|
Zeitstempel der jüngsten Datei, die von Snowpipe erfolgreich in die Zieltabelle geladen wurde. |
Nur SYSTEM$PIPE_STATUS. |
|
Pfad zu der Datei, die zu dem in lastIngestedTimestamp angegebenen Zeitstempel geladen wurde. |
Nur SYSTEM$PIPE_STATUS. |
|
Zeitstempel, zu dem die Kompilierung der COPY INTO-Anweisung in der Pipedefinition zuletzt einen Fehler ergab. |
Nur SYSTEM$PIPE_STATUS. |
|
Zeitstempel, wann zuletzt ein interner Snowflake-Prozessfehler festgestellt wurde. |
|
|
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. |
|
|
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"}
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, abernumOutstandingMessagesOnChannel
den Wert0
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"}
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"}
Der Zeitstempel
lastForwardedMessageTimestamp
ist früher als der ZeitstempellastReceivedMessageTimestamp
. 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"}
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"}
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.
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 istSCHEDULE
. 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 ebenfallsSCHEDULE
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." }
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
- 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 EigenschaftstackTraceTxt
bei aktivierter Verhaltensänderung immer noch vorhanden ist, wirdstackTraceTxt
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." }
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