Delen via


Federatieve query's uitvoeren op Snowflake

In dit artikel wordt beschreven hoe u Lakehouse Federation instelt voor het uitvoeren van federatieve query's op Snowflake-gegevens die niet worden beheerd door Azure Databricks. Zie Wat is Lakehouse Federation? voor meer informatie over Lakehouse Federation.

Als u verbinding wilt maken met uw Snowflake-database met Behulp van Lakehouse Federation, moet u het volgende maken in uw Azure Databricks Unity Catalog-metastore:

  • Een verbinding met uw Snowflake-database.
  • Een refererende catalogus die uw Snowflake-database in Unity Catalog weerspiegelt, zodat u de syntaxis en hulpprogramma's voor gegevensbeheer van Unity Catalog kunt gebruiken om azure Databricks-gebruikerstoegang tot de database te beheren.

Voordat u begint

Vereisten voor werkruimte:

  • Werkruimte ingeschakeld voor Unity Catalog.

Rekenvereisten:

  • Netwerkconnectiviteit van uw Databricks Runtime-cluster of SQL Warehouse naar de doeldatabasesystemen. Zie De aanbevelingen voor netwerken voor Lakehouse Federation.
  • Azure Databricks-clusters moeten gebruikmaken van Databricks Runtime 13.3 LTS of hoger en de modus voor gedeelde of toegang tot één gebruiker.
  • SQL-warehouses moeten Pro of Serverless zijn en moeten 2023.40 of hoger gebruiken.

Vereiste machtigingen:

  • Als u een verbinding wilt maken, moet u een metastore-beheerder of een gebruiker zijn met de CREATE CONNECTION bevoegdheid voor de Unity Catalog-metastore die is gekoppeld aan de werkruimte.
  • Als u een refererende catalogus wilt maken, moet u beschikken over de CREATE CATALOG machtiging voor de metastore en de eigenaar van de verbinding zijn of over de CREATE FOREIGN CATALOG bevoegdheid voor de verbinding beschikken.

Aanvullende machtigingsvereisten worden opgegeven in elke sectie op basis van taken die volgt.

  • Als u van plan bent om te verifiëren met behulp van OAuth, maakt u een beveiligingsintegratie in de Snowflake-console. Zie de volgende sectie voor meer informatie.

(Optioneel) Een beveiligingsintegratie maken in de Snowflake-console

Als u wilt verifiëren met behulp van OAuth, volgt u deze stap voordat u een Snowflake-verbinding maakt. Als u zich wilt verifiëren met behulp van een gebruikersnaam en wachtwoord, slaat u deze sectie over.

Notitie

Alleen de systeemeigen OAuth-integratie van Snowflake wordt ondersteund. Externe OAuth-integraties, zoals Okta of Microsoft Entra-id, worden niet ondersteund.

Voer in de Snowflake-console het volgende uit CREATE SECURITY INTEGRATION. Vervang de volgende waarden:

  • <integration-name>: Een unieke naam voor uw OAuth-integratie.

  • <workspace-url>: een URL van een Azure Databricks-werkruimte. U moet instellen OAUTH_REDIRECT_URI op https://<workspace-url>/login/oauth/snowflake.html, waar <workspace-url> is de unieke URL van de Azure Databricks-werkruimte waar u de Snowflake-verbinding maakt.

  • <duration-in-seconds>: Een tijdsduur voor vernieuwingstokens.

    Belangrijk

    OAUTH_REFRESH_TOKEN_VALIDITY is een aangepast veld dat standaard is ingesteld op 90 dagen. Nadat het vernieuwingstoken is verlopen, moet u de verbinding opnieuw verifiëren. Stel het veld in op een redelijke tijdsduur.

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;

Een verbinding maken

Een verbinding geeft een pad en referenties op voor toegang tot een extern databasesysteem. Als u een verbinding wilt maken, kunt u Catalog Explorer of de CREATE CONNECTION SQL-opdracht gebruiken in een Azure Databricks-notebook of de Databricks SQL-queryeditor.

Notitie

U kunt ook de Databricks REST API of de Databricks CLI gebruiken om een verbinding te maken. Zie POST /api/2.1/unity-catalog/connections en Unity Catalog-opdrachten.

Vereiste machtigingen: Metastore-beheerder of gebruiker met de CREATE CONNECTION bevoegdheid.

Catalogusverkenner

  1. Klik in uw Azure Databricks-werkruimte op Cataloguspictogram Catalogus.

  2. Klik boven aan het deelvenster Catalogus op het Pictogram Toevoegen of plus pictogram Toevoegen en selecteer Een verbinding toevoegen in het menu.

    U kunt ook op de pagina Snelle toegang op de knop Externe gegevens > klikken, naar het tabblad Verbindingen gaan en op Verbinding maken klikken.

  3. Voer een gebruiksvriendelijke verbindingsnaam in.

  4. Selecteer een verbindingstype van Snowflake.

  5. Voer de volgende verbindingseigenschappen in voor uw Snowflake-magazijn.

    • Verificatietype: OAuth of Username and password
    • Host: bijvoorbeeld snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • Poort: bijvoorbeeld 443
    • Snowflake warehouse: bijvoorbeeld my-snowflake-warehouse
    • Gebruiker: bijvoorbeeld snowflake-user
    • (OAuth) Client-id: Voer in de Snowflake-console uit SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>') om de client-id voor uw beveiligingsintegratie op te halen.
    • (OAuth): Clientgeheim: voer in de Snowflake-console uit SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>') om het clientgeheim voor uw beveiligingsintegratie op te halen.
    • (OAuth) Clientbereik: refresh_token session:role:<role-name>. Geef de Snowflake-rol op die moet worden gebruikt in <role-name>.
    • (Gebruikersnaam en wachtwoord) Wachtwoord: bijvoorbeeld password123

    (OAuth) U wordt gevraagd u aan te melden bij Snowflake met uw OAuth-referenties.

  6. (Optioneel) Klik op Verbinding testen om te bevestigen dat deze werkt.

  7. (Optioneel) Voeg een opmerking toe.

  8. Klik op Create.

