使用 BigQuery 從 Databricks 執行反向 ETL 至 Spanner

1. 使用 Google Cloud Storage 和 BigQuery,從 Databricks 建構反向 ETL 管道至 Spanner

簡介

在本程式碼研究室中,您將建構從 Databricks 到 Spanner 的反向 ETL pipeline。傳統上,標準 ETL (擷取、轉換、載入) 管道會將作業資料庫中的資料移至 Databricks 等資料倉儲,以供分析。反向 ETL 管道則會反向操作,將經過整理和處理的資料資料倉儲移回營運資料庫,例如 Spanner (全球分散式關聯資料庫,非常適合高可用性應用程式),以便為應用程式提供支援、提供使用者導向功能,或用於即時決策。

目標是將匯總資料集從 Databricks Iceberg 資料表移至 Spanner 資料表。

為此,我們使用 Google Cloud Storage (GCS) 和 BigQuery 做為中繼步驟。以下是資料流程的細目,以及此架構背後的理由:

b2dae0f06b59656a.png

  1. 以 Iceberg 格式將 Databricks 匯出至 Google Cloud Storage (GCS):
  • 第一步是以開放且定義完善的格式,從 Databricks 匯出資料。資料表會以 Apache Iceberg 格式匯出。這個程序會將基礎資料寫入一組 Parquet 檔案,並將資料表的中繼資料 (結構定義、分區、檔案位置) 寫入 JSON 和 Avro 檔案。在 GCS 中暫存這個完整資料表結構,可讓資料可攜,且任何瞭解 Iceberg 格式的系統都能存取。
  1. 將 GCS Iceberg 資料表轉換為 BigQuery BigLake 外部資料表:
  • 您不必直接將資料從 GCS 載入 Spanner,而是使用 BigQuery 做為強大的中介服務。BigQuery 會建立 BigLake 外部資料表,直接指向 GCS 中的 Iceberg 中繼資料檔案。這種方法有幾個優點:
  • 無資料重複:BigQuery 會從中繼資料讀取資料表結構,並直接查詢 Parquet 資料檔案,不必擷取這些檔案,因此可大幅節省時間和儲存空間費用。
  • 聯合查詢:可讓您對 GCS 資料執行複雜的 SQL 查詢,就像查詢原生 BigQuery 資料表一樣。
  1. 將 BigLake 外部資料表反向 ETL 匯入 Spanner:
  • 最後一個步驟是將資料從 BigQuery 移至 Spanner。這項作業是透過 BigQuery 的強大功能 (稱為「查詢」) 達成,也就是「反向 ETL」步驟。EXPORT DATA
  • 運作準備:Spanner 專為交易工作負載設計,可為應用程式提供同步一致性和高可用性。將資料移至 Spanner 後,需要低延遲點查的使用者導向應用程式、API 和其他作業系統,就能存取這些資料。
  • 可擴充性:這個模式可充分運用 BigQuery 的分析能力處理大型資料集,然後透過 Spanner 的全球可擴充基礎架構有效提供結果。

服務和術語

  • DataBricks - 以 Apache Spark 為基礎建構的雲端資料平台。
  • Spanner:Google 全代管的全球分散式關聯資料庫。
  • Google Cloud Storage:Google Cloud 的 Blob 儲存空間服務。
  • BigQuery:無伺服器資料倉儲,可進行分析,並由 Google 全面管理。
  • Iceberg:Apache 定義的開放式資料表格式,可針對常見的開放原始碼資料檔案格式提供抽象化功能。
  • Parquet:Apache 的開放原始碼欄位式二進位資料檔案格式。

課程內容

  • 如何將資料載入 Databricks 做為 Iceberg 資料表
  • 如何建立 GCS 值區
  • 如何以 Iceberg 格式將 Databricks 資料表匯出至 GCS
  • 如何從 GCS 中的 Iceberg 資料表,在 BigQuery 中建立 BigLake 外部資料表
  • 如何設定 Spanner 執行個體
  • 如何將 BigQuery 中的 BigLake 外部資料表載入 Spanner

2. 設定、需求條件和限制

必要條件

  • Databricks 帳戶 (建議使用 GCP 上的帳戶)
  • 如要從 BigQuery 匯出至 Spanner,必須使用 Google Cloud 帳戶,並具備 Enterprise 級以上的預訂
  • 透過網路瀏覽器存取 Google Cloud 控制台
  • 用於執行 Google Cloud CLI 指令的終端機

如果 Google Cloud 機構已啟用 iam.allowedPolicyMemberDomains 政策,管理員可能需要授予例外狀況,允許來自外部網域的服務帳戶。我們會在後續步驟中說明相關內容 (如適用)。

需求條件

  • 已啟用計費功能的 Google Cloud 專案。
  • 網路瀏覽器,例如 Chrome
  • Databricks 帳戶 (本實驗室假設工作區是託管在 GCP 中)
  • BigQuery 執行個體必須是 Enterprise 版或更高版本,才能使用 EXPORT DATA 功能。
  • 如果 Google Cloud 機構已啟用 iam.allowedPolicyMemberDomains 政策,管理員可能需要授予例外狀況,允許來自外部網域的服務帳戶。我們會在後續步驟中說明相關內容 (如適用)。

Google Cloud Platform IAM 權限

Google 帳戶需要下列權限,才能執行本程式碼研究室中的所有步驟。

服務帳戶

iam.serviceAccountKeys.create

允許建立服務帳戶。

Spanner

spanner.instances.create

可建立新的 Spanner 執行個體。

spanner.databases.create

可執行 DDL 陳述式來建立

spanner.databases.updateDdl

可執行 DDL 陳述式,在資料庫中建立資料表。

Google Cloud Storage

storage.buckets.create

可建立新的 GCS bucket,用來儲存匯出的 Parquet 檔案。

storage.objects.create

允許將匯出的 Parquet 檔案寫入 GCS 值區。

storage.objects.get

允許 BigQuery 從 GCS 儲存空間讀取 Parquet 檔案。

storage.objects.list

允許 BigQuery 列出 GCS bucket 中的 Parquet 檔案。

Dataflow

Dataflow.workitems.lease

允許從 Dataflow 認領工作項目。

Dataflow.workitems.sendMessage

允許 Dataflow 工作站將訊息傳回 Dataflow 服務。

Logging.logEntries.create

允許 Dataflow 工作站將記錄項目寫入 Google Cloud Logging。

為方便起見,您可以使用具備這些權限的預先定義角色。

roles/resourcemanager.projectIamAdmin

roles/iam.serviceAccountKeyAdmin

roles/spanner.instanceAdmin

roles/spanner.databaseAdmin

roles/storage.admin

roles/dataflow.serviceAgent

roles/dataflow.worker

roles/dataflow.serviceAgent

Google Cloud 專案

專案是 Google Cloud 的基本組織單位。如果管理員已提供可用的憑證,則可略過這個步驟。

您可以使用 CLI 建立專案,如下所示:

gcloud projects create <your-project-name>

如要進一步瞭解如何建立及管理專案,請參閱這篇文章

限制

請務必留意這個管道可能出現的某些限制和資料類型不相容問題。

從 Databricks Iceberg 遷移至 BigQuery

使用 BigQuery 查詢 Databricks 管理的 Iceberg 資料表 (透過 UniForm) 時,請注意下列事項:

  • 結構定義演進:UniForm 可將 Delta Lake 結構定義變更轉換為 Iceberg,但複雜的變更可能無法如預期傳播。舉例來說,在 Delta Lake 中重新命名資料欄不會轉換為 Iceberg,因為 Iceberg 會將其視為 dropadd。請務必徹底測試結構定義異動。
  • 時空旅行:BigQuery 無法使用 Delta Lake 的時空旅行功能。系統只會查詢 Iceberg 資料表的最新快照。
  • 不支援的 Delta Lake 功能:Delta Lake 的刪除向量和欄對應 (採用 id 模式) 等功能與 Iceberg 的 UniForm 不相容。本實驗室使用 name 模式進行資料欄對應,此模式受到支援。

BigQuery 至 Spanner

