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 vreemde catalogus die uw Snowflake-database in Unity Catalog spiegelt, zodat u de query-syntaxis en gegevensbeheertools van Unity Catalog kunt gebruiken om de toegang van Azure Databricks-gebruikers tot de database te beheren.

Voordat u begint

Vereisten voor werkruimte:

  • Werkruimte geactiveerd voor Unity Catalog.

Rekenvereisten:

  • Netwerkconnectiviteit van uw rekenresource naar de doeldatabasesystemen. Zie De aanbevelingen voor netwerken voor Lakehouse Federation.
  • Azure Databricks Compute moet Databricks Runtime 13.3 LTS of hoger gebruiken en Standaard of Toegewezen-toegangsmodus.
  • SQL-warehouses moeten pro of serverloos 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 buitenlandse catalogus wilt maken, moet u de machtiging CREATE CATALOG hebben voor de metastore en ofwel de eigenaar van de verbinding zijn of het privilege CREATE FOREIGN CATALOG voor de verbinding hebben.

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.
  • Als u van plan bent om te verifiëren met behulp van een OAuth-toegangstoken, moet u ook een toegangstoken aanvragen.

(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 ingebouwde 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 OAUTH_REDIRECT_URI instellen op https://<workspace-url>/login/oauth/snowflake.html, waarbij <workspace-url> de unieke URL is 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 verversingstoken is verlopen, moet u de verbinding opnieuw authenticeren. 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;

(Optioneel) Een OAuth-toegangstoken aanvragen

Volg Procedure: Een OAuth-token genereren en gebruiken met Snowflake OAuth voor aangepaste clients in de Snowflake Knowledge Base.

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 het cataloguspictogram Catalogus.

  2. Klik boven in het deelvenster Catalogus op het Toevoegen- of pluspictogramToevoegen pictogram en selecteer 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 makenklikken.

  3. Op de pagina Verbindingsbeginselen van de wizard Verbinding instellen, voer een gebruiksvriendelijke verbindingsnaamin.

  4. Selecteer een verbindingstype van Snowflake.

  5. Selecteer voor verificatietypeUsername and password (basisverificatie), OAuth access token, PEM Private Keyof OAuth in de vervolgkeuzelijst.

  6. (Optioneel) Voeg een opmerking toe.

  7. Klik op Volgende.

  8. Voer de volgende verificatie- en verbindingsgegevens in voor uw Snowflake-magazijn. Eigenschappen die specifiek zijn voor de verificatiemethode die u hebt geselecteerd, worden voorafgegaan door de Auth type tussen haakjes.

    • Host: bijvoorbeeld snowflake-demo.east-us-2.azure.snowflakecomputing.com

    • Poort: bijvoorbeeld 443

    • Gebruiker: bijvoorbeeld snowflake-user

    • (Basisverificatie) wachtwoord: bijvoorbeeld password123

    • (OAuth-toegangstoken) Toegangstoken: Toegangstoken van (optioneel) Een OAuth-toegangstoken aanvragen.

    • (OAuth-toegangstoken) verloopt in seconden: de verlooptijd (in seconden) voor het toegangstoken van (optioneel) Een OAuth-toegangstoken aanvragen (expires_in).

    • (OAuth) client-id: voer in de Snowflake-console SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') uit om de client-id voor de beveiligingsintegratie op te halen.

    • (OAuth) clientgeheim: voer in de Snowflake-console SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') uit om het clientgeheim voor de beveiligingsintegratie op te halen.

    • (OAuth) OAuth-bereik: refresh_token session:role:<role-name>. Geef de Snowflake-rol op die moet worden gebruikt in <role-name>.

    • (OAuth) Aanmelden met Snowflake: klik en meld u aan bij Snowflake met uw OAuth-referenties.

    • (PERSOONLIJKE PEM-sleutel) persoonlijke PEM-sleutel: persoonlijke sleutel van RSA-sleutelpar in HEX64-indeling.

    • (PEM-persoonlijke sleutel) verloopt in seconden: de verlooptijd (in seconden) voor de verbinding die is gemaakt met een persoonlijke sleutel.

      Wanneer u zich hebt aangemeld, wordt u teruggeleid naar de wizard Verbinding instellen.

  9. Klik op Verbinding maken.

  10. (Basisverificatie) Geef op de pagina Verbindingsgegevens het volgende op:

    • Snowflake warehouse: bijvoorbeeld my-snowflake-warehouse
    • (Optioneel) proxyhost: host van de proxy die wordt gebruikt om verbinding te maken met Snowflake. U moet ook de optie Gebruik proxy selecteren en proxypoortopgeven.
    • (Optioneel) Proxy-gebruiken: of u verbinding wilt maken met Snowflake met behulp van een proxyserver.
    • (Optioneel) proxypoort: poort van de proxy die wordt gebruikt om verbinding te maken met Snowflake. U moet ook proxy- gebruiken selecteren en proxyhost opgeven.
    • (Optioneel) Snowflake-rol: de standaardbeveiligingsrol die moet worden gebruikt voor de sessie nadat u verbinding hebt gemaakt.
  11. Klik op Volgende.

  12. Voer op de pagina Catalogus Basis een naam in voor de buitenlandse catalogus. 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.

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

  14. Klik op Maak de catalogus.

  15. Selecteer op de pagina Access de werkruimten waarin gebruikers toegang hebben tot de catalogus die u hebt gemaakt. U kunt Alle werkruimten hebben toegangselecteren of klikken op Toewijzen aan werkruimten, de werkruimten selecteren en vervolgens op Toewijzenklikken.

  16. Wijzig de eigenaar die in staat zal zijn de toegang tot alle objecten in de catalogus te beheren. Begin een principal in het tekstvak te typen en klik vervolgens op de principal in de geretourneerde resultaten.

  17. Verleen privileges aan de catalogus. Klik op Toestaan:

    1. Geef de Principals op die toegang hebben tot objecten in de catalogus. Begin met het typen van een naam in het tekstvak en klik vervolgens op de naam in de weergegeven resultaten.
    2. Selecteer de vooraf ingestelde bevoegdheden om aan elke principal toe te kennen. Alle accountgebruikers krijgen standaard BROWSE.
      • Selecteer Gegevenslezer in de vervolgkeuzelijst om read bevoegdheden te verlenen voor objecten in de catalogus.
      • Selecteer Gegevenseditor in de vervolgkeuzelijst om read en modify bevoegdheden voor objecten in de catalogus toe te kennen.
      • Selecteer handmatig de bevoegdheden die u wilt verlenen.
    3. Klik op Toestaan.
  18. Klik op Volgende.

  19. Op de pagina Metagegevens specificeer je sleutel-waardeparen voor tags. Zie Tags toepassen op beveiligbare objecten van Unity Catalogvoor meer informatie.

  20. (Optioneel) Voeg een opmerking toe.

  21. Klik op Opslaan.

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

We raden aan Azure Databricks secrets te gebruiken in plaats van gewone tekststrings voor gevoelige waarden, zoals inloggegevens. 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 buitenlandse catalogus maken

Notitie

Als u de UI gebruikt om een verbinding met de gegevensbron te maken, is de creatie van een buitenlandse catalogus inbegrepen en kunt u deze stap overslaan.

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. Om een buitenlandse catalogus te maken, gebruikt u een verbinding met de gegevensbron die al is gedefinieerd.

Als u een buitenlandse catalogus wilt maken, kunt u Catalog Explorer of de CREATE FOREIGN CATALOG SQL-opdracht gebruiken in een Azure Databricks-notebook of de SQL-query-editor. 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 CataloguspictogramCatalog om Catalog Explorer te openen.

  2. Klik bovenaan het deelvenster Catalogus op het pictogram Toevoegen of plustoevoegen en selecteer Een catalogus toevoegen in het menu.

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

  3. Volg de instructies voor het maken van buitenlandse catalogi in Catalogi 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 catalogus in Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Hoofdlettergevoelige database-identificatoren

Het database-veld van de vreemde catalogus komt overeen met een Snowflake-database-id. Als de Snowflake-database-id niet hoofdlettergevoelig is, blijft de behuizing die u in de refererende catalogus gebruikt, behouden <database-name>. Als de Snowflake-database-identificatie echter hoofdlettergevoelig is, moet u de externe catalogus "<database-name>" tussen dubbele aanhalingstekens plaatsen om de hoofdlettergevoeligheid 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 het dubbele aanhalingsteken niet correct is geëscaped.

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

Ondersteunde pushdowns

De volgende pushdowns worden ondersteund:

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

Gegevenstypetoewijzingen

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

Sneeuwvloktype Spark type
decimaal, getal, numeriek DecimaalType
bigint, byteint, int, integer, smallint, tinyint IntegerType
float, float4, float8 FloatType
dubbel, dubbele precisie, reëel DoubleType
char, karakter, tekenreeks, tekst, tijd, varchar Stringtype
binair BinaryType
boolean BooleanType
datum DatumType
datum/tijd, tijdstempel, timestamp_ltz, timestamp_ntz, timestamp_tz Tijdstempeltype

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 Azure Databricks-besturingsvlak. 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.

Beperkingen voor persoonlijke PEM-sleutels

Hier volgen de beperkingen van ondersteuning voor PEM privésleutels:

  • Snowflake JDBC-stuurprogramma biedt geen ondersteuning voor verificatie met versleutelde persoonlijke sleutels. Als u fouten wilt voorkomen, genereert u als volgt een sleutel met -nocrypt optie toegevoegd:

    openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
    

Aanvullende bronnen

Zie de volgende artikelen in de documentatie van Snowflake: