穀歌BigQuery

本文描述了如何讀和寫穀歌在磚BigQuery表。

你必須連接BigQuery能夠使用基於密鑰的認證。

需求

磚運行時

磚集群運行磚運行時7.3 LTS或以上。

權限

你的項目必須有特定的穀歌使用BigQuery讀寫權限。

請注意

本文討論了BigQuery物化視圖。,穀歌的文章介紹了物化視圖。學習其他BigQuery術語和BigQuery安全模型,看到穀歌BigQuery文檔

讀寫數據與BigQuery取決於兩個穀歌雲項目:

  • 項目(項目):磚的穀歌雲項目ID讀取或寫入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:設置穀歌雲

啟用BigQuery存儲API

BigQuery存儲API是默認啟用BigQuery啟用新的穀歌雲項目。然而,如果你有一個現有的項目和BigQuery存儲API不啟用,遵循本節中的步驟來啟用它。

您可以啟用BigQuery存儲API使用穀歌雲CLI或穀歌雲控製台。

使雲CLI BigQuery存儲API使用穀歌

gcloud服務啟用bigquerystorage.googleapis.com

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

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

  2. 單擊使api和服務按鈕。

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

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

    穀歌BigQuery

創建一個穀歌服務占磚

創建一個服務帳戶的磚集群。磚推薦給這個服務帳戶所需的最小特權來執行其任務。看到BigQuery角色和權限

您可以創建一個服務帳戶使用Google雲CLI或穀歌雲控製台。

創建一個穀歌服務帳戶使用穀歌雲CLI

gcloud我服務帳戶創建<服務帳戶名稱> gcloud項目add-iam-policy-binding <項目名稱>\角色/ bigquery.user——的作用\——成員=“serviceAccount: <服務帳戶名稱> @ <項目名稱> .iam.gserviceaccount.com”gcloud項目add-iam-policy-binding <項目名稱>\角色/ bigquery.dataEditor——的作用\——成員=“serviceAccount: <服務帳戶名稱> @ <項目名稱> .iam.gserviceaccount.com”

為您的服務帳戶創建的關鍵:

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

創建一個穀歌服務帳戶使用穀歌雲控製台

創建帳戶:

  1. 點擊我和管理在左側導航窗格。

  2. 點擊服務帳戶

  3. 點擊+創建服務帳戶

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

    穀歌創建服務帳戶
  5. 點擊創建

  6. 對你的服務帳戶指定的角色。在選擇一個角色下拉,類型BigQuery,並添加以下角色:

    穀歌的權限
  7. 點擊繼續

  8. 點擊完成

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

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

  2. 在關鍵部分,選擇添加鍵>創建新的鍵按鈕。

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

  4. 點擊創建。JSON關鍵文件被下載到你的電腦。

    重要的

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

創建一個穀歌雲存儲(GCS)為臨時存儲桶

BigQuery能夠寫入數據,數據來源需要訪問GCS桶。

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

  2. 點擊創建桶

    穀歌創建桶
  3. 配置桶的細節。

    穀歌桶細節
  4. 點擊創建

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

  6. 提供以下的服務帳戶權限桶。

    穀歌桶權限
  7. 點擊保存

第二步:設置數據磚

集群配置訪問BigQuery表,你必須提供JSON作為火花配置密鑰文件。使用本地工具base64編碼你的JSON密鑰文件。為了安全目的不使用網絡或遠程工具可以訪問你的鑰匙。

當你配置您的集群:

  • 設置磚的運行時版本的磚運行時7.3 LTS或以上。

  • 火花配置選項卡中,添加以下引發配置。取代< base64-keys >與你的base64編碼JSON密鑰文件。更換其他物品在括號中(如< client-email >這些字段的值來自你的JSON密鑰文件。

    憑證< base64-keys >spark.hadoop.google.cloud.auth.service.account。實現真正的spark.hadoop.fs.gs.auth.service.account。電子郵件< client-email >spark.hadoop.fs.gs.project。id <項目id >spark.hadoop.fs.gs.auth.service.account.private。關鍵<私有密匙>spark.hadoop.fs.gs.auth.service.account.private.key。id < private-key-id >

讀和寫BigQuery表

閱讀BigQuery表,指定

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

寫信給一個BigQuery表,指定

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

在哪裏< bucket名>鬥中創建的名稱嗎創建一個穀歌雲存儲(GCS)為臨時存儲桶

從BigQuery創建外部表

重要的

這個功能不支持統一目錄。

你可以聲明一個非托管表數據磚將直接從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”)

Python筆記本的例子:一個穀歌BigQuery表加載到DataFrame

下麵的Python筆記本穀歌BigQuery表裝入一個磚DataFrame。

穀歌BigQuery Python示例筆記本

在新標簽頁打開筆記本

Scala筆記本的例子:一個穀歌BigQuery表加載到DataFrame

以下Scala筆記本穀歌BigQuery表裝入一個磚DataFrame。

穀歌BigQuery Scala樣本筆記本

在新標簽頁打開筆記本