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 » 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 Freigabeangebot auf Snowflake Marketplace anzuzeigen, die in eine Datenbank importiert wurden und für Abfragen bereit sind, gehen Sie im Navigationsmenü auf Marketplace. Weitere Informationen dazu finden Sie unter Erkunden von Freigabeangeboten.

Classic Console

Wählen Sie Shares Shares tab 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;
Copy

Die Ausgabe zeigt Folgendes:

  • Zwei Freigaben, sales_s und sales_s2, sind verfügbar. INBOUND in der Spalte kind 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 Format share_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 Format orgname.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 |
+----------+------------------------------------+---------------------------------+
Copy

Die Freigabe besteht aus dem Schema aggregates_eula mit der Tabelle aggregate_1. Jedem Objektnamen, einschließlich dem der Datenbank selbst, ist das Präfix <DB> vorangestellt. Dies bedeutet, dass in Ihrem Konto noch keine Datenbank aus der Freigabe 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
  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie Data » Private Sharing aus.

  3. Wählen Sie die Registerkarte Shared with You aus.

  4. Wählen Sie im Bereich Ready to Get die Freigabe aus, für die Sie eine Datenbank erstellen möchten.

  5. Legen Sie einen Datenbanknamen fest, und geben Sie die Rollen an, die auf die Datenbank zugreifen dürfen.

  6. Wählen Sie Get Data aus.

Classic Console
  1. Wählen Sie Shares Shares tab aus, und wählen Sie dann den Umschalter Inbound.

  2. Wählen Sie eine Freigabe aus, aus der noch keine Datenbank erstellt wurde (d. h. die Spalte Database ist leer).

  3. Wählen Sie Create Database from Share aus.

  4. Folgen Sie den im Dialogfeld angezeigten Anweisungen.

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>
Copy

Dabei ist provider_account der Name des Kontos, das die Freigabe bereitgestellt hat, und share_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              |
+---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+
Copy

In 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 Databases tab » <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

  1. Rolle r1 erstellt Datenbank snow_sales aus Freigabe xy12345.sales_s:

    use role r1;
    create database snow_sales from share xy12345.sales_s;
    
    Copy
  2. Rolle r1 gewährt Rolle r2 die Berechtigung IMPORTED PRIVILEGES für die Datenbank snow_sales:

    grant imported privileges on database snow_sales to role r2;
    
    Copy
  3. Da r2 nicht über die Berechtigung OWNERSHIP für die Datenbank verfügt, muss die Rolle r2 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;
Copy

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;
Copy

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>;
    
    Copy

    Erstellen Sie beispielsweise einen Stream auf der freigegebene Ansicht aggregate_1_v in Datenbank und Schema snow_sales.aggregates_eula:

    CREATE STREAM aggregate_1_v_stream ON VIEW snow_sales.aggregates_eula.aggregate_1_v;
    
    Copy
  • So erstellen Sie Streams auf freigegebenen Tabellen:

    CREATE STREAM <name> ON TABLE <shared_db>.<schema>.<table>;
    
    Copy

    Erstellen Sie beispielsweise einen Tabellenstream für die gemeinsam genutzte Tabelle aggregate_1 in Datenbank und Schema snow_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