Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här sidan beskriver hur du konfigurerar Lakehouse Federation för att köra federerade frågor på BigQuery-data som inte hanteras av Azure Databricks. Mer information om Lakehouse Federation finns i Ansluta till externa databaser och kataloger
Om du vill ansluta till din BigQuery-databas med Lakehouse Federation måste du skapa följande i metaarkivet i Azure Databricks Unity Catalog (arbetsytor som skapats efter den 9 november 2023 har redan ett Unity Catalog-metaarkiv etablerat automatiskt):
- En anslutning till din BigQuery-databas.
- En utländsk katalog som speglar din BigQuery-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
Om du vill köra federerade frågor på BigQuery skapar du en anslutning till BigQuery och en extern katalog som speglar din BigQuery-databas. Sedan kan du fråga och hantera BigQuery-data med hjälp av Azure Databricks och Unity Catalog. Ytterligare behörighetskrav anges i varje aktivitetsbaserat avsnitt som följer.
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 16.1 eller senare och standard- eller dedikerat åtkomstläge (tidigare delat och enskild användare).
- SQL-lager måste vara Pro eller Serverless.
Behörighetskrav:
- Om du vill skapa en anslutning måste du ha behörigheten
CREATE CONNECTIONpå Unity Catalog-metaarkivet som är kopplat till arbetsytan. - Om du vill skapa en extern katalog måste du ha behörigheten
CREATE CATALOGi metaarkivet och antingen vara ägare till anslutningen eller haCREATE FOREIGN CATALOGbehörighet för anslutningen.
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
På din Azure Databricks-arbetsyta klickar du på
Katalog.
Längst upp i fönstret Katalog klickar du på
lägg till och väljer Skapa en anslutning på menyn.På sidan Anslutningsgrunder i guiden Ställ in anslutning, ange ett användarvänligt Anslutningsnamn.
Välj en anslutningstyp för Google BigQueryoch klicka sedan på Nästa.
På sidan Authentication anger du json-filen för Google-tjänstkontonyckel för din BigQuery-instans.
Det här är ett rå JSON-objekt som används för att ange BigQuery-projektet och tillhandahålla autentisering. Du kan generera det här JSON-objektet och ladda ned det från informationssidan för tjänstkontot i Google Cloud under NYCKLAR. Tjänstkontot måste ha rätt behörigheter som beviljats i BigQuery, inklusive BigQuery User och BigQuery Data Viewer. Följande är ett exempel.
{ "type": "service_account", "project_id": "PROJECT_ID", "private_key_id": "KEY_ID", "private_key": "PRIVATE_KEY", "client_email": "SERVICE_ACCOUNT_EMAIL", "client_id": "CLIENT_ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL", "universe_domain": "googleapis.com" }Kommentar
Google anger URL-värdena i tjänstkontots JSON och de kan variera beroende på konto. Använd dem exakt som de visas i den nedladdade JSON-filen. Om du konfigurerar regler för nätverksproxy för Azure Databricks att nå Google-API:er tillåter du både
https://accounts.google.comochhttps://oauth2.googleapis.com.(Valfritt) Ange Project ID för din BigQuery-instans:
Det här är namnet på BigQuery-projektet som används för fakturering av alla sökfrågor som körs under den här anslutningen. Standardinställningen är projekt-ID:t för ditt tjänstkonto. Tjänstkontot måste ha rätt behörigheter för det här projektet i BigQuery, inklusive BigQuery-användare. Ytterligare datauppsättning som används för att lagra temporära tabeller av BigQuery kan skapas i det här projektet.
(Valfritt) Lägg till en kommentar.
Klicka på Skapa anslutning.
På 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.
(Valfritt) Klicka på Testa anslutningen för att bekräfta att den fungerar.
Klicka på Skapa katalog.
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.
Ändra ägare vem som ska kunna hantera åtkomst till alla objekt i katalogen. Börja skriva en huvudanvändare i textrutan och klicka sedan på huvudanvändaren i de returnerade resultaten.
Bevilja privilegier i katalogen. Klicka på Bevilja:
- Ange principals vem som ska ha åtkomst till objekt i katalogen. Börja skriva en huvudanvändare i textrutan och klicka sedan på huvudanvändaren i de returnerade resultaten.
- Välj Privilege-förinställningar att bevilja till varje användare. Alla kontoanvändare beviljas
BROWSEsom standard.- Välj dataläsare från den nedrullningsbara menyn för att bevilja
readbehörigheter för objekt i katalogen. - Välj dataredigeraren från den nedrullningsbara menyn för att bevilja
readochmodifybehörigheter för objekt i katalogen. - Välj de behörigheter som ska beviljas manuellt.
- Välj dataläsare från den nedrullningsbara menyn för att bevilja
- Klicka på Bevilja.
Klicka på Nästa.
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.
(Valfritt) Lägg till en kommentar.
Klicka på Spara.
SQL
Kör följande kommando i en notebook-fil eller Databricks SQL-frågeredigeraren. Ersätt <GoogleServiceAccountKeyJson> med ett rå JSON-objekt som anger BigQuery-projektet och ger autentisering. Du kan generera det här JSON-objektet och ladda ned det från informationssidan för tjänstkontot i Google Cloud under NYCKLAR. Tjänstkontot måste ha rätt behörigheter som beviljats i BigQuery, inklusive BigQuery-användare och BigQuery Data Viewer. Ett exempel på ett JSON-objekt finns på fliken Catalog Explorer på den här sidan.
CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
GoogleServiceAccountKeyJson '<GoogleServiceAccountKeyJson>'
);
Databricks rekommenderar att du använder hemligheter i stället för klartextsträngar för känsliga värden som autentiseringsuppgifter. Till exempel:
CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
GoogleServiceAccountKeyJson secret ('<secret-scope>','<secret-key-user>')
)
Information om hur du konfigurerar hemligheter finns i Hemlighetshantering.
Skapa en utländsk katalog
Kommentar
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änd en anslutning till den datakälla som redan definierats.
Om du vill skapa en extern katalog kan du använda Catalog Explorer eller CREATE FOREIGN CATALOG i en Azure Databricks-notebook eller Databricks 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 eller 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.
Katalogutforskaren
På din Azure Databricks-arbetsyta klickar du på
Katalog för att öppna Katalogutforskaren.
Längst upp i fönstret Catalog klickar du på ikonen
ikonen Lägg till och väljer Lägg till en katalog på menyn.Från sidan Snabbåtkomst klickar du på knappen Kataloger och klickar sedan på knappen Skapa katalog.
(Valfritt) Ange följande katalogegenskap:
Data Project ID: Ett namn på BigQuery-projektet som innehåller data som ska mappas till den här katalogen. Standardvärdet för det faktureringsprojekt-ID som angetts på anslutningsnivå.
Följ anvisningarna för att skapa externa kataloger i Skapa kataloger.
(Valfritt) Ange följande katalogalternativ:
-
Materialization Dataset: Ett valfritt BigQuery-datauppsättningsnamn som ska användas för materialisering av frågeresultat. Om det inte anges etableras en datauppsättning för materialisering automatiskt när det behövs. Mer information finns i Materialisering . -
BIGNUMERIC Default Scale: Ett valfritt skalningsvärde för att mappa BigQueryBIGNUMERICtill SparkDecimalType. Mer information finns i Datatypsmappningar .
-
SQL
Kör följande SQL-kommando i en notebook-fil eller Databricks SQL-redigeraren. 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. -
<data-project-id>: Ett valfritt projekt-ID för BigQuery-projektet som innehåller data som ska mappas till den här katalogen. Om inget anges används det projekt-ID som angetts för anslutningen, följt av projekt-ID för tjänstkontot. -
<dataset-name>: Ett valfritt BigQuery-datauppsättningsnamn som ska användas för materialisering av frågeresultat. Om det inte anges etableras en datauppsättning för materialisering automatiskt när det behövs. Mer information finns i Materialisering . -
<scale>: Ett valfritt skalningsvärde [0,38] för att mappa BigQueryBIGNUMERICtill SparkDecimalType(38, scale). Standard är38. Mer information finns i Datatypsmappningar .
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
[OPTIONS (dataProjectId '<data-project-id>', materializationDataset '<dataset-name>', bigNumericDefaultScale '<scale>')];
Materialisering
Till skillnad från andra federationsanslutningsprogram använder BigQuery-anslutningsappen BigQuery Storage-API:et i stället för JDBC för bättre prestanda. Azure Databricks kan läsa från BigQuery direkt från lagring eller med hjälp av en materialiserad datauppsättning. Direktläsningar ger bättre prestanda för stora genomsökningar och stöd för filter- och projektionsnedtryckningar. Materialisering pushar ytterligare operationer (begränsningar, aggregeringar, kopplingar, sortering) till BigQuerys beräkningskapacitet innan de strömmas till Azure Databricks.
Vyer och externa tabeller materialiseras alltid. Alla andra läsningar använder direkt lagring utan materialisering som standard.
Överväg att aktivera materialisering om du behöver avancerade optimeringar, läser små resultatuppsättningar från stora datamängder eller läser data mellan olika regioner. Materialisering i BigQuery medför ytterligare beräkningsavgifter. Ange följande Spark-konfiguration för att aktivera materialisering:
SET spark.databricks.bigquery.enableMaterialization = true;
Kommentar
Du kan bara ange spark.databricks.bigquery.enableMaterialization i ett kvalificerat kluster. Se Innan du börjar för beräkningskrav. Att aktivera materialisering stöds inte på SQL-datalager (Pro eller Serverless).
Som standard etableras en materialiseringsdatauppsättning automatiskt när det behövs. Du kan ange en anpassad datauppsättning med hjälp av katalogalternativet materializationDataset när du skapar eller ändrar den externa katalogen. Detta är användbart om tjänstkontot inte har behörighet att skapa datauppsättningar eller om du vill styra var temporära materialiseringstabeller lagras. Till exempel:
CREATE FOREIGN CATALOG my_catalog USING CONNECTION my_bq_connection
OPTIONS (materializationDataset 'my_materialization_dataset');
Om du vill uppdatera en befintlig katalog kör du:
ALTER CATALOG my_catalog OPTIONS (materializationDataset 'my_materialization_dataset');
Läs BigQuerys externa tabeller
Du kan köra frågor mot externa BigQuery-tabeller, inklusive biglake- och molnlagringsbaserade tabeller, direkt från ditt arbetsflöde. Dessa tabeller materialiseras automatiskt innan frågan körs, vilket ger full åtkomst till deras innehåll utan ytterligare konfiguration.
Externa tabeller som stöds
Externa tabeller för BigLake och molnlagring stöds.
- BigLake-tabeller refererar till data som lagras i molnlagring och innehåller detaljerad åtkomstkontroll som hanteras via BigQuery.
- Externa tabeller för molnlagring refererar till filer direkt med hjälp av URI:er.
När du frågar dessa tabeller materialiserar systemet data så att frågan körs på BigQuerys inbyggda lagring, med fullt stöd för SQL-funktioner och optimal prestanda.
Mer information finns i BigQuery-dokumentationen för BigLake-tabeller och externa Cloud Storage-tabeller.
Pushdowns som stöds
Stöd för pushdown beror på om materialisering är aktiverad. Vissa åtgärder skickas automatiskt ned till BigQuerys beräkningslager, medan andra kräver materialisering.
Följande pushdowns stöds utan materialisering:
- Filter som skickas vidare som radbegränsningar i BigQuery Storage API (endast enkla predikat – jämförelser mellan kolumner och literaler,
IN,IS NULL,LIKEsamt kombinationer av dessa medANDellerOR). Filter som refererar till operatorerna eller funktionerna som anges nedan kräver materialisering. - Projektioner
Följande ytterligare pushdowns stöds med materialisering aktiverat. Med materialisering kompileras filter till SQL i stället för BigQuery Storage API-radbegränsningar, så att de dessutom kan innehålla följande operatorer och funktioner:
- Gräns
- Förskjutning, när det används med begränsning
- Aggregeringar
- Sortering, när den används med gräns
- Kopplingar (Databricks Runtime 16.1 eller senare)
- Jämförelseoperatorer, booleska operatorer, bitvisa operatorer och aritmetiska operatorer (aritmetiska operatorer pushas ned endast när ANSI-läget är aktiverat)
- Matematiska funktioner (
ABS,FLOOR) – partiellt stöd, endast filteruttryck - Strängfunktioner (
CONCAT, ,UPPERLOWER,LENGTH,TRIM,LTRIM, )RTRIM– partiellt stöd, endast filteruttryck -
Contains,Startswith,Endswith - Funktioner för datum, tid och tidsstämpel (
DATE_TRUNCochEXTRACTför år, kvartal, månad, dag, timme och minut) – partiellt stöd, endast filteruttryck - Diverse funktioner (
COALESCE, ,CastCASE WHEN,IFoch åtkomst till matriselement) – partiellt stöd, endast filteruttryck
Följande pushdowns stöds inte:
- Fönsterfunktioner
Datatypsmappningar
Följande tabell visar mappningen av datatyper från BigQuery till Spark.
| BigQuery-typ | Spark-typ |
|---|---|
BIGNUMERIC, NUMERIC |
DecimalType* |
INT64 |
LongType |
FLOAT64 |
DoubleType |
ARRAY, GEOGRAPHY, INTERVAL, JSON, STRING, STRUCT |
VarcharType |
BYTES |
BinaryType |
BOOL |
BooleanType |
DATE |
DateType |
DATETIME |
TimestampNTZType, förutom StringType i Databricks Runtime 16.4 till 17.x** |
TIME, TIMESTAMP |
TimestampType/TimestampNTZType |
Alla typer med REPEATED läge |
ArrayType av motsvarande Spark-typ*** |
* BigQuery BIGNUMERIC har en precision på upp till 76 siffror, vilket överskrider Sparks maximala DecimalType precision på 38. Som standardinställning motsvarar BIGNUMERICDecimalType(38, 38). För att konfigurera skalan, använd katalogalternativet bigNumericDefaultScale. Tillåtna värden är [0, 38]. Till exempel bigNumericDefaultScale = '10' mappar BIGNUMERIC till DecimalType(38, 10). BigQuery NUMERIC mappar till sin deklarerade precision och skala.
** Anslutningsappen började använda BigQuery Storage-API:et i Databricks Runtime 16.4. Från Databricks Runtime 16.4 till 17.x mappade Lagrings-API:et BigQuery DATETIME till Spark StringType i stället för TimestampNTZType. Databricks Runtime 18.0 återställer mappningen TimestampNTZType .
I BigQuery mappar en kolumn med REPEATED läge till en Spark ArrayType som innehåller motsvarande Spark-typ. Till exempel mappar en BigQuery-kolumn REPEATED STRING till ArrayType(VarcharType)och en BigQuery-kolumn REPEATED INT64 till ArrayType(LongType).
När du läser från BigQuery mappas BigQuery Timestamp till Spark TimestampType om preferTimestampNTZ = false (förvald). BigQuery Timestamp kopplas till TimestampNTZType om preferTimestampNTZ = true.
Felsökning
I följande avsnitt beskrivs ett vanligt fel och dess lösning när du använder BigQuery-anslutningsappen.
Error creating destination table using the following query [<query>]
Vanlig orsak: Tjänstkontot som används av anslutningen, har inte rollen "BigQuery User".
Upplösning:
- Bevilja rollen BigQuery-användare till det tjänstkonto som används av anslutningen. Den här rollen krävs för att skapa den materialiseringsdatauppsättning som tillfälligt lagrar frågeresultat.
- Kör frågan igen.