從 BigQuery 到 Spanner 的 EXPORT DATA 指令不支援所有 BigQuery 資料類型。匯出下列類型的資料表時會發生錯誤:

  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME

此外,如果 BigQuery 專案使用 GoogleSQL 方言,下列數值型別也不支援匯出至 Spanner:

  • BIGNUMERIC

如需完整且最新的限制清單,請參閱官方文件:匯出至 Spanner 的限制

疑難排解與常見錯誤

  • 如果不是在 GCP Databricks 執行個體上,可能無法在 GCS 中定義外部資料位置。在這種情況下,檔案必須先暫存在 Databricks 工作區的雲端供應商儲存解決方案中,然後再個別遷移至 GCS。
  • 這麼做時,由於資訊會包含暫存檔案的硬式編碼路徑,因此需要調整中繼資料。

3. 設定 Google Cloud Storage (GCS)

Google Cloud Storage (GCS) 會用於儲存 Databricks 產生的 Parquet 資料檔案。如要這麼做,請先建立新 bucket,做為檔案目的地。

Google Cloud Storage

建立新 bucket

  1. 前往雲端控制台中的 Google Cloud Storage 頁面。
  2. 在左側面板中選取「儲存區」

27f4bdfaba9bbd6a.png

  1. 按一下「建立」按鈕:

e580967933f20cbf.png

  1. 填寫值區詳細資料:
  • 選擇要使用的 bucket 名稱。在本實驗室中,我們將使用 codelabs_retl_databricks 這個名稱
  • 選取 bucket 的儲存區域,或使用預設值。
  • 繼續使用 storage class 做為 standard
  • 保留「控制存取權」的預設值
  • 保留保護物件資料的預設值
  1. 完成後,請按一下 Create 按鈕。系統可能會顯示提示,要求您確認要禁止公開存取。請確認。
  2. 恭喜,您已成功建立新的值區!系統會重新導向至 bucket 頁面。
  • 將新值區名稱複製到任一處,以便稍後使用。

cfe4c7b70868ecac.png

為後續步驟做好準備

請務必記下下列詳細資料,因為後續步驟會用到:

  1. Google 專案 ID
  2. Google Storage bucket 名稱

4. 設定 Databricks

TPC-H 資料

在本實驗室中,我們將使用 TPC-H 資料集,這是決策支援系統的業界標準基準。這個結構會模擬真實的商業環境,包含顧客、訂單、供應商和零件,非常適合用來展示實際的分析和資料移動情境。

系統會建立新的匯總資料表,而非使用原始的標準化 TPC-H 資料表。這個新資料表會彙整 orderscustomernation 資料表中的資料,產生反正規化的區域銷售摘要檢視畫面。預先彙整資料是分析作業的常見做法,因為這樣可為特定用途準備資料,在本情境中,則是供作業應用程式使用。

匯總資料表的最終結構定義如下:

Col

類型

nation_name

字串

market_segment

字串

order_year

int

order_priority

字串

total_order_count

bigint

total_revenue

decimal(29,2)

unique_customer_count

bigint

透過 Delta Lake Universal Format (UniForm) 支援 Iceberg

在本實驗室中,Databricks 內的資料表將是 Delta Lake 資料表。不過,為了讓 BigQuery 等外部系統可讀取,系統會啟用名為「通用格式 (UniForm)」的強大功能。

UniForm 會自動產生 Iceberg 中繼資料,以及資料表單一共用副本的 Delta Lake 中繼資料。這項功能兼具兩者的優點:

  • 在 Databricks 中:可享有 Delta Lake 的所有效能和管理優勢。
  • Databricks 以外:任何與 Iceberg 相容的查詢引擎 (例如 BigQuery) 都能讀取資料表,就像讀取原生 Iceberg 資料表一樣。

這樣一來,就不必維護資料副本或執行手動轉換工作。建立資料表時,只要設定特定資料表屬性,即可啟用 UniForm。

Databricks 目錄

Databricks 目錄是 Unity Catalog (Databricks 的統一治理解決方案) 中的頂層資料容器。Unity Catalog 提供集中管理資料資產、控管存取權及追蹤沿襲的方式,對於妥善管理的資料平台至關重要。

