Verwenden von freigegebenen Daten¶
Unter diesem Thema wird die Erstellung von Datenbanken aus den von Datenanbietern zur Verfügung gestellt Freigaben sowie die anschließende Verwendung der Datenbanken für Abfragen und andere Operationen beschrieben.
Zur Ausführung dieser Aufgaben müssen Sie die Rolle ACCOUNTADMIN (oder eine Rolle, der die globale Berechtigung IMPORT SHARE erteilt wurde) verwenden. Weitere Details zur Berechtigung IMPORT SHARE finden Sie unter Aktivieren von Nicht-ACCOUNTADMIN-Rollen zur Ausführung von Data Sharing-Aufgaben.
Bemerkung
Die unter diesem Thema beschriebenen Aufgaben gelten nicht für Konten mit Leseberechtigung. Wenn Sie zur Nutzung von freigegebenen Daten ein Konto mit Leseberechtigung verwenden, müssen Sie keine der Aufgaben ausführen, da diese bereits von einem Administrator des Anbieterkontos erledigt wurden.
Unter diesem Thema:
Allgemeine Einschränkungen für freigegebene Datenbanken¶
Freigegebene Datenbanken unterliegen für Verbraucher den folgenden Einschränkungen:
Freigegebene Datenbanken sind schreibgeschützt. Benutzer mit einem Verbraucherkonto können Daten anzeigen/abfragen, aber keine Daten einfügen, aktualisieren oder Objekte in der Datenbank erstellen.
Die folgenden Aktionen werden nicht unterstützt:
Erstellen eines Klons einer freigegebenen Datenbank oder von Schemas/Tabellen in der Datenbank.
Time Travel für eine freigegebene Datenbank oder von Schemas/Tabellen in der Datenbank.
Bearbeiten der Kommentare einer freigegebenen Datenbank.
Freigegebene Datenbanken und alle Objekte in der Datenbank können nicht auch für andere Konten freigegeben werden.
Freigegebene Datenbanken können nicht repliziert werden.
Anzeigen von verfügbaren Freigaben¶
Sie können Freigaben, die für die Nutzung mit Ihrem Konto verfügbar sind, entweder über die Weboberfläche oder über SQL anzeigen:
- Snowsight:
Wählen Sie Data Products » Private Sharing und dann Shared With You aus. Die folgenden Informationen können angezeigt werden:
Private Freigabeangebote, die für Sie bereitgestellt wurden. Sie können auch Data Exchange-Angebote anzeigen, auf die Sie Zugriff haben.
Direkte Freigaben, die für Sie freigegeben wurden. Abhängig vom Freigabestatus werden die Freigaben in zwei Abschnitte gruppiert:
Direkte Freigaben, die zum Abrufen bereit sind (d. h. es wurde noch keine Datenbank von der Freigabe erstellt).
Direkte Freigaben, die in eine Datenbank importiert wurden und abfragebereit sind.
Um Freigabeangebote auf Snowflake Marketplace anzuzeigen, die in eine Datenbank importiert wurden und für Abfragen bereit sind, wählen Sie im Navigationsmenü Data Products » Marketplace aus. Weitere Informationen dazu finden Sie unter Erkunden von Freigabeangeboten.
- Classic Console:
Wählen Sie Shares aus, und wählen Sie dann den Umschalter Inbound.
Auf der Seite werden alle Freigaben angezeigt, die für Ihr Konto verfügbar sind. Die Spalte Database zeigt den Namen der Datenbank an, die aus der Freigabe erstellt wurde. Wenn die Spalte leer ist, wurde in Ihrem Konto noch keine Datenbank aus der Freigabe erstellt.
- SQL:
Führen Sie die Anweisung SHOW SHARES oder DESCRIBE SHARE aus.
Beispiel mit SQL:
SHOW SHARES;
CopyDie Ausgabe zeigt Folgendes:
Zwei Freigaben,
sales_s
undsales_s2
, sind verfügbar.INBOUND
in der Spaltekind
gibt an, dass ein Datenanbieter die Freigabe für Ihr Konto zur Nutzung bereitgestellt hat.In der Spalte
name
wird der vollqualifizierte Name jeder Freigabe im Formatshare_name
(z. B.SALE_S
) angezeigt.In der Spalte
owner_account
wird der Name des Kontos angezeigt, das die einzelnen Freigaben zur Verfügung gestellt hat, und zwar im Formatorgname.account_name
.Wenn die Spalte
database_name
leer ist, wurde in Ihrem Konto noch keine Datenbank aus der Freigabe erstellt.
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+ | created_on | kind | owner_account | name | database_name | to | owner | comment | listing_global_name | | |-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------| | 2017-07-09 19:18:09.821 -0700 | INBOUND | SNOW.XY12345 | SALES_S2 | UPDATED_SALES_DB | | | Transformed and updated sales data | | | 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | | +-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
Im folgenden Beispiel wird der Befehl DESCRIBE SHARE verwendet, um die Objekte (Datenbank, Schemas und Tabellen) anzuzeigen, die sich in der Freigabe sales_s
befinden:
DESC SHARE xy12345.sales_s; +----------+------------------------------------+---------------------------------+ | kind | name | shared_on | |----------+------------------------------------+---------------------------------| | DATABASE | <DB> | Thu, 15 Jun 2017 17:03:16 -0700 | | SCHEMA | <DB>.AGGREGATES_EULA | Thu, 15 Jun 2017 17:03:16 -0700 | | TABLE | <DB>.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 | | VIEW | <DB>.AGGREGATES_EULA.AGGREGATE_1_v | Thu, 15 Jun 2017 17:03:16 -0700 | +----------+------------------------------------+---------------------------------+CopyDie Freigabe besteht aus einem Schema
aggregates_eula
mit einer Tabelleaggregate_1
. Jeder Objektname, einschließlich dem der Datenbank selbst, hat ein Präfix<DB>
. Dies zeigt an, dass aus der Freigabe noch keine Datenbank (in Ihrem Konto) erstellt wurde.
Erstellen einer Datenbank aus einer Freigabe¶
Sie können eine Datenbank aus einer Freigabe erstellen, indem Sie entweder die Weboberfläche oder SQL verwenden:
- Snowsight:
Melden Sie sich bei Snowsight an.
Wählen Sie Data Products » Private Sharing aus.
Wählen Sie die Registerkarte Shared with You aus.
Wählen Sie im Bereich Ready to Get die Freigabe aus, für die Sie eine Datenbank erstellen möchten.
Legen Sie einen Datenbanknamen fest, und geben Sie die Rollen an, die auf die Datenbank zugreifen dürfen.
Wählen Sie Get Data aus.
- Classic Console:
- SQL:
Führen Sie eine CREATE DATABASE-Anweisung mit der folgenden Data Sharing-spezifischen Syntax aus:
CREATE DATABASE <name> FROM SHARE <provider_account>.<share_name>
CopyDabei ist
provider_account
der Name des Kontos, das die Freigabe bereitgestellt hat, undshare_name
der Name der Freigabe, aus der die Datenbank erstellt werden soll.
Bemerkung
Eine Freigabe kann nur einmal pro Konto genutzt werden.
Um vor dem Erstellen der Datenbank die freigegebenen Objekte anzuzeigen, verwenden Sie den Befehl DESCRIBE SHARE.
Wenn eine Datenbank aus einer Freigabe erstellt wird, kann standardmäßig nur die Rolle, mit der die Datenbank erstellt wurde, auf Objekte in der Datenbank zugreifen. Eine Anleitung zum Gewähren von Zugriff für andere Rollen finden Sie unter Erteilen von Berechtigungen für eine freigegebene Datenbank (unter diesem Thema).
SQL-Beispiele¶
Im folgende Beispiel wird in Ihrem Konto aus der Freigabe sales_s
eine neue Datenbank mit dem Namen snow_sales
erstellt:
CREATE DATABASE snow_sales FROM SHARE xy12345.sales_s;Copy
Auflisten der neuen snow_sales
-Datenbank:
SHOW DATABASES LIKE 'snow%'; +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+ | created_on | name | is_default | is_current | origin | owner | comment | options | retention_time | |---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------| | Sun, 10 Jul 2016 23:28:50 -0700 | SNOWFLAKE_SAMPLE_DATA | N | N | SFC_SAMPLES.SAMPLE_DATA | ACCOUNTADMIN | | | 1 | | Thu, 15 Jun 2017 18:30:08 -0700 | SNOW_SALES | N | Y | xy12345.SALES_S | ACCOUNTADMIN | | | 1 | +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+CopyIn diesem Beispiel zeigt die Spalte
origin
den vollqualifizierten Namen der Freigabe an, aus der die Datenbank erstellt wurde.
Ebenso enthalten die Ausgaben von SHOW SHARES und DESC SHARE den Namen der Datenbank, die aus der Freigabe erstellt wurde:
SHOW SHARES;Copy+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+ | created_on | kind | owner_account | name | database_name | to | owner | comment | listing_global_name | |-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------| | 2017-07-09 19:18:09.821 -0700 | INBOUND | SNOW.XY12345 | SALES_S2 | UPDATED_SALES_DB | | | Transformed and updated sales data | | | 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | | +-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+DESC SHARE xy12345.sales_s; +----------+------------------------------------------+---------------------------------+ | kind | name | shared_on | |----------+------------------------------------------+---------------------------------| | DATABASE | SNOW_SALES | Thu, 15 Jun 2017 17:03:16 -0700 | | SCHEMA | SNOW_SALES.AGGREGATES_EULA | Thu, 15 Jun 2017 17:03:16 -0700 | | TABLE | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 | | VIEW | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1_v | Thu, 15 Jun 2017 17:03:16 -0700 | +----------+------------------------------------------+---------------------------------+Copy
Erteilen von Berechtigungen für eine freigegebene Datenbank¶
Die Anleitung zum Gewähren des Zugriffs auf Objekte in einer Freigabe unterscheidet sich, wenn der Anbieter die Objekte in einer Freigabe mithilfe von Datenbankrollen segmentiert hat. Mit dieser Option werden verschiedene Objekte in der Freigabe mit verschiedenen Datenbankrollen verknüpft.
Beachten Sie, dass eine einzelne Freigabe sowohl Objekte enthalten kann, auf die über Datenbankrollen zugegriffen werden kann, als auch Objekte, die nicht mit einer Datenbankrolle verbunden sind.
Option 1: Objekte in einer Freigabe, die keiner Datenbankrolle zugeordnet ist¶
Erlauben Sie Benutzern den Zugriff auf Objekte in einer Freigabe, indem Sie einer oder mehreren Rollen in Ihrem Konto die Berechtigung IMPORTED PRIVILEGES für die freigegebene Datenbank erteilen.
Eine Rolle kann IMPORTED PRIVILEGES für eine importierte Datenbank nur gewähren, wenn eine der beiden folgenden Bedingungen erfüllt ist:
Die Rolle ist Eigentümer der importierten Datenbank (d. h. sie hat die Berechtigung OWNERSHIP für die Datenbank).
Der Rolle wurde die globale Berechtigung MANAGE GRANTS gewährt.
Zuweisen von IMPORTED PRIVILEGES zu anderen Rollen¶
Sie können diese Rolle anderen Rollen entweder über die Weboberfläche oder mit SQL zuordnen:
- Classic Console:
Klicken Sie auf Databases » <Name_der_freigegebenen_Datenbank>.
Klicken Sie im Seitenbereich auf Grant Privileges, und weisen Sie die Berechtigung einer oder mehreren Rollen zu.
- SQL:
Führen Sie eine GRANT <Berechtigungen>-Anweisung aus.
Zur Anzeige der Rollen, die für eine freigegebene Datenbank über die Berechtigung USAGE verfügen, verwenden Sie die Weboberfläche oder den Befehl SHOW GRANTS.
SQL-Beispiele¶
Rolle
r1
erstellt Datenbanksnow_sales
aus Freigabexy12345.sales_s
:use role r1; create database snow_sales from share xy12345.sales_s;
CopyRolle
r1
gewährt Roller2
die Berechtigung IMPORTED PRIVILEGES für die Datenbanksnow_sales
:grant imported privileges on database snow_sales to role r2;
CopyDa
r2
nicht über die Berechtigung OWNERSHIP für die Datenbank verfügt, muss die Roller2
die Berechtigung MANAGE GRANTS für das Konto besitzen, um eine der folgenden Berechtigungs- oder Widerrufsoperationen ausführen zu können:use role r2; grant imported privileges on database snow_sales to role r3; revoke imported privileges on database snow_sales from role r3;
Copy
Option 2: Objekte in einer Freigabe, die mit einer Datenbankrolle verbunden ist¶
Erlauben Sie Benutzern den Zugriff auf Objekte in einer Freigabe, indem Sie einer oder mehreren Rollen in Ihrem Konto die entsprechende Datenbankrolle in der freigegebenen Datenbank zuweisen.
Schritt 1: Datenbank aus der Freigabe erstellen¶
Erstellen Sie mit CREATE DATABASE … FROM SHARE eine Datenbank aus der Freigabe.
Um diesen Befehl ausführen zu können, ist eine Rolle mit den globalen Berechtigungen CREATE DATABASE und IMPORT SHARE erforderlich.
Erstellen Sie zum Beispiel Datenbank c1
von Anbieter provider1
und Freigabe share1
:
CREATE DATABASE c1 FROM SHARE provider1.share1;
Schritt 2: Datenbankrollen der freigegebene Datenbank den Rollen auf Kontoebene zuweisen¶
Weisen Sie den Rollen in Ihrem Konto die Datenbankrollen der freigegebenen Datenbank zu, damit Benutzer mit diesen Rollen auf Datenbankobjekte in der Freigabe zugreifen können.
Verwenden Sie die Rolle, die Sie zum Erstellen der Datenbank aus der Freigabe verwendet haben.
Prüfen Sie beispielsweise, welche Datenbankrollen verfügbar sind, und weisen Sie dann der Rolle analyst
in Ihrem Konto die Datenbankrolle c1.r1
zu:
SHOW DATABASE ROLES in DATABASE c1;
GRANT DATABASE ROLE c1.r1 TO ROLE analyst;
Erstellen von Streams auf freigegebenen Ansichten oder Tabellen¶
Durch das Erstellen von Streams auf freigegebenen Objekten können Sie die an diesen Objekten mit Datenbearbeitungssprache (DML) vorgenommenen Änderungen verfolgen. Diese Funktionalität ähnelt dem Erstellen und Verwenden von Streams auf „lokalen“ Objekten (d. h. in demselben Konto wie der Stream).
Die Rolle, die in diesem Abschnitt zum Ausführen der SQL-Anweisungen verwendet wird, muss über die erforderlichen Berechtigungen für die freigegebene Tabelle oder die sichere Ansicht verfügen. Weitere Informationen dazu finden Sie unter Erteilen von Berechtigungen für eine freigegebene Datenbank (unter diesem Thema).
So erstellen Sie Streams auf freigegebenen Ansichten:
CREATE STREAM <name> ON VIEW <shared_db>.<schema>.<view>;
CopyErstellen Sie beispielsweise einen Stream auf der freigegebene Ansicht
aggregate_1_v
in Datenbank und Schemasnow_sales.aggregates_eula
:CREATE STREAM aggregate_1_v_stream ON VIEW snow_sales.aggregates_eula.aggregate_1_v;
CopySo erstellen Sie Streams auf freigegebenen Tabellen:
CREATE STREAM <name> ON TABLE <shared_db>.<schema>.<table>;
CopyErstellen Sie beispielsweise einen Tabellenstream für die gemeinsam genutzte Tabelle
aggregate_1
in Datenbank und Schemasnow_sales.aggregates_eula
:CREATE STREAM aggregate_1_stream ON TABLE snow_sales.aggregates_eula.aggregate_1;
Copy
Weitere Informationen zum Erstellen von Streams finden Sie unter CREATE STREAM.
Bemerkung
Der Datenanbieter muss erst die Änderungsverfolgung für Ansichten oder Tabellen aktivieren, bevor Sie Streams auf diesen Objekten erstellen können. Wenn Sie keine Streams auf einem gewünschten freigegebenen Objekt erstellen können, wenden Sie sich an den Datenanbieter, um die Änderungsverfolgung für das Objekt zu aktivieren.
Verarbeiten Sie die Streamdatensätze noch während der Aufbewahrungsfrist der Tabelle in einer Transaktion, um zu verhindern, dass der Stream veraltet. Wenden Sie sich an den Datenanbieter, um die Datenaufbewahrungsfrist für die Tabelle zu ermitteln.
Führen Sie den Befehl DESCRIBE STREAM oder SHOW STREAMS aus, um festzustellen, ob ein Stream veraltet ist. Wenn der Spaltenwert STALE in der Befehlsausgabe TRUE ist, kann der Stream veraltet sein. In der Praxis kann das Lesen aus dem Stream einige Zeit nach der erwarteten STALE_AFTER erfolgen. Der Stream kann jedoch während dieses Zeitraums jederzeit veralten.
Abfragen einer freigegebenen Datenbank¶
Das Abfragen einer freigegebenen Datenbank erfolgt auf die gleiche Weise wie das Abfragen jeder anderen Datenbank Ihres Kontos.
Beispiel:
USE ROLE r1; USE DATABASE snow_sales; SELECT * FROM aggregates_1;Copy