從 BigQuery 到 AlloyDB 的零 ETL 資料聯盟

1. 總覽

第 1 部分中,我們已使用 Knowledge Catalog 和 DataScan,成功將混亂的非結構化 PDF 轉換為 BigQuery 中乾淨、智慧且結構化的表格。現在我們有穩固的資料倉儲。

快速回顧一下,在第 1 部分的實驗室中,我們以虛構的優格連鎖店為例,將 400 個非結構化 PDF 檔案 (包含文字、表格和圖片) 轉換為結構清楚的 BigQuery 資料表,並使用 BigQuery Knowledge Catalog 和 Dataplex 自動推斷資料表之間的關係。

建構項目

在本課程中,我們將設定 AlloyDB for PostgreSQL,並執行神奇的操作:直接將 BigQuery 資料聯合至 AlloyDB。也就是說,我們的交易式應用程式可以即時查詢資料倉儲資料,不必複製或重複任何資料。

開發人員必須在這個階段提出以下問題:

「如果資料已在 BigQuery 中,為何還要加入 AlloyDB?為什麼應用程式不直接對 BigQuery 執行 SELECT 陳述式?」

原因如下:

透過 Lakehouse Federation,您可以使用 AlloyDB 的查詢引擎,在同一個介面中,為應用程式的交易和分析工作負載提供支援。您也可以在 AlloyDB 上具體化或匯入這項資料,以便在應用程式中更快存取,並使用 AlloyDB AI資料欄引擎

您可以將 AlloyDB 做為交易資料庫,同時在 BigQuery 或 BigLake 中儲存大量資料。您的應用程式通常會分別與這兩個系統整合,以便存取這些不同 Google Cloud 服務中的資料。AlloyDB 的 Lakehouse Federation 可讓您使用 AlloyDB 實作的聯合查詢支援 (以外部資料包裝函式形式),透過 AlloyDB 的 SQL 介面存取 BigQuery 和 AlloyDB 資料。

我們不會建構脆弱的 ETL 管道,從 AlloyDB 查詢 BigQuery 資料,而是使用聯合查詢。AlloyDB 會做為統一端點,在需要時順暢地存取 BigQuery。

讓我們開始建構吧!

1a3f48f6d70b16ad.png

課程內容

  • 如何按一下按鈕,即可設定 AlloyDB 叢集、執行個體和網路
  • 如何設定擴充功能,為同盟做好準備
  • 如何從 BigQuery 設定身分聯盟至 AlloyDB
  • 立即測試

需求條件

  • 瀏覽器,例如 ChromeFirefox
  • 已啟用計費功能的 Google Cloud 專案。
  • 對 SQL 有基本瞭解。

2. 事前準備

建立專案

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能
  1. 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境。按一下 Google Cloud 控制台頂端的「啟用 Cloud Shell」。

「啟用 Cloud Shell」按鈕圖片

  1. 連至 Cloud Shell 後,請使用下列指令確認驗證已完成,專案也已設為獲派的專案 ID:
gcloud auth list
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令已瞭解您的專案。
gcloud config list project
  1. 如要驗證
gcloud auth login
  1. 如果未設定專案,請使用下列指令來設定:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project <YOUR_PROJECT_ID>
  1. 啟用必要的 API:執行下列指令,啟用所有必要的 API:
gcloud services enable alloydb.googleapis.com

常見錯誤與疑難排解

「幽靈專案」 症候群

您執行了 gcloud config set project,但實際上在控制台 UI 中查看的是其他專案。檢查左上方的下拉式選單中的專案 ID!

帳單 路障

您已啟用專案,但忘記帳單帳戶。AlloyDB 是高效能引擎,如果「油箱」(帳單) 空了,就無法啟動。

API 傳播 延遲

您點選了「啟用 API」,但指令列仍顯示 Service Not Enabled。等待 60 秒。雲端需要一點時間喚醒神經元。

配額 Quags

如果您使用全新的試用帳戶,可能會達到 AlloyDB 執行個體的區域配額。如果 us-central1 失敗,請嘗試 us-east1

3. 快速回顧第 1 部分的資料

在本節中,您需要確認從非結構化 PDF 擷取的結構化資料是否已匯入 BigQuery。如果你錯過了第 1 部分,或是沒有帳單帳戶,也沒關係,請完成下列步驟:

使用個人 Gmail 帳戶前往 Google Cloud 控制台,然後點選控制台右上角的「啟用 Cloud Shell」按鈕:

91567e2f55467574.png

然後按照下方「沒有帳單帳戶」一節的步驟操作:

現在資料已匯入 BigQuery,接下來請繼續下一個步驟。

4. 設定 AlloyDB 叢集、執行個體和網路

您可以使用網頁版快速入門應用程式,設定 AlloyDB 叢集、執行個體和其他依附元件。您可以按照本實驗室的步驟 2 到 4 操作,按一下按鈕即可完成設定:

https://codelabs.developers.google.com/quick-alloydb-setup

建立叢集後,請前往「叢集總覽」頁面,並從該處複製服務帳戶詳細資料。