這項服務會使用三層命名空間來整理資料:catalog.schema.table

  • 目錄:最高層級,用於依環境、業務單位或專案分組資料。
  • 結構定義 (或資料庫):目錄中資料表、檢視區塊和函式的邏輯分組。
  • 資料表:包含資料的物件。

建立匯總 TPC-H 資料表前,必須先設定專屬的目錄和結構定義來存放該資料表。確保專案井然有序,並與工作區中的其他資料隔離。

建立新的目錄和結構定義

在 Databricks Unity Catalog 中,目錄是資料資產的最高層級組織,可做為安全容器,跨越多個 Databricks 工作區。您可以根據業務部門、專案或環境整理及隔離資料,並清楚定義權限和存取控管機制。

在目錄中,結構定義 (也稱為資料庫) 會進一步整理資料表、檢視區塊和函式。這種階層式結構可精細控管相關資料物件,並進行邏輯分組。在本實驗室中,系統會建立專屬的目錄和結構定義來存放 TPC-H 資料,確保適當的隔離和管理。

建立目錄
  1. 前往 6761500bb3aaa502.png
  2. 按一下「+」,然後從下拉式選單中選取「建立目錄」

13cfc62741161182.png

  1. 系統會建立新的「標準」目錄,並採用下列設定:
  • 目錄名稱retl_tpch_project
  • 儲存位置:如果工作區已設定儲存位置,請使用預設位置,否則請建立新的儲存位置。

a6e3c89febde9a77.png

建立結構定義
  1. 前往 6761500bb3aaa502.png
  2. 從左側面板選取新建立的目錄

89d2935ac4c5d655.png

  1. 按一下 b7a6fc9785ac3a9d.png
  2. 系統會以「結構定義名稱」做為 tpch_data 建立新結構定義

787631de85a6bb9.png

設定外部資料

如要將資料從 Databricks 匯出至 Google Cloud Storage (GCS),必須在 Databricks 中設定外部資料憑證。這樣 Databricks 就能安全地存取 GCS bucket 並寫入資料。

  1. 在「目錄」畫面上,按一下 32d5a94ae444cd8e.png
  • 如果沒有看到 External Data 選項,請改為在 Connect 下拉式選單中尋找 External Locations
  1. 按一下 e03562324c0ba85e.png
  2. 在新對話方塊視窗中,設定憑證的必要值:
  • 憑證類型GCP Service Account
  • 憑證名稱retl-gcs-credential

7be8456dfa196853.png

  1. 按一下「Create」(建立)
  2. 接著點選「外部位置」分頁標籤。
  3. 按一下「建立營業地點」
  4. 在新對話方塊視窗中,設定外部位置的必要值:
  • 外部位置名稱retl-gcs-location
  • 「Storage type」(儲存空間類型)GCP
  • 網址:GCS 儲存空間的網址,格式為 gs://YOUR_BUCKET_NAME
  • 儲存空間憑證:選取剛建立的 retl-gcs-credential

6d9240128dfcfd80.png

  1. 選取「storage credential」(儲存空間憑證) 後,系統會自動填入「Service account」(服務帳戶) 電子郵件地址,請記下這個地址,下一個步驟會用到。
  1. 按一下「Create」(建立)

5. 設定服務帳戶權限

服務帳戶是特殊的帳戶類型,應用程式或服務可透過這種帳戶,對 Google Cloud 資源發出授權 API 呼叫。

現在,您必須為 GCS 中新 bucket 建立的服務帳戶新增權限。

  1. 在 GCS bucket 頁面中,選取「權限」分頁標籤。

240e591122612db0.png

  1. 在主體頁面中,點選「授予存取權」
  2. 在從右側滑出的「授予存取權」面板中,將「服務帳戶 ID」輸入「新增主體」欄位。
  3. 在「指派角色」下方,新增 Storage Object AdminStorage Legacy Bucket Reader。這些角色可讓服務帳戶讀取、寫入及列出儲存空間 bucket 中的物件。

載入 TPC-H 資料

