穀歌BigQuery

本文介紹如何在Databricks中讀取和寫入穀歌BigQuery表。

必須使用基於密鑰的身份驗證連接BigQuery。

需求

磚運行時

運行Databricks Runtime 7.3 LTS或以上版本的Databricks集群。

權限

您的項目必須具有特定的穀歌權限才能使用BigQuery進行讀寫。

請注意

本文討論BigQuery實體化視圖。詳細信息請參見穀歌文章物化視圖的介紹.要了解其他BigQuery術語和BigQuery安全模型,請參見穀歌BigQuery文檔

使用BigQuery讀寫數據依賴於兩個穀歌雲項目:

  • 項目(項目:穀歌Cloud項目的ID, Databricks從該項目讀取或寫入BigQuery表。

  • 父項目(parentProject:父項目的ID,它是用於讀寫的穀歌雲項目ID。將此設置為與您將為其生成密鑰的穀歌服務帳戶關聯的穀歌雲項目。

方法必須顯式提供項目而且parentProject訪問BigQuery的代碼中的值。使用類似如下的代碼:

火花格式“bigquery”選項“表”表格選項“項目”<項目-id>選項“parentProject”<-項目-id>負載()

穀歌雲項目所需的權限取決於是否項目而且parentProject都是一樣的。下麵幾節列出了每個場景所需的權限。

需要的權限項目而且parentProject匹配

如果您的id項目而且parentProject均相同,使用下表確定最小權限:

磚的任務

項目中需要穀歌權限

讀取一個沒有物化視圖的BigQuery表

項目項目:

  • BigQuery讀會話用戶

  • BigQuery數據查看器(可選在數據集/表級別授予,而不是在項目級別授予)

讀取BigQuery表物化視圖

項目項目:

  • BigQuery作業用戶

  • BigQuery讀會話用戶

  • BigQuery數據查看器(可選在數據集/表級別授予,而不是在項目級別授予)

在實體化項目中:

  • BigQuery數據編輯器

寫一個BigQuery表

項目項目:

  • BigQuery作業用戶

  • BigQuery數據編輯器

需要的權限項目而且parentProject是不同的

如果您的id項目而且parentProject均不同,使用下表確定最小權限:

磚的任務

需要穀歌權限

讀取一個沒有物化視圖的BigQuery表

parentProject項目:

  • BigQuery讀會話用戶

項目項目:

  • BigQuery數據查看器(可選在數據集/表級別授予,而不是在項目級別授予)

讀取BigQuery表物化視圖

parentProject項目:

  • BigQuery讀會話用戶

  • BigQuery作業用戶

項目項目:

  • BigQuery數據查看器(可選在數據集/表級別授予,而不是在項目級別授予)

在實體化項目中:

  • BigQuery數據編輯器

寫一個BigQuery表

parentProject項目:

  • BigQuery作業用戶

項目項目:

  • BigQuery數據編輯器

步驟1:設置穀歌Cloud

啟用BigQuery存儲API

BigQuery存儲API在啟用BigQuery的新穀歌雲項目中默認啟用。但是,如果您有一個現有的項目,並且BigQuery存儲API沒有啟用,請按照本節中的步驟啟用它。

您可以通過穀歌Cloud CLI或穀歌Cloud Console啟用BigQuery存儲API。

通過穀歌Cloud CLI啟用BigQuery存儲API

gcloud服務啟用bigquerystorage.googleapis.com

使用穀歌雲控製台啟用BigQuery存儲API

  1. 點擊api和服務在左側導航窗格中。

  2. 單擊啟用api和服務按鈕。

    穀歌啟用服務
  3. 類型bigquery存儲api在搜索欄中選擇第一個結果。

    穀歌BigQuery存儲
  4. 確保BigQuery存儲API已啟用。

    穀歌BigQuery

為Databricks創建“穀歌”服務帳號

為Databricks集群創建一個服務帳戶。Databricks建議給予該服務帳戶執行其任務所需的最少權限。看到BigQuery角色和權限

您可以通過穀歌Cloud CLI或穀歌Cloud Console創建業務帳戶。

使用穀歌Cloud CLI創建穀歌業務帳號

Gcloud iam service-accounts create  Gcloud projects add-iam-policy-binding 角色/ bigquery.user——的作用——成員“serviceAccount: <服務帳戶名稱> @ <項目名稱> .iam.gserviceaccount.com”Gcloud projects add-iam-policy-binding 角色/ bigquery.dataEditor——的作用——成員“serviceAccount: <服務帳戶名稱> @ <項目名稱> .iam.gserviceaccount.com”

為您的服務帳戶創建密鑰:

gcloud服務-賬戶創建---賬戶“<服務帳戶名稱> @ <項目名稱> .iam.gserviceaccount.com”<項目-名字>-xxxxxxxxxxxjson

使用穀歌雲控製台創建穀歌業務帳號

創建帳戶:

  1. 點擊IAM和Admin在左側導航窗格中。

  2. 點擊服務帳戶

  3. 點擊+創建服務賬號

  4. 輸入服務帳戶名稱和描述。

    穀歌創建業務帳號
  5. 點擊創建

  6. 為您的服務帳戶指定角色。在選擇角色下拉,類型BigQuery並添加如下角色:

    穀歌的權限
  7. 點擊繼續

  8. 點擊完成

為您的服務帳戶創建密鑰:

  1. 在“服務帳戶”列表中,單擊新創建的帳戶。

  2. 在Keys部分中,選擇ADD KEY >創建新密鑰按鈕。

    穀歌創建密鑰
  3. 接受JSON密鑰類型。

  4. 點擊創建.JSON密鑰文件被下載到您的計算機。

    重要的

    您為服務帳戶生成的JSON密鑰文件是一個私有密鑰,應該隻與授權用戶共享,因為它控製了對穀歌雲帳戶中的數據集和資源的訪問。

創建穀歌GCS (Cloud Storage)桶作為臨時存儲

數據源要向BigQuery寫入數據,需要訪問GCS桶。

  1. 點擊存儲在左側導航窗格中。

  2. 點擊創建桶

    穀歌創建桶
  3. 配置桶詳細信息。

    穀歌桶詳細信息
  4. 點擊創建

  5. 單擊權限選項卡,添加成員

  6. 為桶上的服務帳戶設置如下權限。

    穀歌桶權限
  7. 點擊保存

步驟2:設置數據庫

要配置集群以訪問BigQuery表,必須提供JSON密鑰文件作為Spark配置。使用本地工具對JSON密鑰文件進行base64編碼。出於安全考慮,不要使用可能訪問密鑰的網絡或遠程工具。

當你配置集群

  • 設置Databricks運行時版本至Databricks Runtime 7.3 LTS或以上版本。

  • 火花配置選項卡,添加如下Spark配置。取代< base64-keys >使用base64編碼的JSON密鑰文件。替換括號中的其他項目(如< client_email >)與這些字段的值從您的JSON密鑰文件。

    憑證< base64-keys >spark.hadoop.google.cloud.auth.service.account.enable真實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 >

讀寫BigQuery表

要讀取BigQuery表,請指定

df火花格式“bigquery”選項“表”<表格-名字>負載()

若要寫入BigQuery表,請指定

df格式“bigquery”模式“< >模式”選項“temporaryGcsBucket”“< bucket名>”選項“表”<表格-名字>保存()

在哪裏< bucket名>是在其中創建的bucket的名稱創建穀歌GCS (Cloud Storage)桶作為臨時存儲

從BigQuery創建一個外部表

重要的

Unity Catalog不支持此功能。

你可以在Databricks中聲明一個非托管表,直接從BigQuery中讀取數據:

創建表格chosen_datasettest_table使用bigquery選項parentProject“gcp-parent-project-id”項目“gcp-project-id”temporaryGcsBucket“some-gcp-bucket”materializationDataset“some-bigquery-dataset”表格“some-bigquery-dataset.table-to-copy”

例如筆記本電腦

穀歌BigQuery Python示例筆記本

在新標簽頁打開筆記本

穀歌BigQuery Scala示例筆記本

在新標簽頁打開筆記本