Federatieve query's uitvoeren op Snowflake (OAuth)

Op deze pagina wordt beschreven hoe u Lakehouse Federation instelt om federatieve query's uit te voeren op Snowflake-gegevens die niet worden beheerd door Azure Databricks. Zie Verbinding maken met externe databases en catalogi 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 (werkruimten die zijn gemaakt na 9 november 2023, zijn al automatisch een Unity Catalog-metastore ingericht):

  • 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.

Op deze pagina wordt beschreven hoe u federatieve query's uitvoert op Snowflake-gegevens met behulp van de ingebouwde OAuth-integratie van Snowflake. Zie de volgende pagina's voor andere verificatiemethoden:

U kunt federatieve query's uitvoeren op Snowflake met behulp van queryfederatie of catalogusfederatie.

In queryfederatie pusht JDBC de Unity Catalog-query omlaag naar de externe database. Dit is ideaal voor rapportage op verzoek of voor een proof-of-concept voor uw ETL-pijplijnen.

In catalogusfederatie wordt de Unity Catalog-query rechtstreeks uitgevoerd op bestandsopslag. Deze aanpak is handig voor incrementele migratie zonder codeaanpassing of als een hybride model op langere termijn voor organisaties die bepaalde gegevens in Snowflake moeten onderhouden naast hun gegevens die zijn geregistreerd in Unity Catalog. Zie Snowflake-catalogusfederatie inschakelen.

Query-federatie

Voordat u begint

Vereisten voor werkruimte:

  • Werkruimte geactiveerd voor Unity Catalog. Werkruimten die na 9 november 2023 zijn gemaakt, zijn automatisch ingeschakeld voor Unity Catalog, inclusief automatische inrichting van metastores. U hoeft geen metastore handmatig te maken, tenzij uw werkruimte voorafgaat aan automatische activering en niet is ingeschakeld voor Unity Catalog. Zie Aan de slag met 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 toestemmingen:

  • 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. In werkruimten die automatisch zijn ingeschakeld voor Unity Catalog, hebben werkruimtebeheerders standaard de CREATE CONNECTION bevoegdheid.
  • 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. In werkruimten die automatisch zijn ingeschakeld voor Unity Catalog, hebben werkruimtebeheerders standaard de CREATE CATALOG bevoegdheid.

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

Een beveiligingsintegratie maken

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.

    Important

    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.

Voorbeeld:

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.

Note

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.

  1. Klik in uw Azure Databricks-werkruimte op het pictogram Gegevens.Catalogus.

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

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

  4. Selecteer een verbindingstype van Snowflake.

  5. Voor verificatietype selecteert u 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.

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

    • Poort: bijvoorbeeld 443

    • Gebruiker: bijvoorbeeld snowflake-user

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

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

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

    • Meld u aan met Snowflake: klik en meld u aan bij Snowflake met uw OAuth-referenties.

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

  9. Klik op Verbinding maken.

  10. 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.

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

  12. Klik op Maak de catalogus.

  13. 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.

  14. 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.

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

    1. Geef de Principals op die toegang hebben tot objecten in de catalogus. Begin een principal in het tekstvak te typen en klik vervolgens op de principal in de geretourneerde 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.
  16. Klik op Volgende.

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

  18. (Optioneel) Voeg een opmerking toe.

  19. Klik op Opslaan.

Geavanceerde verbindingsopties

Snowflake-verbindingen ondersteunen de volgende geavanceerde optie voor omgevingen met beperkte uitgaand verkeer of privéconnectiviteit:

  • disableOCSPChecks: Instellen op true om OCSP-certificaatintrekkingscontroles (Online Certificate Status Protocol) uit te schakelen in het Snowflake JDBC-stuurprogramma. Het uitschakelen van OCSP-controles slaat de controle op certificaatintrekking over.

Important

Sta waar mogelijk uitgaand verkeer naar de Snowflake OCSP-responder toe. Laat disableOCSPChecks niet ingesteld of stel deze in op false. Stel deze alleen in op true als uw configuratie voor beperkte uitgaande verbindingen of privéconnectiviteit dit verkeer niet kan toestaan.

Deze optie wordt niet weergegeven in Catalog Explorer. U kunt deze instellen wanneer u de verbinding met SQL maakt:

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  <connection-options>,
  disableOCSPChecks 'true'
);

Gebruik ALTER CONNECTIONvoor een bestaande verbinding .

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
  • Projections
  • Limit
  • Offset
  • Joins
  • Aggregates (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevAmp, Sum, VariancePop, VarianceSamp)
  • Functies (tekenreeksfuncties, wiskundige functies, datum-, tijd- en tijdstempelfuncties en andere diverse functies, zoals Alias, Cast, SortOrder)
  • Vensterfuncties (DenseRank, Rank, RowNumber)
  • Sorting
  • Top-N (sorteren en beperken combineren tot één bewerking), ondersteund in Databricks Runtime 17.3 en hoger

Gegevenstypetoewijzingen

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

Sneeuwvloktype Sparktype
decimal, , numbernumeric DecimalType
bigint, , byteintint, integer, , , smallinttinyint IntegerType
float, , float4float8 FloatType
double, , double precisionreal DoubleType
char, , characterstring, text, , , timevarchar StringType
binary BinaryType
boolean BooleanType
date DateType
datetime, timestamp, timestamp_ltz, timestamp_ntz, , timestamp_tz TimestampType

Beperkingen van queryfederatie

  • Het Snowflake OAuth-eindpunt moet toegankelijk zijn vanuit IP-adressen van het besturingsvlak van Azure Databricks. Zie uitgaande IP-adressen van 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 Azure 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.
  • Externe tabellen en weergaven die kolommen bevatten met Snowflake-specifieke gegevenstypen die niet worden ondersteund door Unity Catalog, zoals VECTOR, kunnen niet worden opgevraagd via Lakehouse Federation. Unity Catalog moet metagegevens opslaan voor alle kolommen in de refererende tabel, zodat niet-ondersteunde kolomtypen een fout 'Niet-ondersteund type' veroorzaken, zelfs als de query niet naar deze kolommen verwijst. Als u dit wilt omzeilen, maakt u een Snowflake-weergave die de niet-ondersteunde kolommen uitsluit en in plaats daarvan een query uitvoert op de weergave.

Aanvullende bronnen

Zie de volgende artikelen in de documentatie van Snowflake: