Objektabhängigkeiten¶
Unter diesem Thema werden Konzepte zu Objektabhängigkeiten und Informationen im Zusammenhang mit der Account Usage-Ansicht OBJECT_DEPENDENCIES bereitgestellt.
Unter diesem Thema:
Was ist eine Objektabhängigkeit?¶
Objektabhängigkeit bedeutet, dass die Bearbeitung des Objekts voraussetzt, dass dieses Objekt auf eigene Metadaten oder auf Metadaten mindestens eines anderen Objekts verweist. Snowflake verfolgt Objektabhängigkeiten in der Account Usage-Ansicht OBJECT_DEPENDENCIES.
Snowflake unterstützt Objektabhängigkeiten in Ihrem lokalen Snowflake-Konto und bestimmte Abhängigkeiten im Zusammenhang mit Data Sharing, z. B. das Erstellen einer Ansicht im Verbraucherkonto aus einer Tabelle, die über eine Anbieterfreigabe zur Verfügung gestellt wird. Die Abhängigkeiten im Zusammenhang mit freigegebenen Objekten ermöglichen es Datenverantwortlichen, eine höhere Datenintegrität sicherzustellen, Regulierungsstandards besser einzuhalten und detailliertere Auswirkungsanalysen zu erstellen.
Snowflake unterstützt die folgenden Abhängigkeitstypen, die eine Abhängigkeit auslösen können: der name
-Wert des Objekts, der ID-Wert des Objekts und die Kombination aus name
-Wert und ID-Wert des Objekts.
- BY_NAME:
Eine
BY_NAME
-Abhängigkeit tritt auf, wenn die SQL-Anweisung denname
-Wert des Objekts selbst angibt (z. B. ein CREATE- oder ALTER-Befehl) oder wenn ein Objekt denname
-Wert eines anderen Objekts aufruft (z. B. unter Verwendung einer FROM-Klausel), um eine SQL-Operation auszuführen.Betrachten Sie beispielsweise die folgende Anweisung:
create view myview as select * from mytable;
Der
name
-Wert der Tabellemytable
gehört zu den Metadaten der Tabelle. Die Ansicht mit dem Namenmyview
ist abhängig von der Tabelle mit dem Namenmytable
. Die Tabelle muss also vorhanden sein, damit die Ansicht erstellt werden kann.Snowflake verweist auf die Ansicht mit dem Namen
myview
als das referenzierende Objekt und auf die Tabellemytable
als das referenzierte Objekt.- BY_ID:
Eine
BY_ID
-Abhängigkeit tritt auf, wenn ein Objekt den ID-Wert eines anderen Objekts speichert. Ein Beispiel für eine ID-Abhängigkeit ist ein externer Stagingbereich, der den OBJECT_ID-Wert einer Speicherintegration speichert. Derzeit ist der ID-Wert des Speicherintegrationsobjekts nur für Snowflake zugänglich und kann durch keine kundenseitige SQL-Operation sichtbar gemacht werden.create stage my_ext_stage url='s3://load/files/' storage_integration = myint;
Snowflake verweist auf den externen Stagingbereich mit dem Namen
my_ext_stage
als das referenzierende Objekt und auf die Speicherintegration mit dem Namenmyint
als das referenzierte Objekt.- BY_NAME_AND_ID:
Einige Snowflake-Objekte (z. B. materialisierte Ansichten) sind sowohl vom
name
-Wert eines Objekts als auch vom ID-Wert eines Objekts abhängig. Diese Objekte sind oft das Ergebnis einer CREATE OR REPLACE-Anweisung zum Ersetzen eines vorhandenen Objekts oder das Ergebnis einer ALTER-Anweisung zum Umbenennen eines Objekts.Weitere Informationen dazu finden Sie im Abschnitt Allgemeine Nutzungshinweise der Account Usage-Ansicht OBJECT_DEPENDENCIES.
Unterstützte Objektabhängigkeiten¶
Snowflake unterstützt referenzierende Objekte und referenzierte Objekte wie folgt:
Referenzierendes Objekt |
Referenziertes Objekt |
Abhängigkeitstyp |
---|---|---|
Ansicht, sichere Ansicht, SQL-UDF, SQL-UDTF und andere mit „name“ referenzierte Objekte |
Ansicht Sichere Ansicht Materialisierte Ansicht UDF (alle Arten) UDTF und andere Objekte, die mit „name“ referenziert werden |
BY_NAME |
Externer Stagingbereich Stream |
Speicherintegration Tabelle, Ansicht, sichere Ansicht |
BY_ID |
Externe Tabelle |
Stagingbereich |
BY_ID |
Materialisierte Ansicht |
Tabelle, externe Tabelle |
BY_NAME_AND_ID |
Beachten Sie, dass Snowflake im Zusammenhang mit Data Sharing nur die folgenden Objekte unterstützt:
Referenzierendes Objekt |
Referenziertes Objekt |
Abhängigkeitstyp |
---|---|---|
Ansicht, SQL-UDF, SQL-UDTF |
Tabelle Sichere Ansicht Sichere materialisierte Ansicht Sichere UDF und sichere UDTF |
BY_NAME |
Materialisierte Ansicht |
Tabelle |
BY_NAME_AND_ID |
Weitere Informationen dazu finden Sie im Abschnitt Nutzungshinweise der Ansicht OBJECT_DEPENDENCIES.
Vorteile¶
Das Identifizieren von Objektabhängigkeiten kann einen Einblick in die folgenden Anwendungsfälle der Datenverfolgung geben:
- Analyse der Auswirkungen:
Die Kenntnis der Objektabhängigkeit ermöglicht es Datenverwaltern, die Beziehungen zwischen referenzierenden Objekten und referenzierten Objekten zu identifizieren und so sicherzustellen, dass Aktualisierungen referenzierter Objekte keine negativen Auswirkungen auf die Benutzer des referenzierenden Objekts haben.
Beispiel: Der Eigentümer einer Tabelle möchte eine Spalte zu der Tabelle hinzuzufügen. Bei Abfrage der Ansicht OBJECT_DEPENDENCIES anhand des Tabellennamens werden alle Objekte (z. B. Ansichten) zurückgegeben, die betroffen sein werden.
Der Datenverwalter kann dann einen Aktionsplan koordinieren, um sicherzustellen, dass der Zeitpunkt der Tabellen- und Ansichtsaktualisierungen nicht zu fehlerhaften Abfragen führt, die sich negativ auf die Benutzer auswirken, die Abfragen auf den aus der Tabelle erstellten Ansichten ausführen.
- Compliance:
Die Objektabhängigkeitsbeziehung hilft dem Compliance-Beauftragten, die Beziehung zwischen sensiblen Datenquellen (d. h. dem referenzierten Objekt) und Datenzielen (d. h. dem referenzierenden Objekt) zu erkennen. Der Compliance-Beauftragte kann dann entscheiden, wie die Aktualisierung des referenzierten Objekts und des referenzierenden Objekts gemäß den Compliance-Anforderungen (z. B. GDPR) am besten ausgeführt werden soll.
- Datenintegrität:
Dank der Objektabhängigkeitbeziehungen können Datenexperten wie Analysten, Wissenschaftlern, Compliance-Beauftragten und anderen Geschäftsanwendern sicher sein, dass Daten aus einer vertrauenswürdigen Quelle stammen.
Einschränkungen¶
Zusätzlich zu den Nutzungshinweisen für die Ansicht sind bei der Abfrage der OBJECT_DEPENDENCIES-Ansicht die folgenden Einschränkungen zu beachten:
- Sitzungsparameter:
Snowflake kann die Abhängigkeiten von Objekten, die in ihren Definitionen Sitzungsparameter enthalten, nicht genau berechnen, da Sitzungsparameter je nach Kontext unterschiedliche Werte annehmen können.
Snowflake empfiehlt, in Ansichts- und Funktionsdefinitionen keine Sitzungsvariablen zu verwenden.
- Snowflake-Implementierungen:
Diese Ansicht erfasst keine Abhängigkeiten, die für Snowflake-Implementierungen erforderlich sind. So erfasst die Ansicht beispielsweise keine Abhängigkeiten, die notwendig sind, um eine neue Tabelle aus dem Klon einer anderen Tabelle zu erstellen.
- Auflösung des Objektnamens:
Wenn eine Ansichtsdefinition eine Funktion zum Aufrufen eines Objekts verwendet, um die Ansicht zu erstellen, oder wenn ein Objekt innerhalb einer anderen Funktion oder Ansicht aufgerufen wird, erfasst Snowflake keine Objektabhängigkeiten auf. Beispiel:
create or replace view v_on_stage_function as select * from T1 where get_presigned_url(@stage1, 'data_0.csv.gz') is not null;
In diesem Beispiel ruft die Funktion
get_presigned_url
den Stagingbereichstage1
auf. Snowflake erfasst nicht, dass die Ansicht mit dem Namenv_on_stage_function
vom Stagingbereich mit dem Namenstage1
abhängt.- Beschädigte Abhängigkeiten:
Wenn der Wert für den Abhängigkeitstyp
BY_NAME_AND_ID
ist und sich eine Objektabhängigkeit aufgrund einer CREATE OR REPLACE- oder ALTER-Operation an einem Objekt ändert, erfasst Snowflake nur die Objektabhängigkeit vor diesen Operationen.Snowflake erfasst die Objektabhängigkeit nach diesen Operationen nicht im Ergebnis der Ansichtsabfrage, da das Ergebnis eine ungültige Referenz ist.
Objektabhängigkeiten mit Snowflake-Features und -Diensten¶
- Externe Objekte:
Snowflake verfolgt Objektabhängigkeiten nur für Snowflake-Objekte. Wenn beispielsweise ein Snowflake-Objekt von einem Amazon S3-Bucket abhängt, erfasst diese Ansicht die Abhängigkeit vom Bucket nicht, da der Bucket ein Amazon-Objekt und kein Snowflake-Objekt ist.
- Replikation:
Wenn ein sekundäres Objekt von einem primären Objekt abhängt, werden in dieser Ansicht keine Abhängigkeiten aufgrund einer Replikationsoperation erfasst.
- Datenfreigabe (Data Sharing):
Bei Anbieterkonten kann mit dieser Ansicht ein Data Sharing-Anbieterkonto nicht die abhängigen Objekte eines Data Sharing-Verbraucherkontos ermitteln. Ein Data Sharing-Anbieter erstellt zum Beispiel eine Ansicht und gibt diese frei. Der Data Sharing-Anbieter kann diese Ansicht nicht verwenden, um Objekte im Verbraucherkonto zu ermitteln, die aus der freigegebenen Ansicht erstellt wurde (z. B. neue Tabellen oder Ansichten).
Bei Verbraucherkonten kann mit dieser Ansicht ein Data Sharing-Verbraucherkonto nicht die abhängigen Objekte eines Data Sharing-Anbieterkontos ermitteln. Wenn beispielsweise ein Data Sharing-Verbraucherkonto eine vom Data Sharing-Anbieterkonto zur Verfügung gestellte UDF verwendet, kann der Data Sharing-Verbraucher diese Ansicht nicht verwenden, um Objekte zu identifizieren, von denen die freigegebene UDF abhängt.
Weitere Informationen dazu finden Sie unter Nutzungshinweise zu Data Sharing.
Abfragen der OBJECT_DEPENDENCIES-Ansicht¶
In den Beispielen werden die folgenden Anwendungsfälle betrachtet:
Objekte anzeigen, die von einer externen Tabelle abhängen.
Auswirkungsanalyse: Objekte ermitteln, auf die eine Tabelle verweist.
GDPR: Datenquelle einer bestimmten Ansicht ermitteln.
Datenfreigabe (Data Sharing).
Objekte anzeigen, die von einer externen Tabelle abhängen¶
Erstellen Sie eine materialisierte Ansicht namens sales_view
aus der externen Tabelle namens sales_staging_table
:
CREATE OR REPLACE MATERIALIZED VIEW sales_view AS SELECT * FROM sales_staging_table;
Verwenden Sie die Ansicht OBJECT_DEPENDENCIES im Account Usage-Schema der freigegebenen SNOWFLAKE-Datenbank. Beachten Sie, dass die materialisierte Ansicht referencing_object_name
und die externe Tabelle referenced_object_domain
ist:
SELECT referencing_object_name, referencing_object_domain, referenced_object_name, referenced_object_domain FROM snowflake.account_usage.object_dependencies WHERE referenced_object_name = 'SALES_STAGING_TABLE' and referenced_object_domain = 'EXTERNAL TABLE';+-------------------------+---------------------------+------------------------+--------------------------+ | REFERENCING_OBJECT_NAME | REFERENCING_OBJECT_DOMAIN | REFERENCED_OBJECT_NAME | REFERENCED_OBJECT_DOMAIN | +-------------------------+---------------------------+------------------------+--------------------------+ | SALES_VIEW | MATERIALIZED VIEW | SALES_STAGING_TABLE | EXTERNAL TABLE | +-------------------------+---------------------------+------------------------+--------------------------+
Auswirkungsanalyse: Ermitteln der Objekte, auf die eine Tabelle verweist¶
Angenommen, eine Basistabelle mit dem Namen SALES_NA
liegt vor, wobei NA
für Nordamerika, US
für die USA und CAL
für Kalifornien steht, und es gibt eine Reihe von verschachtelten Ansichten:
(Tabelle)
SALES_NA
» (Ansicht)NORTH_AMERICA_SALES
» (Ansicht)US_SALES
(Tabelle)
SALES_NA
» (Ansicht)NORTH_AMERICA_SALES
» (Ansicht)CAL_SALES
Zum Erstellen der Tabelle und der verschachtelten Ansichten führen Sie die folgenden Befehle aus:
CREATE TABLE sales_na(product string); CREATE OR REPLACE VIEW north_america_sales AS SELECT * FROM sales_na; CREATE VIEW us_sales AS SELECT * FROM north_america_sales; CREATE VIEW cal_sales AS SELECT * FROM north_america_sales;
Ähnlich verhält es sich mit der Beziehung der Basistabelle SALES_NA
zu ihren verschachtelten Ansichten sowie der Basistabelle SALES_UK
, bei der UK
für Großbritannien steht, und deren verschachtelter Ansicht.
Beachten Sie, dass zwei verschiedene Ansichten als Quellobjekte dienen, um die Ansicht mit dem Namen GLOBAL_SALES
abzuleiten:
(Tabelle)
SALES_NA
» (Ansicht)NORTH_AMERICA_SALES
» (Ansicht)GLOBAL_SALES
(Tabelle)
SALES_UK
» (Ansicht)GLOBAL_SALES
Zum Erstellen dieser verschachtelten Ansichten führen Sie die folgenden Befehle aus:
CREATE TABLE sales_uk (product string); CREATE VIEW global_sales AS SELECT * FROM sales_uk UNION ALL SELECT * FROM north_america_sales;
Fragen Sie die Ansicht OBJECT_DEPENDENCIES im Account Usage-Schema der freigegebenen Datenbank SNOWFLAKE ab, um die Objektreferenzen für die Tabelle SALES_NA
zu ermitteln. Beachten Sie die vierte Zeile im Abfrageergebnis, in der die Tabelle SALES_NA
angegeben ist, aber keine Referenz auf die Tabelle SALES_UK
:
WITH RECURSIVE referenced_cte (object_name_path, referenced_object_name, referenced_object_domain, referencing_object_domain, referencing_object_name, referenced_object_id, referencing_object_id) AS ( SELECT referenced_object_name || '-->' || referencing_object_name as object_name_path, referenced_object_name, referenced_object_domain, referencing_object_domain, referencing_object_name, referenced_object_id, referencing_object_id FROM snowflake.account_usage.object_dependencies referencing WHERE true AND referenced_object_name = 'SALES_NA' AND referenced_object_domain='TABLE' UNION ALL SELECT object_name_path || '-->' || referencing.referencing_object_name, referencing.referenced_object_name, referencing.referenced_object_domain, referencing.referencing_object_domain, referencing.referencing_object_name, referencing.referenced_object_id, referencing.referencing_object_id FROM snowflake.account_usage.object_dependencies referencing JOIN referenced_cte ON referencing.referenced_object_id = referenced_cte.referencing_object_id AND referencing.referenced_object_domain = referenced_cte.referencing_object_domain ) SELECT object_name_path, referenced_object_name, referenced_object_domain, referencing_object_name, referencing_object_domain FROM referenced_cte ;+-----------------------------------------------+------------------------+--------------------------+-------------------------+---------------------------+ | OBJECT_NAME_PATH | REFERENCED_OBJECT_NAME | REFERENCED_OBJECT_DOMAIN | REFERENCING_OBJECT_NAME | REFERENCING_OBJECT_DOMAIN | +-----------------------------------------------+------------------------+--------------------------+-------------------------+---------------------------+ | SALES_NA-->NORTH_AMERICA_SALES | SALES_NA | TABLE | NORTH_AMERICA_SALES | VIEW | | SALES_NA-->NORTH_AMERICA_SALES-->CAL_SALES | NORTH_AMERICA_SALES | VIEW | CAL_SALES | VIEW | | SALES_NA-->NORTH_AMERICA_SALES-->US_SALES | NORTH_AMERICA_SALES | VIEW | US_SALES | VIEW | | SALES_NA-->NORTH_AMERICA_SALES-->GLOBAL_SALES | NORTH_AMERICA_SALES | VIEW | GLOBAL_SALES | VIEW | +-----------------------------------------------+------------------------+--------------------------+-------------------------+---------------------------+
GDPR: Datenquelle einer bestimmten Ansicht ermitteln¶
Abgeleitete Objekte (z. B. Ansichten, CTAS) können aus vielen verschiedenen Quellobjekten erstellt werden, um eine kundenspezifische Ansicht oder ein Dashboard bereitzustellen. Um gesetzliche Anforderungen wie GDPR zu erfüllen, müssen Compliance-Beauftragte und Auditoren in der Lage sein, Daten von einem bestimmten Objekt zu seiner ursprünglichen Datenquelle zurückzuverfolgen.
Beispielsweise wird die Ansicht GLOBAL_SALES
von zwei verschiedenen Abhängigkeitspfaden abgeleitet, die auf zwei verschiedene Basistabellen verweisen:
(Tabelle)
SALES_NA
» (Ansicht)NORTH_AMERICA_SALES
» (Ansicht)GLOBAL_SALES
(Tabelle)
SALES_UK
» (Ansicht)GLOBAL_SALES
Zum Erstellen dieser verschachtelten Ansichten führen Sie die folgenden Befehle aus:
CREATE TABLE sales_na (product string); CREATE OR REPLACE VIEW north_america_sales AS SELECT * FROM sales_na; CREATE TABLE sales_uk (product string); CREATE VIEW global_sales AS SELECT * FROM sales_uk UNION ALL SELECT * FROM north_america_sales;
Fragen Sie die Ansicht OBJECT_DEPENDENCIES im Account Usage-Schema der freigegebenen Datenbank SNOWFLAKE ab, um die Datenquellen der Ansicht GLOBAL_SALES
zu ermitteln. Jede Zeile im Abfrageergebnis gibt einen Abhängigkeitspfad zu einem eindeutigen Objekt an.
WITH RECURSIVE referenced_cte (object_name_path, referenced_object_name, referenced_object_domain, referencing_object_domain, referencing_object_name, referenced_object_id, referencing_object_id) AS ( SELECT referenced_object_name || '<--' || referencing_object_name AS object_name_path, referenced_object_name, referenced_object_domain, referencing_object_domain, referencing_object_name, referenced_object_id, referencing_object_id from snowflake.account_usage.object_dependencies referencing WHERE true AND referencing_object_name = 'GLOBAL_SALES' and referencing_object_domain='VIEW' UNION ALL SELECT referencing.referenced_object_name || '<--' || object_name_path, referencing.referenced_object_name, referencing.referenced_object_domain, referencing.referencing_object_domain, referencing.referencing_object_name, referencing.referenced_object_id, referencing.referencing_object_id FROM snowflake.account_usage.object_dependencies referencing JOIN referenced_cte ON referencing.referencing_object_id = referenced_cte.referenced_object_id AND referencing.referencing_object_domain = referenced_cte.referenced_object_domain ) SELECT object_name_path, referencing_object_name, referencing_object_domain, referenced_object_name, referenced_object_domain FROM referenced_cte ;+-----------------------------------------------+-------------------------+---------------------------+------------------------+--------------------------+ | OBJECT_NAME_PATH | REFERENCING_OBJECT_NAME | REFERENCING_OBJECT_DOMAIN | REFERENCED_OBJECT_NAME | REFERENCED_OBJECT_DOMAIN | +-----------------------------------------------+-------------------------+---------------------------+------------------------+--------------------------+ | SALES_UK<--GLOBAL_SALES | GLOBAL_SALES | VIEW | SALES_UK | TABLE | | NORTH_AMERICA_SALES<--GLOBAL_SALES | GLOBAL_SALES | VIEW | NORTH_AMERICA_SALES | VIEW | | SALES_NA<--NORTH_AMERICA_SALES<--GLOBAL_SALES | NORTH_AMERICA_SALES | VIEW | SALES_NA | TABLE | +-----------------------------------------------+-------------------------+---------------------------+------------------------+--------------------------+
Datenfreigabe (Data Sharing)¶
Betrachten Sie die folgende Tabelle, die ein Auszug aus der Ansicht OBJECT_DEPENDENCIES im Verbraucherkonto ist:
V1
gibt eine Ansicht an, die der Verbraucher aus einem freigegebenen Objekt erstellt.S_V1
gibt eine Ansicht an, die der Anbieter freigibt.S_T1
gibt eine Tabelle an, die der Anbieter freigibt.
Zeile |
REFERENCING_OBJECT_NAME |
REFERENCED_OBJECT_NAME |
REFERENCED_OBJECT_DOMAIN |
REFERENCED_OBJECT_ID |
---|---|---|---|---|
1 |
V1 |
S_V1 |
TABLE |
NULL |
2 |
V1 |
S_T1 |
TABLE |
NULL |
Beachten Sie bei dieser Tabelle Folgendes:
Wenn der Anbieter
S_T1
aus der Freigabe entfernt, sieht der Verbraucher in seiner lokalen Ansicht weiterhin Zeilen, dieS_T1
angeben (Zeile 2), es sei denn,S_T1
wurde vor dem Widerruf umbenannt.Wenn der Anbieter eine Tabelle oder Ansicht in seinem Konto löscht, ist die Tabelle bzw. Ansicht nicht mehr in der Freigabe enthalten. Die lokale Verbraucheransicht behält vorhandene Datensätze der gelöschten Tabelle oder Ansicht bei, da die Tabelle oder Ansicht vor der Löschoperation im Anbieterkonto freigegeben wurde.
Der Verbraucher kann Änderungen an Ansichten im Anbieterkonto nicht beobachten.