Ausführen von Verbundabfragen auf Snowflake

In diesem Artikel wird beschrieben, wie Sie Lakehouse Federation einrichten, um Verbundabfragen von Snowflake-Daten auszuführen, die nicht von Azure Databricks verwaltet werden. Weitere Informationen zu Lakehouse Federation finden Sie unter Was ist Lakehouse Federation?.

Um mithilfe von Lakehouse Federation eine Verbindung mit Ihrer Snowflake-Datenbank herzustellen, müssen Sie Folgendes in Ihrem Azure Databricks Unity Catalog-Metastore erstellen:

  • Eine Verbindung mit Ihrer Snowflake-Datenbank.
  • Einen Fremdkatalog, der Ihre Snowflake-Datenbank in Unity Catalog spiegelt, sodass Sie die Abfragesyntax und Datengovernancetools von Unity Catalog zum Verwalten des Azure Databricks-Benutzerzugriffs auf die Datenbank verwenden können.

Voraussetzungen

Anforderungen an den Arbeitsbereich:

  • Der Arbeitsbereich muss für Unity Catalog aktiviert sein.

Computeanforderungen:

  • Netzwerkkonnektivität zwischen Ihrem Databricks Runtime-Cluster oder SQL-Warehouse und den Zieldatenbanksystemen. Weitere Informationen finden Sie unter Netzwerkempfehlungen für Lakehouse Federation.
  • Azure Databricks-Cluster müssen Databricks Runtime 13.3 LTS oder höher und den Clusterzugriffsmodus „Freigegeben“ oder „Einzelbenutzer“ verwenden.
  • SQL-Warehouses müssen Pro- oder serverlose Warehouses sein und 2023.40 oder höher verwenden.

Erforderliche Berechtigungen:

  • Um eine Verbindung zu erstellen, müssen Sie Metastore-Administrator oder Benutzer mit der Berechtigung „CREATE CONNECTION“ für den Unity Catalog-Metastore sein, der an den Arbeitsbereich angefügt ist.
  • Um einen Fremdkatalog zu erstellen, müssen Sie über die Berechtigung „CREATE CATALOG“ für den Metastore verfügen und entweder der Besitzer der Verbindung sein oder über die Berechtigung „CREATE FOREIGN CATALOG“ für die Verbindung verfügen.

In jedem folgenden aufgabenbasierten Abschnitt werden zusätzliche Berechtigungsanforderungen angegeben.

  • Wenn Sie die Authentifizierung mit OAuth planen, erstellen Sie eine Sicherheitsintegration in der Snowflake-Konsole. Weitere Informationen hierzu finden Sie im folgenden Abschnitt.

(Optional) Erstellen einer Sicherheitsintegration in der Snowflake-Konsole

Wenn Sie sich mit OAuth authentifizieren möchten, führen Sie diesen Schritt aus, bevor Sie eine Snowflake-Verbindung erstellen. Um sich stattdessen mit einem Benutzernamen und Kennwort zu authentifizieren, überspringen Sie diesen Abschnitt.

Hinweis

Nur die native OAuth-Integration von Snowflake wird unterstützt. Externe OAuth-Integrationen wie Okta oder Microsoft Entra ID werden nicht unterstützt.

Führen Sie in der Snowflake-Konsole CREATE SECURITY INTEGRATION aus. Ersetzen Sie die folgenden Werte:

  • <integration-name>: Eindeutiger Name für Ihre OAuth-Integration.

  • <workspace-url>: URL des Azure Databricks-Arbeitsbereichs. Sie müssen OAUTH_REDIRECT_URI auf https://<workspace-url>/login/oauth/snowflake.html festlegen, wobei <workspace-url> die eindeutige URL des Azure Databricks-Arbeitsbereichs ist, in dem Sie die Snowflake-Verbindung erstellen.

  • <duration-in-seconds>: Dauer für Aktualisierungstoken.

    Wichtig

    OAUTH_REFRESH_TOKEN_VALIDITY ist ein benutzerdefiniertes Feld, das standardmäßig auf 90 Tage festgelegt ist. Nachdem das Aktualisierungstoken abgelaufen ist, müssen Sie die Verbindung erneut authentifizieren. Legen Sie eine angemessene Dauer in diesem Feld fest.

CREATE SECURITY INTEGRATION <integration-name>
TYPE = oauth
ENABLED = true
OAUTH_CLIENT = custom
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<workspace-url>/login/oauth/snowflake.html'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = <duration-in-seconds>
OAUTH_ENFORCE_PKCE = TRUE;