SQL

Voer de volgende opdracht uit in een notebook of de Sql-query-editor van Databricks.

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

U wordt aangeraden Azure Databricks-geheimen te gebruiken in plaats van tekenreeksen zonder opmaak voor gevoelige waarden, zoals referenties. Voorbeeld:

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>')
)

Zie Geheimbeheer voor informatie over het instellen van geheimen.

Een refererende catalogus maken

Een refererende catalogus spiegelt een database in een extern gegevenssysteem, zodat u de toegang tot gegevens in die database kunt opvragen en beheren met behulp van Azure Databricks en Unity Catalog. Als u een refererende catalogus wilt maken, gebruikt u een verbinding met de gegevensbron die al is gedefinieerd.

Als u een refererende catalogus wilt maken, kunt u Catalog Explorer of de CREATE FOREIGN CATALOG SQL-opdracht gebruiken in een Azure Databricks-notebook of de SQL-queryeditor.

Notitie

U kunt ook de Databricks REST API of de Databricks CLI gebruiken om een catalogus te maken. Zie POST /api/2.1/unity-catalog/catalogs en Unity Catalog-opdrachten.

Vereiste machtigingen: CREATE CATALOG machtiging voor de metastore en eigendom van de verbinding of de CREATE FOREIGN CATALOG bevoegdheid voor de verbinding.

Catalogusverkenner

  1. Klik in uw Azure Databricks-werkruimte op Cataloguspictogram Catalog om Catalog Explorer te openen.

  2. Klik boven aan het deelvenster Catalogus op het Pictogram Toevoegen of plus pictogram Toevoegen en selecteer Een catalogus toevoegen in het menu.

    U kunt ook op de pagina Snelle toegang op de knop Catalogussen klikken en vervolgens op de knop Catalogus maken klikken.

  3. Volg de instructies voor het maken van refererende catalogi in Catalogussen maken.

SQL

Voer de volgende SQL-opdracht uit in een notebook of SQL-queryeditor. Items tussen haakjes zijn optioneel. Vervang de waarden van de tijdelijke aanduidingen:

  • <catalog-name>: Naam voor de catalogus in Azure Databricks.
  • <connection-name>: Het verbindingsobject waarmee de gegevensbron, het pad en de toegangsreferenties worden opgegeven.
  • <database-name>: De naam van de database die u wilt spiegelen als een catalogus in Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Hoofdlettergevoelige database-id's

Het database veld van de refererende catalogus wordt toegewezen aan een Snowflake-database-id. Als de Snowflake-database-id niet hoofdlettergevoelig is, blijft de behuizing die u gebruikt in de refererende catalogus <database-name> behouden. Als de Snowflake-database-id echter hoofdlettergevoelig is, moet u de refererende catalogus <database-name> tussen dubbele aanhalingstekens verpakken om de case te behouden.

Voorbeeld:

  • database wordt geconverteerd naar DATABASE

  • "database" wordt geconverteerd naar database

  • "database""" wordt geconverteerd naar database"

    Als u een dubbele aanhalingsteken wilt ontsnappen, gebruikt u nog een dubbele aanhalingsteken.

  • "database"" resulteert in een fout omdat de dubbele aanhalingsteken niet correct is ontsnapt.

Zie Id-vereisten in de Documentatie van Snowflake voor meer informatie.

Ondersteunde pushdowns

De volgende pushdowns worden ondersteund:

  • Filters
  • Projecties
  • Grenswaarde
  • Samenvoegingen
  • Aggregates (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevAmp, Sum, VariancePop, VariancePop, VarianceSamp)
  • Functies (tekenreeksfuncties, wiskundige functies, gegevens, tijd- en tijdstempelfuncties en andere diverse functies, zoals Alias, Cast, SortOrder)
  • Windows-functies (DenseRank, Rank, RowNumber)
  • Sorteervolgorde

Toewijzingen van gegevenstypen

Wanneer u van Snowflake naar Spark leest, worden gegevenstypen als volgt toegewezen:

Snowflake-type Spark-type
decimaal, getal, numeriek DecimalType
bigint, byteint, int, integer, smallint, tinyint IntegerType
float, float4, float8 FloatType
dubbele, dubbele precisie, echt DoubleType
teken, teken, tekenreeks, tekst, tijd, varchar StringType
binair BinaryType
boolean BooleanType
datum DateType
datum/tijd, tijdstempel, timestamp_ltz, timestamp_ntz, timestamp_tz TimestampType

OAuth-beperkingen

Hieronder ziet u ondersteuningsbeperkingen voor OAuth:

  • Het Snowflake OAuth-eindpunt moet toegankelijk zijn vanuit IP-adressen van het Databricks-besturingsvlak. Zie Uitgaand vanuit het besturingsvlak van Azure Databricks. Snowflake biedt ondersteuning voor het configureren van netwerkbeleid op beveiligingsintegratieniveau, waardoor een afzonderlijk netwerkbeleid mogelijk is dat directe connectiviteit mogelijk maakt vanaf het Databricks-besturingsvlak naar het OAuth-eindpunt voor autorisatie.
  • Configuratieopties voor proxy-, proxyhost-, proxypoort- en Snowflake-rol worden niet ondersteund. Geef de rol Snowflake op als onderdeel van het OAuth-bereik.

Aanvullende bronnen