Dela via


Köra federerade frågor på Snowflake

Den här artikeln beskriver hur du konfigurerar 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 din Snowflake-databas med Lakehouse Federation måste du skapa följande i azure Databricks Unity Catalog-metaarkivet:

  • En anslutning till snowflake-databasen.
  • En utländsk katalog som speglar din Snowflake-databas i Unity Catalog så att du kan använda Unity Catalog-frågesyntax och verktyg för datastyrning för att hantera Azure Databricks-användaråtkomst till databasen.

Innan du börjar

Krav för arbetsyta:

  • Arbetsytan är 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 Standard eller dedikerat å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 i Unity Catalog-metaarkivet som är kopplat till arbetsytan.
  • Om du vill skapa en extern katalog måste du ha behörigheten CREATE CATALOG 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.

Kör CREATE SECURITY INTEGRATION i konsolen för Snowflake. Ersätt följande värden:

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

  • <workspace-url>: En URL för Azure Databricks-arbetsytan. Du måste ange OAUTH_REDIRECT_URI till https://<workspace-url>/login/oauth/snowflake.html, där <workspace-url> är den unika URL:en för Azure Databricks-arbetsytan där du skapar Snowflake-anslutningen.

  • <duration-in-seconds>: En tidsperiod för förnyelse-token.

    Viktigt!

    OAUTH_REFRESH_TOKEN_VALIDITY är ett anpassat fält som är inställt på 90 dagar som standard. När uppdateringstoken har upphört att gälla måste du autentisera anslutningen igen. Ange en rimlig tidslängd för fältet.

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 Hur du: Genererar och använder en OAuth-token med Snowflake OAuth för anpassade klienter i Snowflake Knowledge Base.

Skapa en anslutning

En anslutning anger en sökväg och autentiseringsuppgifter 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

Katalogutforskaren

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

  2. Längst upp i fönstret Catalog, klicka på ikonen Lägg till eller plusLägg till och välj Lägg till en anslutning från menyn.

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

  3. På sidan Anslutningsgrunder i guiden Konfigurera anslutning, ange ett användarvänligt Anslutningsnamn.

  4. Välj en Anslutningstyp för Snowflake.

  5. För autentiseringstypväljer du Username 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 dina OAuth-autentiseringsuppgifter.

    • (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 lyckad inloggning dirigeras du tillbaka till guiden Konfigurera anslutning.

  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å välja Använd 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å välja Använd 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. catalog basics-sidan anger du ett namn för den externa katalogen. En extern katalog speglar en databas i ett externt datasystem så att du kan köra frågor mot 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 katalog.

  15. På sidan Access väljer du de arbetsytor där användarna kan komma åt katalogen som du skapade. Du kan välja Alla arbetsytor har åtkomsteller klicka på Tilldela till arbetsytor, välj arbetsytor och klicka sedan på Tilldela.

  16. Ändra ägaren för till, som ska kunna hantera åtkomsten till alla objekt i katalogen. Börja skriva en huvudprincip i textrutan och klicka sedan på huvudprincipen i resultaten.

  17. Bevilja privilegier i katalogen. Klicka på Tillåt:

    1. Ange principals vem som ska ha åtkomst till objekt i katalogen. Börja skriva en huvudprincip i textrutan och klicka sedan på huvudprincipen i resultaten.
    2. Välj förinställningarna för privilegier som ska beviljas varje huvudaktör . Alla kontoanvändare beviljas BROWSE som standard.
      • Välj dataläsare från den nedrullningsbara menyn för att bevilja read behörigheter för objekt i katalogen.
      • Välj dataredigeraren från den nedrullningsbara menyn för att bevilja read och modify behörigheter för objekt i katalogen.
      • Välj de behörigheter som ska beviljas manuellt.
    3. Klicka på Tillåt.
  18. Klicka på Nästa.

  19. På sidan metadata anger du taggar för nyckel/värde-par. Mer information finns i Tillämpa taggar på skyddsbara objekt i Unity Catalog.

  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 klartextsträngar för känsliga värden som autentiseringsuppgifter. 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 utländsk katalog

Anteckning

Om du använder användargränssnittet för att skapa en anslutning till datakällan inkluderas skapande av utländsk katalog och du kan hoppa över det här steget.

En extern katalog speglar en databas i ett externt datasystem så att du kan köra frågor mot och hantera åtkomst till data i databasen med hjälp av Azure Databricks och Unity Catalog. För att skapa en extern katalog använder du en anslutning till en datakälla som redan har definierats.

För att skapa en utländsk katalog kan du använda Catalog Explorer eller SQL-kommandot CREATE FOREIGN CATALOG i en Azure Databricks-notebook eller i SQL-frågeredigeraren. Du kan också använda Databricks REST API eller Databricks CLI för att skapa en katalog. Se kommandona POST /api/2.1/unity-catalog/catalogs och Unity Catalog.

Behörigheter som krävs:CREATE CATALOG tillstånd för metaarkivet och antingen ägarskap av anslutningen eller rättigheten CREATE FOREIGN CATALOG för anslutningen.

Katalogutforskaren

  1. På din Azure Databricks-arbetsyta klickar du på ikonen KatalogCatalog för att öppna Katalogutforskaren.

  2. Längst upp i panelen Catalog klickar du på Lägg till- eller plusikonen och väljer Lägg till en katalog från menyn.

    Från sidan Snabbåtkomst klickar du på knappen Kataloger och klickar sedan på knappen Skapa katalog.

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

SQL

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

  • <catalog-name>: Namn på katalogen i Azure Databricks.
  • <connection-name>: Det anslutningsobjektet som anger autentiseringsuppgifterna för datakälla, sökväg och åtkomst.
  • <database-name>: Namnet på databasen som du vill spegla som en katalog 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 externa katalogen mappar till en Snowflake-databasidentifierare. Om Snowflake-databasidentifieraren inte är skiftlägeskänslig bevaras det hölje som du använder i den externa katalogen <database-name>. Men om Snowflake-databasidentifieraren är skiftlägeskänslig måste du omsluta den externa katalogen <database-name> med dubbla citattecken för att bevara ärendet.

Till exempel:

  • database konverteras till DATABASE

  • "database" konverteras till database

  • "database""" konverteras till database"

    För att undvika ett dubbelt citattecken, använd ett annat dubbelt citattecken.

  • "database"" resulterar i ett fel eftersom det dubbla citattecknet inte är korrekt escapet.

Mer information finns i Identifierarkrav i Snowflake-dokumentationen.

Pushdowns som stöds

Följande pushdowns stöds:

  • Filter
  • Projektioner
  • Gräns
  • Sammanfogningar
  • Aggregat (Medelvärde, Korrel, KovariansPop, KovariansSamp, Antal, Max, Min, StdavvikelsePop, StdavvikelseSamp, Summa, VariansPop, VariansSamp)
  • Funktioner (strängfunktioner, matematiska funktioner, data- och tids- och tidsstämpelfunktioner, och andra olika 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 enligt följande:

Snöflingetyp Sparktyp
decimal, nummer, siffra Decimaltyp
bigint, byteint, int, integer, smallint, tinyint IntegerType
float, float4, float8 Flyttalstyp
dubbel, dubbelprecision, reellt DoubleType
char, tecken, sträng, text, tid, varchar StringType
binär BinaryType
boolean BooleanType
datum Datatyp
datum och tid, 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.
  • Använd proxy, Proxyvärd, Proxyport och konfigurationsalternativen för 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. Om du vill undvika fel genererar du en nyckel med -nocrypt tillagt, enligt följande:

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

Ytterligare resurser

Se följande artiklar i Snowflake-dokumentationen: