Dela via


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

  1. Klicka på API:er och tjänster i det vänstra navigeringsfönstret.

  2. Klicka på knappen AKTIVERA APIS OCH TJÄNSTER.

    Google Enable Services

  3. Skriv bigquery storage api i sökfältet och välj det första resultatet.

    Google BigQuery Storage

  4. Kontrollera att BigQuery Storage-API:et är aktiverat.

    Google BigQuery

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:

  1. Klicka på IAM och Admin i det vänstra navigeringsfönstret.

  2. Klicka på Tjänstkonton.

  3. Klicka på + SKAPA TJÄNSTKONTO.

  4. Ange namnet och beskrivningen för tjänstkontot.

    Skapa tjänstkonto för Google

  5. Klicka på SKAPA.

  6. Ange roller för ditt tjänstkonto. I listrutan Välj en roll skriver BigQuery du och lägger till följande roller:

    Google-behörigheter

  7. Klicka på FORTSÄTT.

  8. Klicka på KLAR.

Så här skapar du nycklar för ditt tjänstkonto:

  1. I listan med tjänstkonton klickar du på ditt nyligen skapade konto.

  2. I avsnittet Nycklar väljer du KNAPPEN LÄGG TILL NYCKEL > Skapa ny nyckel .

    Google Create Key

  3. Acceptera JSON-nyckeltypen.

  4. 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.

  1. Klicka på Lagring i det vänstra navigeringsfönstret.

  2. Klicka på SKAPA BUCKET.

    Google Create Bucket

  3. Konfigurera bucketinformationen.

    Information om Google Bucket

  4. Klicka på SKAPA.

  5. Klicka på fliken Behörigheter och Lägg till medlemmar.

  6. Ange följande behörigheter för tjänstkontot i bucketen.

    Behörigheter för Google Bucket

  7. 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

Hämta notebook-fil

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.

Google BigQuery Scala-exempelanteckningsbok

Hämta notebook-fil