Erstellen einer Verbindung

Eine Verbindung gibt einen Pfad und Anmeldeinformationen für den Zugriff auf ein externes Datenbanksystem an. Zum Erstellen einer Verbindung können Sie den Katalog-Explorer oder den SQL-Befehl „CREATE CONNECTION“ in einem Azure Databricks-Notebook oder im Databricks SQL-Abfrage-Editor verwenden.

Hinweis

Sie können auch die Databricks-REST-API oder die Databricks CLI verwenden, um eine Verbindung zu erstellen. Siehe POST /api/2.1/unity-catalog/connections und Unity Catalog-Befehle.

Erforderliche Berechtigungen: Metastore-Administrator oder Benutzer mit der Berechtigung „CREATE CONNECTION“.

Katalog-Explorer

  1. Klicken Sie in Ihrem Azure Databricks-Arbeitsbereich auf Symbol „Katalog“ Katalog.

  2. Klicken Sie oben im Bereich Katalog auf das Symbol Symbol zum Hinzufügen bzw. Plussymbol Hinzufügen, und wählen Sie im Menü Verbindung hinzufügen aus.

    Klicken Sie alternativ auf der Seite Schnellzugriff auf die Schaltfläche Externe Daten >, navigieren Sie zur Registerkarte Verbindungen, und klicken Sie auf Verbindung erstellen.

  3. Geben Sie einen benutzerfreundlichen Verbindungsnamen ein.

  4. Wählen Sie als Verbindungstypdie Option Snowflake aus.

  5. Geben Sie die folgenden Verbindungseigenschaften für Ihr Snowflake-Warehouse ein.

    • Auth type (Authentifizierungstyp): OAuth oder Username and password
    • Host: Beispiel: snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • Port: Beispiel: 443
    • Snowflake-Warehouse: Beispiel: my-snowflake-warehouse
    • Benutzer: Beispiel: snowflake-user
    • (OAuth) Client ID (Client-ID): Führen Sie in der Snowflake-Konsole SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>') aus, um die Client-ID für Ihre Sicherheitsintegration abzurufen.
    • (OAuth): Client secret (Geheimer Clientschlüssel): Führen Sie in der Snowflake-Konsole SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>') aus, um den geheimen Clientschlüssel für Ihre Sicherheitsintegration abzurufen.
    • (OAuth) Client scope (Clientbereich): refresh_token session:role:<role-name>. Geben Sie die Snowflake-Rolle an, die in <role-name> verwendet werden soll.
    • (Benutzernamen und Kennwort) Password (Kennwort): z. B. password123

    (OAuth) Sie werden aufgefordert, sich mit Ihren OAuth-Anmeldeinformationen bei Snowflake anzumelden.

  6. (Optional) Klicken Sie auf Verbindung testen, um zu überprüfen, ob sie funktioniert.

  7. (Optional) Fügen Sie einen Kommentar hinzu.

  8. Klicken Sie auf Erstellen.

SQL

Führen Sie in einem Notebook oder im Databricks SQL-Abfrage-Editor den folgenden Befehl aus.

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user '<user>',
  password '<password>'
);

Es wird empfohlen, Aure Databricks-Geheimnisse anstelle von Klartext-Zeichenfolgen für vertrauliche Werte wie Anmeldeinformationen zu verwenden. Beispiele:

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

Informationen zum Einrichten von Geheimnissen finden Sie unter Verwaltung von Geheimnissen.

Erstellen eines Fremdkatalogs

Ein Fremdkatalog spiegelt eine Datenbank in einem externen Datensystem, sodass Sie Abfragen und die Verwaltung des Zugriffs auf Daten in dieser Datenbank mithilfe von Azure Databricks und Unity Catalog steuern können. Um einen fremden Katalog zu erstellen, verwenden Sie eine Verbindung mit der bereits definierten Datenquelle.

Zum Erstellen eines Fremdkatalogs können Sie den Katalog-Explorer oder den SQL-Befehl CREATE FOREIGN CATALOG in einem Azure Databricks-Notebook oder im SQL-Abfrage-Editor verwenden.

Hinweis

Sie können auch die Databricks-REST-API oder die Databricks CLI verwenden, um einen Katalog zu erstellen. Siehe POST /api/2.1/unity-catalog/catalogs und Unity Catalog-Befehle.

Erforderliche Berechtigungen: Sie benötigen die Berechtigung CREATE CATALOG für den Metastore und müssen entweder Besitzer der Verbindung sein oder die Berechtigung CREATE FOREIGN CATALOG für diese haben.

