Datenverbraucher

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 Beschrä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 weitergeleitet (d. h. mit anderen Konten neu freigegeben) 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:

Classic Console

Klicken Sie auf Shares Shares tab und dann auf 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;

+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+
| created_on                      | kind    | name                    | database_name         | to | owner | comment                                     |
|---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------|
| Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | XY12345.SALES_S         |                       |    |       |                                             |
| Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | XY12345.SALES_S2        |                       |    |       |                                             |
| Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA |    |       | Sample data sets provided by Snowflake      |
+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+
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 in der Form provider_account.share_name (z. B. xy12345.sales_s) angezeigt.

  • Wenn die Spalte database_name leer ist, wurde in Ihrem Konto noch keine Datenbank aus der Freigabe erstellt.

Das nächste Beispiel verwendet den Befehl DESCRIBE SHARE, 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. Beachten Sie, dass jedem Objektname, einschließlich der Datenbank selbst, das Präfix <DB> vorangestellt ist. 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 SQLverwenden:

Classic Console
  1. Klicken Sie auf Shares Shares tab und dann auf Inbound.

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

  3. Klicken Sie auf Create Database from Share.

  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 nun den Namen der Datenbank, die aus der Freigabe erstellt wurde:

SHOW SHARES;

+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+
| created_on                      | kind    | name                    | database_name         | to | owner | comment                                     |
|---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------|
| Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | xy12345.SALES_S         | SNOW_SALES            |    |       |                                             |
| Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | xy12345.SALES_S2        |                       |    |       |                                             |
| Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA |    |       | Sample data sets provided by Snowflake      |
+---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+

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.

Weisen Sie beispielsweise der Rolle analyst in Ihrem Konto die Datenbankrolle c1.r1 zu.

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