現在已建立 Catalog 和 Schema,可以從 Databricks 內部儲存的現有 samples.tpch 資料表載入 TPCH 資料,並在新的 Schema 中操作成新資料表。

建立支援 Iceberg 的資料表

Iceberg 與 UniForm 的相容性

在幕後,Databricks 會在內部將這個資料表管理為 Delta Lake 資料表,在 Databricks 生態系統中提供 Delta 效能最佳化和治理功能的所有優點。不過,啟用 UniForm (通用格式的簡稱) 後,Databricks 會收到特殊指令:每次更新資料表時,Databricks 除了 Delta Lake 中繼資料外,還會自動生成並維護對應的 Iceberg 中繼資料

也就是說,現在有兩組不同的中繼資料,用來描述同一組共用的資料檔案 (Parquet 檔案)。

  • Databricks:使用 _delta_log 讀取資料表。
  • 外部讀取器 (例如 BigQuery):這類讀取器會使用 Iceberg 中繼資料檔案 (.metadata.json) 瞭解資料表的結構定義、分區和檔案位置。

因此產生的資料表完全相容於任何可辨識 Iceberg 的工具,且相容性一目瞭然。不會重複資料,也不需要手動轉換或同步處理。這個單一可靠來源可供 Databricks 的分析世界,以及支援開放 Iceberg 標準的更廣泛工具生態系統無縫存取。

  1. 依序按一下「新增」和「查詢」

d5fad2076e475ebe.png

  1. 在查詢頁面的文字欄位中,執行下列 SQL 指令:
CREATE TABLE retl_tpch_project.tpch_data.regional_sales_iceberg
USING DELTA
LOCATION 'gs://<Your bucket name>/regional_sales_iceberg'
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
)
AS 

SELECT 
    n.n_name AS nation_name,
    c.c_mktsegment AS market_segment,
    YEAR(o.o_orderdate) AS order_year,
    o.o_orderpriority AS order_priority,
    COUNT(o.o_orderkey) AS total_order_count,
    ROUND(SUM(o.o_totalprice), 2) AS total_revenue,
    COUNT(DISTINCT c.c_custkey) AS unique_customer_count
FROM samples.tpch.orders AS o
INNER JOIN samples.tpch.customer AS c 
    ON o.o_custkey = c.c_custkey
INNER JOIN samples.tpch.nation AS n
    ON c.c_nationkey = n.n_nationkey
GROUP BY 
    n.n_name, 
    c.c_mktsegment, 
    YEAR(o.o_orderdate), 
    o.o_orderpriority;

OPTIMIZE retl_tpch_project.tpch_data.regional_sales_iceberg;

DESCRIBE EXTENDED retl_tpch_project.tpch_data.regional_sales_iceberg;

注意:

  • 使用 Delta - 指定我們使用的是 Delta Lake 資料表。只有 Databricks 中的 Delta Lake 資料表可以儲存為外部資料表。
  • 位置:指定資料表的儲存位置 (如為外部資料表)。
  • TablePropertoes - delta.universalFormat.enabledFormats = ‘iceberg' 會在 Delta Lake 檔案旁建立相容的 Iceberg 中繼資料。
  • 最佳化:強制觸發 UniForm 中繼資料生成作業,因為這項作業通常會以非同步方式進行。
  1. 查詢輸出內容應會顯示新建立資料表的詳細資料

285c622214824bc.png

驗證 GCS 資料表資料

前往 GCS bucket 後,您現在可以找到新建立的資料表資料。

您會在 metadata 資料夾中找到 Iceberg 中繼資料,供外部讀取器 (例如 BigQuery) 使用。Databricks 內部使用的 Delta Lake 中繼資料會追蹤 _delta_log 資料夾。

實際的資料表資料會以 Parquet 檔案的形式儲存在另一個資料夾中,通常由 Databricks 以隨機產生的字串命名。舉例來說,在下方的螢幕截圖中,資料檔案位於 9M 資料夾。

e9c1dfecb7b6af05.png

6. 設定 BigQuery 和 BigLake