Katalog-Explorer

  1. Klicken Sie in Ihrem Azure Databricks-Arbeitsbereich auf Katalogsymbol Katalog, um den Katalog-Explorer zu öffnen.

  2. Klicken Sie oben im Bereich Katalog auf das Symbol Symbol zum Hinzufügen bzw. Plussymbol Hinzufügen, und wählen Sie im Menü Katalog hinzufügen aus.

    Klicken Sie alternativ auf der Seite Schnellzugriff auf die Schaltfläche Kataloge, und klicken Sie dann auf die Schaltfläche Katalog erstellen.

  3. Befolgen Sie die Anweisungen zum Erstellen von Fremdkataloge unter Erstellen von Katalogen.

SQL

Führen Sie den folgenden SQL-Befehl in einem Notebook oder SQL-Abfrage-Editor aus. Elemente in Klammern sind optional. Ersetzen Sie folgende Platzhalterwerte:

  • <catalog-name>: Name für den Katalog in Azure Databricks.
  • <connection-name>: Das Verbindungsobjekt, das die Datenquelle, den Pfad und die Anmeldeinformationen für den Zugriff angibt.
  • <database-name>: Name der Datenbank, die sie als Katalog in Azure Databricks spiegeln möchten.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Datenbankbezeichner mit Beachtung von Groß-/Kleinschreibung

Das database-Feld des Fremdkatalogs ist einem Snowflake-Datenbankbezeichner zugeordnet. Wenn bei dem Snowflake-Datenbankbezeichner die Groß-/Kleinschreibung nicht beachtet wird, wird die Groß-/Kleinschreibung beibehalten, die Sie im Fremdkatalog <database-name> verwenden. Wenn beim Snowflake-Datenbankbezeichner jedoch die Groß-/Kleinschreibung beachtet wird, müssen Sie den Fremdkatalog <database-name> in doppelte Anführungszeichen einschließen, um die Groß-/Kleinschreibung beizubehalten.

Zum Beispiel:

  • database wird in DATABASE konvertiert.

  • "database" wird in database konvertiert.

  • "database""" wird in database" konvertiert.

    Um ein doppeltes Anführungszeichen zu escapen, verwenden Sie ein weiteres doppeltes Anführungszeichen.

  • "database"" führt zu einem Fehler, da das doppelte Anführungszeichen nicht ordnungsgemäß escapt ist.

Weitere Informationen finden Sie unter Bezeichneranforderungen in der Snowflake-Dokumentation.

Unterstützte Pushdowns

Die folgenden Pushdowns werden unterstützt:

  • Filter
  • Projektionen
  • Begrenzung
  • Joins
  • Aggregate (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
  • Funktionen (Zeichenfolgenfunktionen, mathematische Funktionen, Daten-, Zeit- und Zeitstempelfunktionen und andere verschiedene Funktionen wie Alias, Cast, SortOrder)
  • Windows-Funktionen (DenseRank, Rank, RowNumber)
  • Sortierung

Datentypzuordnungen

Wenn Sie von Snowflake zu Spark lesen, werden die Datentypen wie folgt zugeordnet:

Snowflake-Typ Spark-Typ
decimal, number, numeric DecimalType
bigint, byteint, int, integer, smallint, tinyint IntegerType
float, float4, float8 FloatType
double, double precision, real DoubleType
char, character, string, text, time, varchar StringType
binary BinaryType
boolean BooleanType
date DateType
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz TimestampType

OAuth-Einschränkungen

Folgende Einschränkungen gelten in Bezug auf OAuth:

  • Auf den Snowflake-OAuth-Endpunkt muss über IP-Adressen der Databricks-Steuerungsebene zugegriffen werden können. Weitere Informationen finden Sie unter Ausgehend von Azure Databricks-Steuerungsebene. Snowflake unterstützt das Konfigurieren von Netzwerkrichtlinien auf Sicherheitsintegrationsebene, womit eine separate Netzwerkrichtlinie konfiguriert werden kann, die die direkte Konnektivität von der Databricks-Steuerungsebene zum OAuth-Endpunkt zur Autorisierung ermöglicht.
  • Use Proxy (Proxy verwenden), Proxy host (Proxyhost), Proxy port (Proxyport) und Snowflake-Rollenkonfigurationsoptionen werden nicht unterstützt. Geben Sie die Snowflake-Rolle als Teil des OAuth-Bereichs an.

Zusätzliche Ressourcen