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.
Die unter diesem Thema beschriebenen Aufgaben gelten nicht für Konten mit Leseberechtigung. Wenn Sie ein Lesekonto verwenden, um importierte Daten zu nutzen, müssen Sie keine dieser Aufgaben ausführen, da sie bereits von einem Administrator des Anbieterkontos erledigt wurden.
Unter diesem Thema:
Allgemeine Einschränkungen für importierte Datenbanken¶
Importierte Datenbanken haben die folgenden Einschränkungen für Verbraucher:
Importierte 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 importierten Datenbank oder eines Schemas/einer Tabelle in der Datenbank.
Time Travel für eine importierte Datenbank oder beliebige Schemas/Tabellen in der Datenbank.
Bearbeiten Sie die Kommentare für eine importierte Datenbank.
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 im Navigationsmenü die Option Data sharing»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.
Zum Anzeigen von Snowflake Marketplace-Angeboten, die in eine Datenbank importiert wurden und für Abfragen bereit sind, führen Sie die folgenden Schritte aus:
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.
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:
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.
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 die Objekte zu sehen, die importiert werden, bevor Sie eine Datenbank erstellen, 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. Anweisungen zum Gewähren des Zugriffs für andere Rollen finden Sie unter Gewähren von Berechtigungen für eine importierte Datenbank (in diesem Thema).
Erteilen von Berechtigungen für eine importierte 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¶
Ermöglichen Sie Benutzern den Zugriff auf Objekte in einer Freigabe, indem Sie einer oder mehreren Rollen in Ihrem Konto die Berechtigung IMPORTED PRIVILEGES für eine importierte 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.
Um die Rollen anzuzeigen, die über USAGE-Berechtigungen für eine importierte Datenbank verfügen, verwenden Sie die Weboberfläche oder den Befehl SHOW GRANTS.
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:
Option 2: Objekte in einer Freigabe, die mit einer Datenbankrolle verbunden ist¶
Ermöglichen Sie Benutzern den Zugriff auf Objekte in einer Freigabe, indem Sie einer oder mehreren Rollen in Ihrem Konto die entsprechende Datenbankrolle in der importierten Datenbank zuweisen.
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:
CREATEDATABASEc1FROMSHAREprovider1.share1;
Copy
Schritt 2: Gewähren Sie Ihren Rollen auf Kontoebene Datenbankrollen¶
Gewähren Sie den Rollen in Ihrem Konto Datenbankrollen, um Benutzern mit diesen Rollen den Zugriff auf Datenbankobjekte in der Freigabe zu ermöglichen.
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 ROLESinDATABASEc1;GRANTDATABASE ROLEc1.r1TOROLEanalyst;
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 importierte Datenbank (unter diesem Thema).
So erstellen Sie Streams auf freigegebenen Ansichten:
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.