Dela via


Köra federerade frågor på Snowflake

Den här artikeln beskriver hur du set upp Lakehouse Federation för att köra federerade frågor på Snowflake-data som inte hanteras av Azure Databricks. Mer information om Lakehouse Federation finns i Vad är Lakehouse Federation?.

Om du vill ansluta till snowflake-databasen med Lakehouse Federation måste du skapa följande i ditt Azure Databricks Unity-Catalog metaarkiv:

  • En anslutning till snowflake-databasen.
  • En extern catalog som speglar din Snowflake-databas i Unity Catalog, så att du kan använda Unity Catalog frågesyntax och datastyrningsverktyg för att hantera användaråtkomst till Azure Databricks-databasen.

Innan du börjar

Krav för arbetsyta:

  • Arbetsyta aktiverad för Unity Catalog.

Beräkningskrav:

  • Nätverksanslutning från beräkningsresursen till måldatabassystemen. Se Nätverksrekommendationer för Lakehouse Federation.
  • Azure Databricks-beräkning måste använda Databricks Runtime 13.3 LTS eller senare och delat åtkomstläge eller enskilt åtkomstläge.
  • SQL-lager måste vara pro eller serverlösa och måste använda 2023.40 eller senare.

Behörigheter som krävs:

  • Om du vill skapa en anslutning måste du vara metaarkivadministratör eller användare med CREATE CONNECTION behörighet på Unity Catalog metaarkiv som är kopplat till arbetsytan.
  • Om du vill skapa en extern catalogmåste du ha CREATE CATALOG behörighet i metaarkivet och antingen vara ägare till anslutningen eller ha CREATE FOREIGN CATALOG behörighet för anslutningen.

Ytterligare behörighetskrav anges i varje aktivitetsbaserat avsnitt som följer.

  • Om du planerar att autentisera med OAuth skapar du en säkerhetsintegrering i Snowflake-konsolen.
  • Om du planerar att autentisera med en OAuth-åtkomsttoken måste du också begära en åtkomsttoken.

(Valfritt) Skapa en säkerhetsintegrering i Snowflake-konsolen

Om du vill autentisera med OAuth följer du det här steget innan du skapar en Snowflake-anslutning. Om du vill autentisera med ett användarnamn och lösenord i stället hoppar du över det här avsnittet.

Kommentar

Endast Snowflakes inbyggda OAuth-integrering stöds. Externa OAuth-integreringar som Okta eller Microsoft Entra-ID stöds inte.

I Snowflake-konsolen kör du CREATE SECURITY INTEGRATION. Ersätt följande values:

  • <integration-name>: Ett unikt namn för din OAuth-integrering.

  • <workspace-url>: En URL för Azure Databricks-arbetsytan. Du måste setOAUTH_REDIRECT_URI för att https://<workspace-url>/login/oauth/snowflake.html. where<workspace-url> är den unika URL:en för Azure Databricks-arbetsytan where där du kommer att skapa Snowflake-anslutningen.

  • <duration-in-seconds>: En tidslängd för refresh token.

    Viktigt!

    OAUTH_REFRESH_TOKEN_VALIDITY är ett anpassat fält som är set till 90 dagar som standard. När refresh token upphör att gälla måste du autentisera anslutningen igen. Set fältet till en rimlig tidslängd.

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;

(Valfritt) Begära en OAuth-åtkomsttoken

Följ Så här gör du: Generate och använd en OAuth-token med hjälp av Snowflake OAuth för anpassade klienter i Snowflakes kunskapsbas.

Skapa en anslutning

En anslutning anger en sökväg och credentials för åtkomst till ett externt databassystem. Om du vill skapa en anslutning kan du använda Catalog Explorer eller kommandot CREATE CONNECTION SQL i en Azure Databricks-notebook-fil eller Databricks SQL-frågeredigeraren.

Kommentar

Du kan också använda Databricks REST API eller Databricks CLI för att skapa en anslutning. Se kommandona POST /api/2.1/unity-catalog/connections och Unity Catalog.

Behörigheter som krävs: Metaarkivadministratör eller användare med behörighet.CREATE CONNECTION