Iceberg 資料表現在位於 Google Cloud Storage 中,下一步是讓 BigQuery 能夠存取該資料表。方法是建立 BigLake 外部資料表

BigLake 是一種儲存引擎,可讓您在 BigQuery 中建立資料表,直接從 Google Cloud Storage 等外部來源讀取資料。在本實驗室中,這項技術是 BigQuery 瞭解剛匯出的 Iceberg 資料表的關鍵,不必擷取資料。

如要讓這項功能正常運作,需要兩個元件:

  1. 雲端資源連線:這是 BigQuery 和 GCS 之間的安全連結。系統會使用特殊服務帳戶處理驗證,確保 BigQuery 具備從 GCS bucket 讀取檔案的必要權限。
  2. 外部資料表定義:這會告知 BigQuery 在 GCS 中尋找 Iceberg 資料表的中繼資料檔案,以及應如何解讀。

建立 Cloud 資源連線

首先,系統會建立連線,讓 BigQuery 存取 GCS。

如要進一步瞭解如何建立 Cloud 資源連線,請參閱這篇文章

  1. 前往 BigQuery
  2. 按一下「探索」下方的「連線」
  • 如果沒有看到「Explorer」平面,請按一下 e09eaea936f28d62.png

3b64ad1e030299e5.png

  1. 在「連線」頁面中,按一下 6b81c7550b537890.png
  2. 在「連線類型」中選擇 Vertex AI remote models, remote functions, BigLake and Spanner (Cloud Resource)
  3. 將連線 ID 設為 databricks_retl,然後建立連線

a0c9030883e6fb2.png

7aa50f0ee61d7b67.png

  1. 現在應該會在新建連線的「連線」表格中看到項目。按一下該項目即可查看連線詳細資料。

3cf84a65e626ccfe.png

  1. 在連線詳細資料頁面中,記下「服務帳戶 ID」,稍後會用到。

7f52106c43700b78.png

授予連線服務帳戶存取權

  1. 前往「IAM 與管理」
  2. 點選「授予存取權」

d8fc7690bba820c7.png

  1. 在「新增主體」欄位,輸入上述建立的連線資源服務帳戶 ID
  2. 選取「角色」的 Storage Object User,然後點選 9e23819e5bc1babb.png

建立連線並授予服務帳戶必要權限後,現在可以建立 BigLake 外部資料表。首先,您需要在 BigQuery 中建立資料集,做為新資料表的容器。接著,系統會建立資料表本身,並將其指向 GCS bucket 中的 Iceberg 中繼資料檔案。

  1. 前往 BigQuery
  2. 在「Explorer」面板中,點選專案 ID,然後點選三點圖示並選取「建立資料集」

9ef91b1c8433b641.png

  1. 資料集名稱為 databricks_retl。其他選項保留預設值,然後按一下「建立資料集」按鈕。

9f413d6f65520b2f.png

  1. 現在,請在「Explorer」面板中找出新的 databricks_retl 資料集。點選旁邊的三點圖示,然後選取「建立資料表」

858cb483ebd3ce2a.png

  1. 填寫下列資料表建立設定:
  • 建立資料表來源Google Cloud Storage
  • 從 GCS bucket 選取檔案或使用 URI 模式:瀏覽至 GCS Bucket,然後找出 Databricks 匯出作業期間產生的中繼資料 JSON 檔案。路徑應如下所示:regional_sales/metadata/v1.metadata.json
  • 檔案格式Iceberg
  • 表格regional_sales
  • 資料表類型External table
  • 「連線 ID」:選取先前建立的 databricks_retl 連線。
  • 其餘值保留預設值,然後點選「建立資料表」
  1. 建立完成後,新的 regional_sales 資料表應會顯示在 databricks_retl 資料集下方。現在,您可以使用標準 SQL 查詢這個資料表,就像查詢任何其他 BigQuery 資料表一樣。

133be43ad67a5a21.png

7. 載入至 Spanner

管道的最後一個也是最重要的部分已完成:將資料從 BigLake 外部資料表移至 Spanner。這是「反向 ETL」步驟,資料在資料倉儲中經過處理和管理後,會載入營運系統供應用程式使用。

