穀歌BigQuery
本文介紹如何在Databricks中讀取和寫入穀歌BigQuery表。
必須使用基於密鑰的身份驗證連接BigQuery。
需求
權限
您的項目必須具有特定的穀歌權限才能使用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表 |
在
|
需要的權限項目
而且parentProject
是不同的
如果您的id項目
而且parentProject
均不同,使用下表確定最小權限:
磚的任務 |
需要穀歌權限 |
---|---|
讀取一個沒有物化視圖的BigQuery表 |
在
在
|
讀取BigQuery表物化視圖 |
在
在
在實體化項目中:
|
寫一個BigQuery表 |
在
在
|
步驟1:設置穀歌Cloud
啟用BigQuery存儲API
BigQuery存儲API在啟用BigQuery的新穀歌雲項目中默認啟用。但是,如果您有一個現有的項目,並且BigQuery存儲API沒有啟用,請按照本節中的步驟啟用它。
您可以通過穀歌Cloud CLI或穀歌Cloud Console啟用BigQuery存儲API。
為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”\<項目-名字>-xxxxxxxxxxx.json
步驟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_dataset.test_table使用bigquery選項(parentProject“gcp-parent-project-id”,項目“gcp-project-id”,temporaryGcsBucket“some-gcp-bucket”,materializationDataset“some-bigquery-dataset”,表格“some-bigquery-dataset.table-to-copy”)