Catalog Explorer

  1. På din Azure Databricks-arbetsyta klickar du på ikonen CatalogCatalog.

  2. Längst upp i fönstret Catalog klickar du på ikonen Lägg till eller plusIkonen Lägg till och selectLägg till en anslutning från menyn.

    Från sidan Snabbåtkomst klickar du på knappen Externa data >, går till fliken Connections och klickar på Skapa anslutning.

  3. Ange ett användarvänligt Anslutningsnamnpå sidan Set i guiden anslutning .

  4. Select en AnslutningstypSnowflake.

  5. För autentiseringstyp, selectUsername and password (grundläggande autentisering), OAuth access token, PEM Private Keyeller OAuth från den nedrullningsbara menyn.

  6. (Valfritt) Lägg till en kommentar.

  7. Klicka på Nästa.

  8. Ange följande autentiserings- och anslutningsinformation för ditt Snowflake-lager. Egenskaper som är specifika för den autentiseringsmetod som du har valt föregås av Auth type inom parenteser.

    • Värd: Till exempel snowflake-demo.east-us-2.azure.snowflakecomputing.com

    • Port: Till exempel 443

    • Användare: Till exempel snowflake-user

    • (Grundläggande autentisering) Lösenord: Till exempel password123

    • (OAuth-åtkomsttoken) åtkomsttoken: Åtkomsttoken från (valfritt) Begär en OAuth-åtkomsttoken.

    • (OAuth-åtkomsttoken) upphör att gälla i sek: Förfallotiden (i sekunder) för åtkomsttoken från (valfritt) Begär en OAuth-åtkomsttoken (expires_in).

    • (OAuth) klient-ID: I Snowflake-konsolen kör du SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') för att hämta klient-ID:t för säkerhetsintegrering.

    • (OAuth) Klienthemlighet: I Snowflake-konsolen kör du SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') för att hämta klienthemligheten för säkerhetsintegrering.

    • (OAuth) OAuth-omfång: refresh_token session:role:<role-name>. Ange den Snowflake-roll som ska användas i <role-name>.

    • (OAuth) Logga in med Snowflake: Klicka och logga in på Snowflake med din OAuth-credentials.

    • (PEM Private Key) PRIVATA PEM-nyckel: Privat nyckel från RSA-nyckelpar i HEX64-format.

    • (PRIVAT PEM-nyckel) upphör att gälla i sek: Förfallotiden (i sekunder) för anslutningen som görs med en privat nyckel.

      Vid en lyckad inloggning dirigeras du tillbaka till anslutningsguiden Set.

  9. Klicka på Skapa anslutning.

  10. (Grundläggande autentisering) På sidan Anslutningsinformation anger du följande:

    • Snowflake-lager: Till exempel my-snowflake-warehouse
    • (Valfritt) proxyvärd: Värd för proxyn som används för att ansluta till Snowflake. Du måste också selectanvända proxy och ange proxyport.
    • (Valfritt) Använd proxy: Om du vill ansluta till Snowflake med hjälp av en proxyserver.
    • (Valfritt) Proxyport: Port för proxyn som används för att ansluta till Snowflake. Du måste också selectanvända proxy och ange Proxyvärd.
    • (Valfritt) Snowflake-roll: Standardsäkerhetsrollen som ska användas för sessionen efter anslutningen.
  11. Klicka på Nästa.

  12. På sidan ,Catalog grundläggande, anger du ett namn för den utländska catalog. En extern catalog speglar en databas i ett externt datasystem så att du kan fråga och hantera åtkomst till data i databasen med hjälp av Azure Databricks och Unity Catalog.

  13. (Valfritt) Klicka på Testa anslutning för att bekräfta att den fungerar.

  14. Klicka på Skapa catalog.

  15. På sidan Accessselect de arbetsytor där användarna kan komma åt catalog du skapade. Antingen kan du selectså att alla arbetsytor har åtkomst, eller klicka på Tilldela till arbetsytor, markera arbetsytorna select och klicka sedan på Tilldela.

  16. Ändra ägare som ska kunna hantera åtkomst till alla objekt i catalog. Börja skriva en användare i textrutan och klicka sedan på användaren i resultaten.

  17. Grant Behörigheter på catalog. Klicka på Grant:

    1. Ange principals som ska ha åtkomst till objekt i catalog. Börja skriva en användare i textrutan och klicka sedan på användaren i resultaten.
    2. Select förinställda Privilege till grant för varje huvudprincip. Alla kontoanvändare beviljas BROWSE som standard.
      • Select dataläsare från den nedrullningsbara menyn för att grantread behörigheter för objekt i catalog.
      • Select dataredigeraren från den nedrullningsbara menyn för att grantread och modify behörigheter för objekt i catalog.
      • select manuellt tilldela behörigheterna till grant.
    3. Klicka på Grant.
  18. Klicka på Nästa.

  19. På sidan metadata anger du taggar för nyckel/värde-par. För mer information, se Tillämpa taggar på Unity Catalog skyddsbara objekt.

  20. (Valfritt) Lägg till en kommentar.

  21. Klicka på Spara.

SQL

Kör följande kommando i en notebook-fil eller Databricks SQL-frågeredigeraren.

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

Vi rekommenderar att du använder Azure Databricks secrets i stället för okrypterade strängar för känsliga values som credentials. Till exempel:

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

Information om hur du konfigurerar hemligheter finns i Hemlighetshantering.

Skapa en främmande catalog

Kommentar