Spanner 是全代管的全球分散式關聯式資料庫。Cloud Spanner 具有傳統關聯式資料庫的交易一致性,但能夠水平擴充 NoSQL 資料庫。因此非常適合建構可擴充的高可用性應用程式。

程序如下:

  1. 建立 Spanner 執行個體,這是資源的實體分配。
  2. 在該執行個體中建立資料庫。
  3. 在資料庫中定義與 regional_sales 資料結構相符的資料表結構定義。
  4. 執行 BigQuery EXPORT DATA 查詢,將資料從 BigLake 資料表直接載入 Spanner 資料表。

建立 Spanner 執行個體、資料庫和資料表

  1. 前往 Spanner
  2. 按一下 6a261f186de0bf4a.png。如有現有執行個體,請隨意使用。視需要設定執行個體需求。本實驗室使用下列項目:

版本

Enterprise

執行個體名稱

databricks-retl

區域設定

你選擇的區域

運算單元

處理單元 (PU)

手動分配

100

  1. 建立完成後,請前往 Spanner 執行個體頁面,然後選取 99e50c2015c697f4.png。如有現成資料庫,歡迎直接使用。
  • 在本實驗室中,您將使用下列項目建立資料庫:
  • 名稱databricks-retl
  • 資料庫方言Google Standard SQL
  1. 建立資料庫後,請從 Spanner 執行個體頁面選取資料庫,然後進入 Spanner 資料庫頁面。
  2. 在 Spanner 資料庫頁面中,按一下 1df26c863b1327d5.png
  3. 在新查詢頁面中,系統會建立要匯入 Spanner 的資料表定義。如要執行這項操作,請執行下列 SQL 查詢。
CREATE TABLE regional_sales (
    nation_name STRING(MAX),
    market_segment STRING(MAX),
    order_year INT64,
    order_priority STRING(MAX),
    total_order_count INT64,
    total_revenue NUMERIC,
    unique_customer_count INT64
) PRIMARY KEY (nation_name, market_segment, order_year, order_priority);
  1. SQL 指令執行完畢後,BigQuery 即可對 Spanner 資料表執行反向 ETL 作業。如要確認資料表是否已建立,請查看 Spanner 資料庫左側面板中是否列出該資料表。

baf4caec5c236f4f.png

使用 EXPORT DATA 將反向 ETL 傳輸至 Spanner

這是最後一個步驟。在 BigQuery BigLake 資料表中準備好來源資料,並在 Spanner 中建立目的地資料表後,實際的資料移動作業會出乎意料地簡單。系統會使用單一 BigQuery SQL 查詢:EXPORT DATA

這項查詢專為這類情境設計。可有效率地將資料從 BigQuery 資料表 (包括 BigLake 資料表等外部資料表) 匯出至外部目的地。在本例中,目的地是 Spanner 資料表。如要進一步瞭解匯出功能,請參閱這篇文章

如要進一步瞭解如何設定 BigQuery 到 Spanner 的反向 ETL,請參閱這篇文章

  1. 前往 BigQuery
  2. 開啟新的查詢編輯器分頁。
  3. 在「查詢」頁面中,輸入下列 SQL。請記得將 **uri** 中的專案 ID 和資料表路徑替換為正確的專案 ID。
EXPORT DATA OPTIONS(

uri='https://spanner.googleapis.com/projects/YOUR_PROJECT_ID/instances/databricks-retl/databases/databricks-retl',
  format='CLOUD_SPANNER',
   spanner_options="""{
      "table": "regional_sales",
      "priority": "MEDIUM"
  }"""
) AS

SELECT * FROM `YOUR_PROJECT_ID.databricks_retl.regional_sales`;
  1. 指令完成後,資料就會成功匯出至 Spanner!

8. 驗證 Spanner 中的資料

恭喜!您已成功建構及執行完整的 Reverse ETL 管道,將資料從 Databricks 資料倉儲移至營運 Spanner 資料庫。

最後一個步驟是確認資料是否已如預期匯入 Spanner。

  1. 前往 Spanner
  2. 前往 databricks-retl 執行個體,然後前往 databricks-retl 資料庫。
  3. 在資料表清單中,按一下 regional_sales 資料表。
  4. 在資料表的左側導覽選單中,按一下「資料」分頁標籤。

710e41c80bdc31c4.png

  1. 原本來自 Databricks 的匯總銷售資料現在應該已載入,並可在 Spanner 資料表中使用。這些資料現在位於作業系統中,可供即時應用程式使用、用於資訊主頁,或透過 API 查詢。

f1201d6605b2a527.png

分析資料和營運資料之間的鴻溝已成功弭平。

9. 清除

完成本實驗室後,請移除所有新增的資料表和儲存的資料。

清理 Spanner 資料表

  1. 前往 Spanner
  2. 從名為「databricks-retl」的清單中,點選用於本實驗室的執行個體。

aa32380b601fdb87.png

  1. 在執行個體頁面中,按一下 5fc4696b82a79013.png
  2. 在彈出的確認對話方塊中輸入 databricks-retl,然後按一下 ef9e3709dcad2683.png

清除 GCS

  1. 前往 GCS
  2. 選取左側選單中的 b0aeb28c98f21942.png
  3. 選取 ``codelabs_retl_databricks bucket

e4f33fbebb892229.png

  1. 選取後,按一下頂端橫幅顯示的 1f0075ce292003ff.png 按鈕

384fe0801a23bfe5.png

  1. 在彈出的確認對話方塊中輸入 DELETE,然後按一下 ef9e3709dcad2683.png

清除 Databricks

刪除目錄/結構定義/資料表

  1. 登入 Databricks 執行個體
  2. 按一下左側選單中的 20bae9c2c9097306.png
  3. 從目錄清單中選取先前建立的 fc566eb3fddd7477.png
  4. 在「結構定義」清單中,選取已建立的 deb927c01e9e76d0.png
  5. 從表格清單中選取先前建立的 332d33ee48a5897c.png
  6. 按一下 df6dbe6356f141c6.png 展開表格選項,然後選取 Delete
  7. 在確認對話方塊中按一下 3951711057fe3048.png 即可刪除表格
  8. 刪除資料表後,系統會將您帶回架構頁面
  9. 按一下 df6dbe6356f141c6.png 展開結構定義選項,然後選取 Delete
  10. 在確認對話方塊中按一下 3951711057fe3048.png,刪除結構定義
  11. 刪除架構後,系統會將你帶回目錄頁面
  12. 如果存在 default 架構,請再次按照步驟 4 到 11 刪除。
  13. 在目錄頁面中,按一下 df6dbe6356f141c6.png 展開目錄選項,然後選取 Delete
  14. 在確認對話方塊中按一下 3951711057fe3048.png,即可刪除目錄

刪除外部資料位置 / 憑證

  1. 在「目錄」畫面中,按一下 32d5a94ae444cd8e.png
  2. 如果沒有看到 External Data 選項,請改為在 Connect 下拉式選單中尋找 External Location
  3. 按一下先前建立的 retl-gcs-location 外部資料位置
  4. 在外部地點頁面中,按一下 df6dbe6356f141c6.png 展開地點選項,然後選取 Delete
  5. 在確認對話方塊中按一下 3951711057fe3048.png,刪除外部位置
  6. 按一下 e03562324c0ba85e.png
  7. 按一下先前建立的 retl-gcs-credential
  8. 在憑證頁面中,按一下 df6dbe6356f141c6.png 展開憑證選項,然後選取 Delete
  9. 在確認對話方塊中按一下 3951711057fe3048.png,即可刪除憑證。

10. 恭喜

恭喜您完成本程式碼研究室。

涵蓋內容

  • 如何將資料載入 Databricks 做為 Iceberg 資料表
  • 如何建立 GCS 值區
  • 如何以 Iceberg 格式將 Databricks 資料表匯出至 GCS
  • 如何從 GCS 中的 Iceberg 資料表,在 BigQuery 中建立 BigLake 外部資料表
  • 如何設定 Spanner 執行個體
  • 如何將 BigQuery 中的 BigLake 外部資料表載入 Spanner