7cd9d04e06c826d8.png

5. 設定權限

授予這個服務帳戶 BigQuery 權限

  1. 依序前往「IAM 與管理」>「身分與存取權管理」。
  2. 按一下「授予存取權」。
  3. 將 AlloyDB 服務帳戶地址貼到「新增主體」欄位。
  4. 指派下列角色:
  • BigQuery 資料檢視者 (roles/bigquery.dataViewer):可讀取資料。
  • BigQuery 使用者 (roles/bigquery.user):可執行查詢。
  • (選用,但建議使用) BigQuery 讀取工作階段使用者 (roles/bigquery.readSessionUser):透過 Storage Read API 讀取大型資料集時,可提升效率。

6. 連線至 AlloyDB 並啟用 BigQuery 擴充功能

現在,我們要連線至新的 AlloyDB 執行個體,設定同盟擴充功能。我們將使用 AlloyDB Studio 執行這項操作。

  1. 在叢集總覽頁面 (AlloyDB 控制台) 中,按一下「AlloyDB Studio」。

1dd78902dc2b4f39.png

  1. 使用您在 AlloyDB 快速設定步驟中設定的資料庫、使用者名稱和密碼進行連線。
  2. 連線後,在右側的「查詢編輯器」分頁中輸入下列陳述式,然後逐一執行:
CREATE EXTENSION IF NOT EXISTS  bigquery_fdw;

CREATE SERVER bigquery_server FOREIGN DATA WRAPPER bigquery_fdw;

CREATE USER MAPPING FOR postgres SERVER bigquery_server;
  1. 完成後,請前往左側的檔案總管窗格,然後向下捲動至 BigQuery 資料表:

efe4f8be930824aa.png

  1. 按一下 3 點圖示,然後按一下「連結 BigQuery 資料表」。
  2. 在開啟的「連結 BigQuery 資料表」彈出式視窗中,選取專案 ID 和 BigQuery 資料集名稱 (在第 1 部分中建立),您要從中查詢 AlloyDB 資料庫中的資料。

1cc345197b0fbddf.png

  1. 逐一選取每個資料表,將所有資料連結至 AlloyDB。這是為了驗證資料欄類型,確保 AlloyDB 支援這些類型。

如要使用 SQL 執行相同操作,而非透過點選方式:

CREATE FOREIGN TABLE <<TABLE_NAME>> (
      "cas_number" VARCHAR, "ingredient_name" VARCHAR, "max_moisture_percentage" DOUBLE PRECISION, "ph_range" VARCHAR, "purity_percentage" DOUBLE PRECISION, "shelf_life_months" BIGINT, "specific_gravity_range" VARCHAR
    ) SERVER "bigquery_server" OPTIONS (
      project '<<PROJECT_ID>>',
      dataset 'froyo_data',
      table '<<BQ_TABLE_NAME>>'
    );

魔法!

我們剛在 AlloyDB 中建立「外部資料表」。這些資料表的外觀和行為與一般 PostgreSQL 資料表相同,但不會儲存任何資料。當您查詢這些資料時,AlloyDB 會立即將查詢傳遞至 BigQuery、擷取結果,然後傳回給您。

7. 在 AlloyDB 中測試同盟

讓我們確認是否能直接從交易型 PostgreSQL 資料庫查詢龐大的 BigQuery 分析資料集。

在 AlloyDB Studio 中,執行查詢來找出「Midnight Swirl」的過敏原 (與第 1 部分提出的問題相同,但這次是透過 AlloyDB 查詢!):

SELECT
    p.product_name,
    i.ingredient_name,
    a.allergen_name
FROM
    consistsof c
INNER JOIN product p
    ON c.product_id = p.product_id
INNER JOIN ingredient i
    ON c.ingredient_id = i.ingredient_name
LEFT OUTER JOIN containsallergen a
    ON i.ingredient_id = a.ingredient_id
WHERE
    UPPER(p.product_name) LIKE '%MIDNIGHT%SWIRL%'
    AND a.allergen_name IS NOT NULL;

Boom. 您應該會看到與 BigQuery 中完全相同的結果。

7d0be18295c5dfbd.png

8. 清理

完成本實驗室後,請務必刪除 AlloyDB 叢集和執行個體。

這項作業應會清理叢集及其執行個體。

9. 恭喜您採用統一資料層!

請回想我們剛才完成的作業:

  1. 我們的交易應用程式 (在 AlloyDB 上執行) 可處理快速的並行使用者工作階段。
  2. 需要大量分析資料或歷來脈絡 (例如供應商詳細資料或複雜的成分對應) 時,就會查詢 BigQuery froyo_dataschema。
  3. 零 ETL。沒有資料管道中斷。沒有不同步的資料庫。我們在 BQ 中儲存一次,並在需要時進行運算。

現在分析和交易資料的基礎已穩固且相互連結,我們可以開始進行有趣的部分。

第 3 部分,我們將建構位於這個架構頂端的 Multi-Agent Application,以執行 Froyo 業務營運!