Om du använder användargränssnittet för att skapa en anslutning till datakällan inkluderas extern catalog skapandet och du kan hoppa över detta steg.

En extern catalog speglar en databas i ett externt datasystem så att du kan fråga och hantera åtkomst till data i databasen med hjälp av Azure Databricks och Unity Catalog. För att skapa en utländsk cataloganvänder du en anslutning till en datakälla som redan har definierats.

Om du vill skapa en utländsk catalogkan du använda Catalog Explorer eller köra kommandot CREATE FOREIGN CATALOG SQL i en Azure Databricks-notebook eller i SQL-frågeredigeringen.

Du kan också använda Databricks REST API eller Databricks CLI för att skapa en catalog. Se kommandona POST /api/2.1/unity-catalog/catalogs och Unity Catalog.

Behörigheter som krävs:CREATE CATALOG behörighet för metaarkivet och antingen ägarskap för anslutningen eller behörigheten CREATE FOREIGN CATALOG för anslutningen.

Catalog Explorer

  1. På din Azure Databricks-arbetsyta klickar du på ikonen CatalogCatalog för att öppna Catalog Explorer.

  2. Längst upp i fönstret Catalog klickar du på Lägg till- eller plusikonenikonen Lägg till och selectLägg till en catalog från menyn.

    Alternativt, från sidan Snabbåtkomst klickar du på knappen Catalogs och klickar sedan på knappen Skapa catalog.

  3. Följ anvisningarna för att skapa externa catalogs i Skapa catalogs.

SQL

Kör följande SQL-kommando i en notebook- eller SQL-frågeredigerare. Objekt inom hakparenteser är valfria. Ersätt platshållaren values:

  • <catalog-name>: Namn på catalog i Azure Databricks.
  • <connection-name>: Det anslutningsobjektet som anger datakällan, sökvägen och åtkomsten credentials.
  • <database-name>: Namnet på databasen som du vill spegla som en catalog i Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Skiftlägeskänsliga databasidentifierare

Fältet database i den utländska catalog relaterar till en Snowflake-databas identifier. Om Snowflake-databasen identifier inte är skiftlägeskänslig bevaras det hölje som du använder i den externa catalog<database-name>. Men om Snowflake-databasen identifier är skiftlägeskänslig måste du omsluta den externa catalog<database-name> med dubbla citattecken för att bevara ärendet.

Till exempel:

  • database konverteras till DATABASE

  • "database" konverteras till database

  • "database""" konverteras till database"

    Om du vill undvika ett dubbelt citattecken använder du ett annat dubbelt citattecken.

  • "database"" resulterar i ett fel eftersom det dubbla citattet inte är korrekt undantaget.

Mer information finns i Identifier krav i Snowflake-dokumentationen.

Pushdowns som stöds

Följande pushdowns stöds:

  • Filter
  • Projektioner
  • Limit
  • Kopplingar
  • Aggregat (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
  • Funktioner (strängfunktioner, matematiska funktioner, data, tidsstämpel och tidsstämpelfunktioner och andra diverse funktioner, till exempel Alias, Cast, SortOrder)
  • Windows-funktioner (DenseRank, Rank, RowNumber)
  • Sortering

Datatypsmappningar

När du läser från Snowflake till Spark mappar datatyper på följande sätt:

Snowflake-typ Spark-typ
decimal, tal, numeriskt Decimaltyp
bigint, byteint, int, heltal, smallint, tinyint IntegerType
float, float4, float8 FloatType
dubbel, dubbel precision, verklig DoubleType
char, character, string, text, time, varchar StringType
binary BinaryType
boolean BooleanType
datum DateType
datetime, tidsstämpel, timestamp_ltz, timestamp_ntz, timestamp_tz Tidsstämpeltyp

OAuth-begränsningar

Följande är OAuth-stödbegränsningar:

  • Snowflake OAuth-slutpunkten måste vara tillgänglig från Databricks-kontrollplanets IP-adresser. Se Utgående från Azure Databricks-kontrollplanet. Snowflake stöder konfiguration av nätverksprinciper på säkerhetsintegreringsnivå, vilket möjliggör en separat nätverksprincip som möjliggör direkt anslutning från Databricks-kontrollplanet till OAuth-slutpunkten för auktorisering.
  • Konfigurationsalternativen Proxy, Proxyvärd, Proxyport och Snowflake-roll stöds inte. Ange Snowflake-rollen som en del av OAuth-omfånget.

Begränsningar för privat PEM-nyckel

Följande är stödbegränsningar för privata PEM-nycklar:

  • Snowflake JDBC-drivrutinen stöder inte autentisering med krypterade privata nycklar. För att undvika fel generate en nyckel med alternativet -nocrypt tillagt på följande sätt:

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

Ytterligare resurser

Se följande artiklar i Snowflake-dokumentationen: