Google BigQuery
I den här artikeln beskrivs hur du läser från och skriver till Google BigQuery-tabeller i Azure Databricks.
Viktigt!
De konfigurationer som beskrivs i den här artikeln är Experimentella. Experimentella funktioner tillhandahålls som de är och stöds inte av Databricks via teknisk kundsupport. För att få fullständigt stöd för frågefederation bör du i stället använda Lakehouse Federation, vilket gör att dina Azure Databricks-användare kan dra nytta av Unity Catalog-syntaxen och datastyrningsverktygen.
Du måste ansluta till BigQuery med hjälp av nyckelbaserad autentisering.
Behörigheter
Dina projekt måste ha specifika Google-behörigheter för att läsa och skriva med BigQuery.
Kommentar
I den här artikeln beskrivs bigquery-materialiserade vyer. Mer information finns i Google-artikeln Introduktion till materialiserade vyer. Mer information om annan BigQuery-terminologi och BigQuery-säkerhetsmodellen finns i Google BigQuery-dokumentationen.
Läsning och skrivning av data med BigQuery beror på två Google Cloud-projekt:
- Projekt (
project
): ID:t för Google Cloud-projektet som Azure Databricks läser eller skriver BigQuery-tabellen från. - Överordnat projekt (
parentProject
): ID:t för det överordnade projektet, som är Google Cloud Project-ID:t som ska faktureras för läsning och skrivning. Ställ in detta på Google Cloud-projektet som är associerat med Google-tjänstkontot som du ska generera nycklar för.
Du måste uttryckligen ange project
värdena och parentProject
i koden som har åtkomst till BigQuery. Använd kod som liknar följande:
spark.read.format("bigquery") \
.option("table", table) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.load()
Vilka behörigheter som krävs för Google Cloud-projekten beror på om project
och parentProject
är desamma. I följande avsnitt visas de behörigheter som krävs för varje scenario.
Behörigheter som krävs om project
och parentProject
matchar
Om ID:na för din project
och parentProject
är desamma använder du följande tabell för att fastställa minsta behörighet:
Azure Databricks-uppgift | Google-behörigheter som krävs i projektet |
---|---|
Läsa en BigQuery-tabell utan materialiserad vy | project I projektet:– BigQuery-lässessionsanvändare – BigQuery Data Viewer (Du kan också bevilja detta på datauppsättning/tabellnivå i stället för projektnivå) |
Läsa en BigQuery-tabell med materialiserad vy | project I projektet:– BigQuery-jobbanvändare – BigQuery-lässessionsanvändare – BigQuery Data Viewer (Du kan också bevilja detta på datauppsättning/tabellnivå i stället för projektnivå) I materialiseringsprojektet: – BigQuery Data Editor |
Skriva en BigQuery-tabell | project I projektet:– BigQuery-jobbanvändare – BigQuery Data Editor |
Behörigheter som krävs om project
och parentProject
är olika
Om ID:na för din project
och parentProject
är olika använder du följande tabell för att fastställa minsta behörigheter:
Azure Databricks-uppgift | Google-behörigheter krävs |
---|---|
Läsa en BigQuery-tabell utan materialiserad vy | parentProject I projektet:– BigQuery-lässessionsanvändare project I projektet:– BigQuery Data Viewer (Du kan också bevilja detta på datauppsättning/tabellnivå i stället för projektnivå) |
Läsa en BigQuery-tabell med materialiserad vy | parentProject I projektet:– BigQuery-lässessionsanvändare – BigQuery-jobbanvändare project I projektet:– BigQuery Data Viewer (Du kan också bevilja detta på datauppsättning/tabellnivå i stället för projektnivå) I materialiseringsprojektet: – BigQuery Data Editor |
Skriva en BigQuery-tabell | parentProject I projektet:– BigQuery-jobbanvändare project I projektet:– BigQuery Data Editor |
Steg 1: Konfigurera Google Cloud
Aktivera BigQuery Storage-API:et
BigQuery Storage-API:et är aktiverat som standard i nya Google Cloud-projekt där BigQuery är aktiverat. Men om du har ett befintligt projekt och BigQuery Storage-API:et inte är aktiverat följer du stegen i det här avsnittet för att aktivera det.
Du kan aktivera BigQuery Storage-API:et med hjälp av Google Cloud CLI eller Google Cloud Console.
Aktivera BigQuery Storage-API:et med Google Cloud CLI
gcloud services enable bigquerystorage.googleapis.com
Aktivera BigQuery Storage-API:et med Hjälp av Google Cloud Console
Klicka på API:er och tjänster i det vänstra navigeringsfönstret.
Klicka på knappen AKTIVERA APIS OCH TJÄNSTER.
Skriv
bigquery storage api
i sökfältet och välj det första resultatet.Kontrollera att BigQuery Storage-API:et är aktiverat.
Skapa ett Google-tjänstkonto för Azure Databricks
Skapa ett tjänstkonto för Azure Databricks-klustret. Databricks rekommenderar att du ger det här tjänstkontot de minsta behörigheter som krävs för att utföra sina uppgifter. Se BigQuery-roller och behörigheter.
Du kan skapa ett tjänstkonto med hjälp av Google Cloud CLI eller Google Cloud Console.
Skapa ett Google-tjänstkonto med Google Cloud CLI
gcloud iam service-accounts create <service-account-name>
gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.user \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.dataEditor \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"
Skapa nycklarna för ditt tjänstkonto:
gcloud iam service-accounts keys create --iam-account \
"<service-account-name>@<project-name>.iam.gserviceaccount.com" \
<project-name>-xxxxxxxxxxx.json
Skapa ett Google-tjänstkonto med Google Cloud Console
Så här skapar du kontot:
Klicka på IAM och Admin i det vänstra navigeringsfönstret.
Klicka på Tjänstkonton.
Klicka på + SKAPA TJÄNSTKONTO.
Ange namnet och beskrivningen för tjänstkontot.
Klicka på SKAPA.
Ange roller för ditt tjänstkonto. I listrutan Välj en roll skriver
BigQuery
du och lägger till följande roller:Klicka på FORTSÄTT.
Klicka på KLAR.
Så här skapar du nycklar för ditt tjänstkonto:
I listan med tjänstkonton klickar du på ditt nyligen skapade konto.
I avsnittet Nycklar väljer du KNAPPEN LÄGG TILL NYCKEL > Skapa ny nyckel .
Acceptera JSON-nyckeltypen.
Klicka på SKAPA. JSON-nyckelfilen laddas ned till datorn.
Viktigt!
JSON-nyckelfilen som du genererar för tjänstkontot är en privat nyckel som endast ska delas med behöriga användare, eftersom den styr åtkomsten till datauppsättningar och resurser i ditt Google Cloud-konto.
Skapa en GCS-bucket (Google Cloud Storage) för tillfällig lagring
För att kunna skriva data till BigQuery behöver datakällan åtkomst till en GCS-bucket.
Klicka på Lagring i det vänstra navigeringsfönstret.
Klicka på SKAPA BUCKET.
Konfigurera bucketinformationen.
Klicka på SKAPA.
Klicka på fliken Behörigheter och Lägg till medlemmar.
Ange följande behörigheter för tjänstkontot i bucketen.
Klicka på SPARA.
Steg 2: Konfigurera Azure Databricks
Om du vill konfigurera ett kluster för åtkomst till BigQuery-tabeller måste du ange JSON-nyckelfilen som en Spark-konfiguration. Använd ett lokalt verktyg för att Base64-koda din JSON-nyckelfil. I säkerhetssyfte använder du inte ett webbaserat verktyg eller fjärrverktyg som kan komma åt dina nycklar.
När du konfigurerar klustret:
På fliken Spark-konfiguration lägger du till följande Spark-konfiguration. Ersätt <base64-keys>
med strängen i din Base64-kodade JSON-nyckelfil. Ersätt de andra objekten inom hakparenteser (till exempel <client-email>
) med värdena för dessa fält från JSON-nyckelfilen.
credentials <base64-keys>
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key <private-key>
spark.hadoop.fs.gs.auth.service.account.private.key.id <private-key-id>
Läsa och skriva till en BigQuery-tabell
Om du vill läsa en BigQuery-tabell anger du
df = spark.read.format("bigquery") \
.option("table",<table-name>) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.load()
Om du vill skriva till en BigQuery-tabell anger du
df.write.format("bigquery") \
.mode("<mode>") \
.option("temporaryGcsBucket", "<bucket-name>") \
.option("table", <table-name>) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.save()
där <bucket-name>
är namnet på bucketen som du skapade i Skapa en GCS-bucket (Google Cloud Storage) för tillfällig lagring. Mer information om krav för <project-id>
och <parent-id>
värden finns i Behörigheter.
Skapa en extern tabell från BigQuery
Viktigt!
Den här funktionen stöds inte av Unity Catalog.
Du kan deklarera en ohanterad tabell i Databricks som läser data direkt från BigQuery:
CREATE TABLE chosen_dataset.test_table
USING bigquery
OPTIONS (
parentProject 'gcp-parent-project-id',
project 'gcp-project-id',
temporaryGcsBucket 'some-gcp-bucket',
materializationDataset 'some-bigquery-dataset',
table 'some-bigquery-dataset.table-to-copy'
)
Python Notebook-exempel: Läs in en Google BigQuery-tabell i en DataFrame
Följande Python-notebook-fil läser in en Google BigQuery-tabell i en Azure Databricks DataFrame.
Google BigQuery Python-exempelanteckningsbok
Scala Notebook-exempel: Läs in en Google BigQuery-tabell i en DataFrame
Följande Scala-notebook-fil läser in en Google BigQuery-tabell i en Azure Databricks DataFrame.