Bundle 2022_06¶
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 September 2022.
Wichtig
Sofern nicht anders angegeben, sind diese Änderungen in Bundle 2022_06 enthalten, das standardmäßig mit Release 6.32 aktiviert wurde.
Unter diesem Thema:
SQL-Änderungen – Allgemein¶
Fail-safe-Speicher: Fehlerbehebung für Grenzfälle (Corner Cases), die zu einer Unterfakturierung führen¶
Aufgrund eines internen Systemfehlers wurden bei einigen permanenten Tabellen die Bytes für den Fail-safe-Speicher nicht abgerechnet. Insbesondere, wenn eine transiente Tabelle als Klon einer permanenten Tabelle erstellt wird und die permanente Tabelle anschließend gelöscht wird, hat Snowflake den Fail-safe-Speicher der permanenten Tabelle nicht berechnet.
Die Abrechnung für Fail-safe wurde daher wie folgt geändert:
- Bisher:
Bei einigen permanenten Tabellen wurde die Fail-safe-Speicherung nicht in Rechnung gestellt.
- Jetzt:
Kunden wird der Fail-safe-Speicher aller permanenten Tabellen in Rechnung gestellt.
SQL-Änderungen – Befehle und Funktionen¶
Befehle CREATE DATABASE und CREATE SCHEMA: Ergebnisse der OR REPLACE-Klausel führen zu verwaisten Referenzen zu Richtlinien¶
Das Verhalten der Befehle CREATE DATABASE und CREATE SCHEMA hat sich wie folgt geändert:
- Bisher:
Snowflake erlaubte die Ausführung der Befehle CREATE OR REPLACE DATABASE und CREATE OR REPLACE SCHEMA in der Datenbank oder dem Schema, die/das eine Maskierungsrichtlinie oder eine Zeilenzugriffsrichtlinie enthält, die ein Objekt in einer anderen Datenbank oder einem anderen Schema schützt. Beispiel:
Die Maskierungsrichtlinie mit dem Namen
db1.s1.p1
schützt die Spalte mit dem Namendb2.s1.t1.c1
.Eine Zeilenzugriffsrichtlinie mit dem Namen
db1.s1.p2
schützt eine Tabelle mit dem Namendb2.s1.t1
.
Das Ergebnis war eine verwaiste Referenz, die dazu führte, dass alle Abfragen auf die Spalte oder das Objekt fehlschlugen.
Beachten Sie, dass dieses Verhalten auch für CLONE-Anweisungen wie
CREATE OR REPLACE SCHEMA S1 CLONE S2;
gilt.- Jetzt:
Die Befehle CREATE OR REPLACE DATABASE und CREATE OR REPLACE SCHEMA schlagen fehl, wenn das Ergebnis eine verwaiste Referenz auf ein richtliniengeschütztes Objekt ist. Snowflake gibt eine der folgenden Fehlermeldungen aus:
Für CREATE OR REPLACE DATABASE:
Cannot drop database because: Policy '<db.schema.policy>' used by schema '<db.schema>' in another database
Für CREATE OR REPLACE SCHEMA:
Cannot drop schema because: Policy '<db.schema.policy>' used by another schema '<db.schema>'
Wenn eine der beiden Fehlermeldungen auftritt, fragen Sie die Account Usage-Ansicht POLICY_REFERENCES ab, verwenden Sie eine Rolle, um die Maskierungs- oder Zeilenzugriffsrichtlinie zu deaktivieren, und versuchen Sie dann die CREATE OR REPLACE-Anweisung erneut.
Beispiel:
Abfragen der Ansicht:
Schemaübergreifende Richtlinienreferenzen, die vor der Ersetzung entfernt werden müssen:
select * from snowflake.account_usage.policy_references where policy_db=<policy_db> and policy_schema=<policy_schema_to_replace> and ref_schema_name != <policy_schema>;
Datenbankübergreifende Richtlinienreferenzen, die vor der Ersetzung entfernt werden müssen:
select * from snowflake.account_usage.policy_references where policy_db=<policy_db_to_replace>’ and ref_database_name != <policy_db>;
Deaktivieren der Richtlinien:
Bei Maskierungsrichtlinien:
alter table <table_name> modify column <col_name> unset masking policy;
Bei Zeilenzugriffsrichtlinien:
alter table <table_name> drop all row access policies;
Wiederholen Sie den Befehl CREATE OR REPLACE.
Beachten Sie, dass Sie bei CLONE-Operationen die Richtlinienobjekte vor Ausführung der CLONE-Anweisungen in einer separaten Datenbank oder einem separaten Schema speichern sollten.
INFER_SCHEMA-Funktionen: Neue ORDER_ID-Spalte in der Ausgabe¶
Die Ausgabe der Funktion INFER_SCHEMA enthält nun eine neue Spalte ORDER_ID, die die Reihenfolge der Spalten in den Stagingdateien angibt.
Wenn Sie derzeit eine Tabelle erstellen, deren Spaltendefinitionen aus einer Menge von Stagingdateien abgeleitet sind (unter Verwendung von CREATE TABLE … USING TEMPLATE), ist die Reihenfolge der Spalten in der Tabelle zufällig. Während die Reihenfolge der Tabellenspalten für Snowflake keine Rolle spielt, kann dies zu Verwirrung führen, wenn Sie die Reihenfolge der Dateispalten mit der Reihenfolge der Tabellenspalten vergleichen. Mithilfe der neuen ORDER_ID-Spalte in der INFER_SCHEMA-Ausgabe können Sie sicherstellen, dass Tabellen, die mit dem ermittelten Schema erstellt wurden, die gleiche Spaltenreihenfolge haben.
Sie können das Schema einer beliebigen Datei mit INFER_SCHEMA abrufen, wie im folgenden Beispiel gezeigt. Die Ausgabe enthält eine neue Spalte ORDER_ID, nach der im Einzelschema-Szenario automatisch sortiert wird:
SELECT * FROM TABLE( INFER_SCHEMA( LOCATION=>'@***_****_STAGE/' , FILE_FORMAT=>'FFPARQUET' ) );
Sie können mithilfe des aus Stagingdateien ermittelten Schemas auch eine Tabelle erstellen und die Spalten nach ORDER_ID sortieren, wie das folgende Beispiel zeigt:
CREATE OR REPLACE TABLE BIG_TABLE USING TEMPLATE ( SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) WITHIN GROUP (ORDER BY ORDER_ID) // NEW FROM TABLE( INFER_SCHEMA(LOCATION=>'@***_****_STAGE/', FILE_FORMAT=>'FFPARQUET') ) ); DESC TABLE BIG_TABLE;
Beachten Sie, dass die Sortierung der Spalten nach ORDER_ID nur gilt, wenn alle Stagingdateien ein Einzelschema gemeinsam verwenden. Wenn die Menge der bereitgestellten Staging-Datendateien mehrere Schemas mit gemeinsamen Spaltennamen enthält, kann die in der Spalte ORDER_ID dargestellte Reihenfolge möglicherweise mit keiner der Einzeldateien übereinstimmen.
SQL-Änderungen – Nutzungsansichten & Information Schema-Ansichten/Tabellenfunktionen¶
Ansicht FUNCTIONS (Account Usage): Neue Spalten in der Ansicht¶
Die Ausgabe der Account Usage-Ansicht FUNCTIONS enthält jetzt die folgenden neuen Spalten:
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
PACKAGES |
STRING |
Gibt die von der Funktion angeforderte Pakete an. |
RUNTIME_VERSION |
STRING |
Gibt die Laufzeitversion der Funktion an. NULL, wenn die Funktion SQL oder Javascript ist. |
INSTALLED_PACKAGES |
STRING |
Listet alle von der Funktion installierten Pakete auf. Ausgabe nur für Python-Funktionen. |