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 SHARES erteilt wurde) verwenden. Weitere Details zur Berechtigung IMPORT SHARES 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:

Weboberfläche

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

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 Anbieterkonto.Freigabename (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 |
+----------+----------------------------------+---------------------------------+

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:

Weboberfläche
  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.

Beachten Sie, dass Sie zum Zeitpunkt der Erstellung wählen können, ob Sie die Berechtigung IMPORTED PRIVILEGES einer oder mehreren Rollen im System erteilen möchten, oder ob Sie die Berechtigung später vergeben möchten.

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>

Dabei ist Anbieterkonto der Name des Kontos, das die Freigabe bereitgestellt hat, und Freigabename der Name der Freigabe, aus der die Datenbank erstellt werden soll.

Bemerkung

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;

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

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

Erstellen von Tabellenstreams für freigegebene Tabellen

Bemerkung

Die Unterstützung von Tabellenstreams auf freigegebenen Tabellen wird als Vorschau-Funktion bereitgestellt.

Durch das Erstellen von Tabellenstreams auf gemeinsam genutzten Tabellen können Sie die mit Datenbearbeitungssprache (DML) an diesen Tabellen vorgenommenen Änderungen verfolgen. Diese Funktionalität ähnelt dem Erstellen und Verwenden von Streams auf „lokalen“ Tabellen (d. h. Tabelle und Stream befinden sich in demselben Konto).

So erstellen Sie Tabellenstreams für freigegebene Tabellen:

  1. Erstellen Sie mithilfe einer Rolle mit der Berechtigung IMPORTED PRIVILEGES einen Tabellenstream für eine gemeinsam genutzte Tabelle:

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

    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;
    

    Weitere Informationen zum Erstellen von Streams finden Sie unter CREATE STREAM.

Bemerkung

Verwenden Sie die Stream-Datensä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 in der Befehlsausgabe der Spaltenwert STALE für den Stream TRUE lautet, ist der Stream veraltet.

Erteilen von Berechtigungen für eine freigegebene Datenbank

Nur Rollen, die zum Erstellen einer Datenbank aus einer Freigabe verwendet werden, können die Datenbank anfänglich verwenden. Der Zugriff auf andere Rollen kann jedoch über die Data Sharing-spezifische Berechtigung IMPORTED PRIVILEGES erteilt werden.

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:

Weboberfläche

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> … TO ROLE-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;
    
  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;
    
  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;
    

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;