本教學課程將說明如何連結 BigQuery 資料表或檢視,以便透過 Databricks 筆記本讀取及寫入資料。我們將使用 Google Cloud 控制台和 Databricks Workspaces 說明這些步驟。您也可以使用 gcloud
和 databricks
指令列工具執行這些步驟,但這類指南不在本教學課程的範圍內。
Google Cloud 上的 Databricks 是託管在 Google Cloud上、在 Google Kubernetes Engine (GKE) 上執行的 Databricks 環境,並提供與 BigQuery 和其他 Google Cloud 技術的內建整合功能。如果您是 Databricks 的新手,請觀看「Databricks 統一資料平台簡介」影片,瞭解 Databricks lakehouse 平台的概況。
目標
- 設定 Google Cloud 以連線至 Databricks。
- 在 Google Cloud上部署 Databricks。
- 透過 Databricks 查詢 BigQuery。
費用
本教學課程使用 Google Cloud 主控台的可計費元件,包括 BigQuery 和 GKE。適用 BigQuery 定價和 GKE 定價。如要瞭解在 Google Cloud上執行 Databricks 帳戶的相關費用,請參閱 Databricks 說明文件中的「設定帳戶並建立工作區」一節。
事前準備
將 Databricks 連結至 BigQuery 前,請先完成下列步驟:
- 啟用 BigQuery Storage API。
- 建立 Databricks 的服務帳戶。
- 建立 Cloud Storage 值區,用於臨時儲存空間。
啟用 BigQuery Storage API
對於使用 BigQuery 的任何新專案,系統預設會啟用 BigQuery Storage API。如果現有專案未啟用 API,請按照下列操作說明進行:
前往 Google Cloud 控制台的「BigQuery Storage API」頁面。
確認已啟用 BigQuery Storage API。
建立 Databricks 的服務帳戶
接著,請建立身分與存取權管理 (IAM) 服務帳戶,讓 Databricks 叢集執行 BigQuery 查詢。建議您為這個服務帳戶提供執行工作所需的最低權限。請參閱 BigQuery 角色和權限。
前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。
按一下「建立服務帳戶」,為服務帳戶命名為
databricks-bigquery
,輸入簡短說明 (例如Databricks tutorial service account
),然後按一下「建立並繼續」。在「將專案存取權授予這個服務帳戶」下方,指定服務帳戶的角色。如要授予服務帳戶權限,讓服務帳戶可透過 Databricks 工作區和同一個專案中的 BigQuery 資料表讀取資料 (特別是無需參照具象化檢視畫面),請授予下列角色:
- BigQuery 讀取工作階段使用者
- BigQuery 資料檢視器
如要授予寫入資料的權限,請授予下列角色:
- BigQuery 工作使用者
- BigQuery 資料編輯器
記下新服務帳戶的電子郵件地址,以便在後續步驟中參考。
按一下 [完成]。
建立 Cloud Storage 值區
如要寫入 BigQuery,Databricks 叢集需要存取 Cloud Storage 值區,以便緩衝已寫入的資料。
前往 Google Cloud 控制台的「Cloud Storage 瀏覽器」。
按一下「Create bucket」,開啟「Create a bucket」對話方塊。
指定用於將資料寫入 BigQuery 的值區名稱。值區名稱必須是全域不重複的名稱。如果您指定的值區名稱已存在,Cloud Storage 會傳回錯誤訊息。如果發生這種情況,請為值區指定其他名稱。
在本教學課程中,請使用儲存空間位置、儲存空間類別、存取控管和進階設定的預設設定。
按一下「建立」,建立 Cloud Storage 值區。
按一下「權限」和「新增」,然後在「服務帳戶」頁面中指定您為 Databricks 存取權建立的服務帳戶電子郵件地址。
按一下「請選取角色」,然後新增「Storage 管理員」角色。
按一下 [儲存]。
在 Google Cloud上部署 Databricks
完成下列步驟,準備在 Google Cloud上部署 Databricks。
- 如要設定 Databricks 帳戶,請按照 Databricks 說明文件中的「在 Google Cloud帳戶中設定 Databricks」操作說明進行設定。
- 註冊後,請進一步瞭解如何管理 Databricks 帳戶。
建立 Databricks 工作區、叢集和筆記本
以下步驟說明如何建立 Databricks 工作區、叢集和 Python 筆記本,以便編寫用於存取 BigQuery 的程式碼。
確認 Databrick 必要條件。
建立第一個工作區。在 Databricks 帳戶主控台中,按一下「Create Workspace」。
將工作區名稱設為
gcp-bq
,然後選取區域。如要判斷 Google Cloud 專案 ID,請前往 Google Cloud 主控台,然後將值複製到「Google Cloud 專案 ID」欄位。
按一下「儲存」,建立 Databricks 工作區。
如要使用 Databricks 7.6 以上版本的 Databricks 執行階段建立叢集,請在左側選單列中選取「叢集」,然後點選頂端的「建立叢集」。
指定叢集名稱和大小,然後按一下「進階選項」,並指定 Google Cloud服務帳戶的電子郵件地址。
點選「建立叢集」。
如要建立 Databricks 專用的 Python 筆記本,請按照「建立筆記本」中的指示操作。
透過 Databricks 查詢 BigQuery
透過上述設定,您可以安全地將 Databricks 連結至 BigQuery。Databricks 會使用 開放原始碼 Google Spark 轉接器的衍生版本存取 BigQuery。
Databricks 會自動推送特定查詢述詞 (例如將巢狀資料欄篩選至 BigQuery),藉此減少資料傳輸作業並加快查詢速度。此外,新增的功能可先使用 query()
API 在 BigQuery 上執行 SQL 查詢,進而縮減產生的資料集傳輸大小。
以下步驟說明如何在 BigQuery 中存取資料集,以及將您自己的資料寫入 BigQuery。
在 BigQuery 中存取公開資料集
BigQuery 會提供可用公開資料集的清單。如要查詢公開資料集的一部分 BigQuery Shakespeare 資料集,請按照下列步驟操作:
如要讀取 BigQuery 資料表,請在 Databricks 筆記本中使用下列程式碼片段。
table = "bigquery-public-data.samples.shakespeare" df = spark.read.format("bigquery").option("table",table).load() df.createOrReplaceTempView("shakespeare")
按下
Shift+Return
執行程式碼。您現在可以透過 Spark DataFrame (
df
) 查詢 BigQuery 資料表。舉例來說,您可以使用以下方式顯示 DataFrame 的前三列:df.show(3)
如要查詢其他資料表,請更新
table
變數。Databricks 筆記本的一項重要功能,就是您可以在單一筆記本中混合使用 Scala、Python 和 SQL 等不同語言的儲存格。
您可以執行上一個建立暫存檢視表的儲存格,然後執行下列 SQL 查詢,以便在莎士比亞的著作中以圖表呈現字詞數。
%sql SELECT word, SUM(word_count) AS word_count FROM words GROUP BY word ORDER BY word_count DESC LIMIT 12
上方的儲存格會針對 Databricks 叢集中的資料框架執行 Spark SQL 查詢,而非在 BigQuery 中執行。這種做法的好處是,資料分析會在 Spark 層級進行,不會發出其他 BigQuery API 呼叫,也不會產生額外的 BigQuery 費用。
您也可以使用
query()
API 將 SQL 查詢的執行作業委派給 BigQuery,並進行最佳化,以減少產生資料框架的傳輸大小。與上述範例不同,在該範例中,處理作業是在 Spark 中完成。如果您採用這種做法,系統會在 BigQuery 上執行查詢時套用價格和查詢最佳化。以下範例使用 Scala、
query()
API 和 BigQuery 中的公開莎士比亞資料集,計算莎士比亞作品中最常見的五個字詞。在執行程式碼前,您必須先在 BigQuery 中建立名為mdataset
的空資料集,供程式碼參照。詳情請參閱「將資料寫入 BigQuery」。%scala // public dataset val table = "bigquery-public-data.samples.shakespeare" // existing dataset where the Google Cloud user has table creation permission val tempLocation = "mdataset" // query string val q = s"""SELECT word, SUM(word_count) AS word_count FROM ${table} GROUP BY word ORDER BY word_count DESC LIMIT 10 """ // read the result of a GoogleSQL query into a DataFrame val df2 = spark.read.format("bigquery") .option("query", q) .option("materializationDataset", tempLocation) .load() // show the top 5 common words in Shakespeare df2.show(5)
如需更多程式碼範例,請參閱 Databricks BigQuery 範例 Notebook。
將資料寫入 BigQuery
BigQuery 資料表位於資料集中。您必須先在 BigQuery 中建立新資料集,才能將資料寫入 BigQuery 表格。如要為 Databricks Python Notebook 建立資料集,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
展開
「動作」選項,按一下「建立資料集」,然後將其命名為together
。在 Databricks Python 工作階段中,使用下列程式碼片段,從包含三個字串項目的 Python 清單建立簡單的 Spark 資料框架:
from pyspark.sql.types import StringType mylist = ["Google", "Databricks", "better together"] df = spark.createDataFrame(mylist, StringType())
在筆記本中新增另一個儲存格,將上一個步驟的 Spark 資料框架寫入資料集
together
中的 BigQuery 資料表myTable
。資料表會建立或覆寫。使用您先前指定的值區名稱。bucket = YOUR_BUCKET_NAME table = "together.myTable" df.write .format("bigquery") .option("temporaryGcsBucket", bucket) .option("table", table) .mode("overwrite").save()
如要確認您已成功寫入資料,請透過 Spark DataFrame (
df
) 查詢及顯示 BigQuery 資料表:display(spark.read.format("bigquery").option("table", table).load)
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
移除 Databricks 前,請務必備份資料和 Notebook。如要清除並徹底移除 Databricks,請在Google Cloud 控制台取消 Databricks 訂閱,並從Google Cloud 控制台移除您建立的任何相關資源。
如果您刪除 Databricks 工作區,如果 Cloud Storage 值區不為空白,則名稱為 databricks-WORKSPACE_ID
和 databricks-WORKSPACE_ID-system
的兩個 Cloud Storage 值區可能不會遭到刪除。由 Databricks 建立 刪除工作區後,您可以前往專案的Google Cloud 主控台,手動刪除這些物件。
後續步驟
本節提供其他文件和教學課程的清單:
- 瞭解 Databricks 免費試用方案的詳細資訊。
- 瞭解 Databricks 在 Google Cloud。
- 瞭解 Databricks BigQuery。
- 請參閱 BigQuery 支援 Databricks 的網誌公告。
- 瞭解 BigQuery 範例筆記本。
- 瞭解 Google Cloud上的 Databricks Terraform 供應器。
- 請參閱 Databricks 網誌,進一步瞭解數據科學主題和資料集。