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 sekundär 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 ditt Databricks Runtime-kluster eller SQL-lager till måldatabassystemen. Se Nätverksrekommendationer för Lakehouse Federation.
  • Azure Databricks-kluster måste använda Databricks Runtime 13.3 LTS eller senare och delat eller enanvändarläge.
  • SQL-lager måste vara Pro eller Serverless 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 behörigheten CREATE CONNECTION på Unity Catalog-metaarkivet som är kopplat till arbetsytan.
  • Om du vill skapa en extern katalog måste du ha behörigheten CREATE CATALOG för metaarkivet och antingen vara ägare till anslutningen eller ha behörighet för CREATE FOREIGN CATALOG 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. Mer information finns i följande avsnitt.

(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 interna 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 variabelvä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 tidslängd för uppdateringstoken.

    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;

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 CREATE CONNECTION SQL-kommandot 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 POST /api/2.1/unity-catalog/connections och Unity Catalog-kommandon.

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å Katalogikon Katalog.

  2. Längst upp i fönstret Katalog klickar du påLägg till eller plusikon ikonen Lägg till och väljer Lägg till en anslutning på menyn.

    Du kan också klicka på knappen Externa data >på sidan Snabbåtkomst, gå till fliken Anslutningar och klicka på Skapa anslutning.

  3. Ange ett användarvänligt anslutningsnamn.

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

  5. Ange följande anslutningsegenskaper för ditt Snowflake-lager.

    • Autentiseringstyp: OAuth eller Username and password
    • Värd: Till exempel snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • Port: Till exempel 443
    • Snowflake-lager: Till exempel my-snowflake-warehouse
    • Användare: Till exempel snowflake-user
    • (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 din 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 din säkerhetsintegrering.
    • (OAuth) Klientomfång: refresh_token session:role:<role-name>. Ange den Snowflake-roll som ska användas i <role-name>.
    • (Användarnamn och lösenord) Lösenord: Till exempel password123

    (OAuth) Du uppmanas att logga in på Snowflake med dina OAuth-autentiseringsuppgifter.

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

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

  8. Klicka på Skapa.

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-hemligheter 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 sekundär katalog

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. Om du vill skapa en sekundär katalog använder du en anslutning till datakällan som redan har definierats.

Om du vill skapa en sekundär katalog kan du använda Catalog Explorer eller CREATE FOREIGN CATALOG SQL-kommandot i en Azure Databricks-notebook-fil eller SQL-frågeredigeraren.

Kommentar

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

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.

Katalogutforskaren

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

  2. Längst upp i fönstret Katalog klickar du på Lägg till eller plusikon ikonen Lägg till och väljer Lägg till en katalog på menyn.

    Du kan också klicka på knappen Kataloger på sidan Snabbåtkomst och sedan på knappen Skapa katalog.

  3. Följ anvisningarna för att skapa utländska 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>: Anslutningsobjektet som anger autentiseringsuppgifterna för datakälla, sökväg och åtkomst.
  • <database-name>: Namnet på den databas 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 för den utländska 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"

    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 Krav för identifierare i Snowflake-dokumentationen.

Pushdowns som stöds

Följande pushdowns stöds:

  • Filter
  • Projektioner
  • Gräns
  • 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.

Ytterligare resurser