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

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

簡介

在本程式碼研究室中,您將從 Snowflake 建構 Reverse ETL 管道至 Spanner。傳統上,ETL (擷取、轉換、載入) 管道會將資料從作業資料庫移至 Snowflake 等資料倉儲,以供分析。反向 ETL 管道則相反,會將經過處理的精選資料資料倉儲移回營運系統,用於支援應用程式、提供使用者功能,或用於即時決策。

目標是將匯總資料集從 Snowflake Iceberg 資料表移至 Spanner。Spanner 是全球分散式關聯資料庫,非常適合高可用性應用程式。

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

  1. 以 Iceberg 格式將 Snowflake 資料匯出至 Google Cloud Storage (GCS):
  • 第一步是以開放且定義完善的格式,從 Snowflake 匯出資料。資料表會以 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. BigQuery 至 Spanner:
  • 最後一個步驟是將資料從 BigQuery 移至 Spanner。您將使用 BigQuery 的強大功能 (稱為「EXPORT DATA 查詢」) 完成這項工作,也就是「反向 ETL」步驟。
  • 運作準備:Spanner 專為交易工作負載設計,可為應用程式提供同步一致性和高可用性。將資料移至 Spanner 後,需要低延遲點查的使用者導向應用程式、API 和其他作業系統,就能存取這些資料。
  • 可擴充性:這個模式可充分運用 BigQuery 的分析能力處理大型資料集,然後透過 Spanner 的全球可擴充基礎架構有效提供結果。

服務和術語

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

課程內容

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

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

必要條件

  • Snowflake 帳戶
  • 如要從 BigQuery 匯出至 Spanner,必須使用 Google Cloud 帳戶,並具備 Enterprise 級以上的預訂
  • 透過網路瀏覽器存取 Google Cloud 控制台
  • 用於執行 Google Cloud CLI 指令的終端機
  • 如果 Google Cloud 機構已啟用 iam.allowedPolicyMemberDomains 政策,管理員可能需要授予例外狀況,允許來自外部網域的服務帳戶。我們會在後續步驟中說明相關內容 (如適用)。

限制

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

從 Snowflake 遷移至 Iceberg

Snowflake 和 Iceberg 的資料欄資料類型不同。如要瞭解如何在這兩種格式之間轉換,請參閱 Snowflake 說明文件

從 Iceberg 遷移至 BigQuery

使用 BigQuery 查詢 Iceberg 資料表時,會有一些限制。如需完整清單,請參閱 BigQuery 說明文件。請注意,目前不支援 BIGNUMERICINTERVALJSONRANGEGEOGRAPHY 等型別。

BigQuery 至 Spanner

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

  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME

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

  • BIGNUMERIC

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

Snowflake

在本程式碼研究室中,您可以使用現有的 Snowflake 帳戶,或設定免費試用帳戶。

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

設定可重複使用的屬性

本實驗室會重複使用幾個值。為簡化這項作業,我們會將這些值設為殼層變數,以供日後使用。

  • GCP_REGION - GCP 資源所在的特定地區。如要查看區域清單,請按這裡
  • GCP_PROJECT - 要使用的 GCP 專案 ID。
  • GCP_BUCKET_NAME:要建立的 GCS 值區名稱,也是儲存資料檔案的位置。
export GCP_REGION = <GCP REGION HERE> 
export GCP_PROJECT= <GCP PROJECT HERE>
export GCS_BUCKET_NAME = <GCS BUCKET NAME HERE>
export SPANNER_INSTANCE = <SPANNER INSTANCE ID HERE>
export SPANNER_DB = <SPANNER DATABASE ID HERE>

Google Cloud 專案

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

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

gcloud projects create $GCP_PROJECT
gcloud config set project $GCP_PROJECT

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

設定 Spanner

如要開始使用 Spanner,您需要佈建執行個體和資料庫。如要瞭解如何設定及建立 Spanner 執行個體,請參閱這篇文章

建立執行個體

gcloud spanner instances create $SPANNER_INSTANCE \
--config=regional-$GCP_REGION \
--description="Codelabs Snowflake RETL" \
--processing-units=100 \
--edition=ENTERPRISE

建立資料庫

gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE

3. 建立 Google Cloud Storage bucket

Google Cloud Storage (GCS) 會用於儲存 Snowflake 產生的 Parquet 資料檔案和 Iceberg 中繼資料。如要這麼做,請先建立新 bucket 做為檔案目的地。在本機電腦的「終端機」視窗中,按照下列步驟操作。

建立 bucket

使用下列指令在特定區域 (例如 us-central1) 建立 Storage 值區。

gcloud storage buckets create gs://$GCS_BUCKET_NAME --location=$GCP_REGION

確認已建立 bucket

該指令成功執行後,請列出所有 bucket,藉此檢查結果。新 bucket 應會顯示在結果清單中。值區參照通常會在值區名稱前面加上 gs:// 前置字元。

gcloud storage ls | grep gs://$GCS_BUCKET_NAME

測試寫入權限

這個步驟可確保本機環境已正確通過驗證,並具備將檔案寫入新建立值區的必要權限。

echo "Hello, GCS" | gcloud storage cp - gs://$GCS_BUCKET_NAME/hello.txt

驗證上傳的檔案

列出值區中的物件。系統應會顯示剛上傳檔案的完整路徑。

gcloud storage ls gs://$GCS_BUCKET_NAME

您應該會看到以下的輸出內容:

gs://$GCS_BUCKET_NAME/hello.txt

如要查看 bucket 中物件的內容,可以使用 gcloud storage cat

gcloud storage cat gs://$GCS_BUCKET_NAME/hello.txt

檔案內容應會顯示:

Hello, GCS

清除測試檔案

Cloud Storage bucket 現在已設定完成。現在可以刪除臨時測試檔案。

gcloud storage rm gs://$GCS_BUCKET_NAME/hello.txt

輸出內容應會確認刪除:

Removing gs://$GCS_BUCKET_NAME/hello.txt...
/ [1 objects]
Operation completed over 1 objects.

4. 從 Snowflake 匯出至 GCS

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

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

允許 Snowflake 存取 Google Cloud Storage

如要允許 Snowflake 將資料寫入 GCS bucket,必須建立「外部磁碟區」和必要的「權限」

  • 外部磁碟區是 Snowflake 物件,可提供 GCS 值區中特定位置的安全連結。它本身不會儲存資料,而是保留 Snowflake 存取雲端儲存空間所需的設定。
  • 為確保安全,雲端儲存空間值區預設為私密。建立外部磁碟區時,Snowflake 會產生專用的服務帳戶。這個服務帳戶必須具備讀取及寫入 bucket 的權限。

建立資料庫

  1. 在左側選單的「Horizon Catalog」下方,將游標懸停在「Catalog」上,然後點選「Database Explorer」
  2. 前往「資料庫」頁面後,按一下右上方的「+ 資料庫」按鈕。
  3. 將新資料庫命名為 codelabs_retl_db

建立工作表

如要對資料庫執行 SQL 指令,您需要使用工作表。

如要建立工作表,請按照下列步驟操作:

  1. 在左側選單的「處理資料」下方,將游標懸停在「專案」上,然後點選「工作區」
  2. 在「我的工作區」側邊列下方,按一下「+ 新增」按鈕,然後選取「SQL 檔案」

建立外部磁碟區

在 Snowflake 工作表執行下列指令,建立磁碟區。

CREATE EXTERNAL VOLUME codelabs_retl_ext_vol
STORAGE_LOCATIONS = 
(
  (
    NAME = 'codelabs_retl_ext_vol'
    STORAGE_PROVIDER = 'GCS'
    STORAGE_BASE_URL = 'gcs://<Your bucket name>/snowflake_extvol'
  )
); 

取得 Snowflake 服務帳戶

DESC (describe) 新建立的外部磁碟區,取得 Snowflake 為該磁碟區產生的專屬服務帳戶。

DESC EXTERNAL VOLUME codelabs_retl_ext_vol;
  1. 在結果窗格中,尋找 json 屬性,找出包含以 "NAME":"codelabs_retl_ext_vol" 開頭的 JSON 字串的 property_value 項目
  2. 在 JSON 物件中找出 STORAGE_GCP_SERVICE_ACCOUNT 屬性,並複製其值 (看起來會像是電子郵件地址)。這是需要存取 GCS bucket 的服務帳戶 ID。
  3. 將這個服務帳戶儲存至殼層執行個體中的環境變數,以供後續重複使用
export GCP_SERVICE_ACCOUNT=<Your service account>

將 GCS 權限授予 Snowflake

現在,必須授予 Snowflake 服務帳戶寫入 GCS bucket 的權限。

gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
    --member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
    --role="roles/storage.objectAdmin"

gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
    --member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
    --role="roles/storage.legacyBucketReader"

在 Snowflake 中驗證存取權

返回 Snowflake 工作表,執行下列指令,確認 Snowflake 現在可以順利連線至 GCS bucket。

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('codelabs_retl_ext_vol');

結果應為包含 "success":true 的 JSON 物件。

如要進一步瞭解 Snowflake 中的外部磁碟區,請參閱官方說明文件

匯出範例訂單資料

現在您可以在 Snowflake 中建立 Iceberg 資料表。下列指令會指示 Snowflake 執行查詢,並以 Iceberg 格式將結果儲存在 GCS 中。資料檔案為 Parquet 格式,中繼資料為 Avro 和 JSON 格式,所有檔案都會儲存在 codelabs_retl_ext_vol 外部磁碟區定義的位置。

建立資料庫

  1. 在左側選單的「Horizon Catalog」下方,將游標懸停在「Catalog」上,然後點選「Database Explorer」
  2. 前往「資料庫」頁面後,按一下右上方的「+ 資料庫」按鈕。
  3. 將新資料庫命名為 codelabs_retl_db
USE DATABASE codelabs_retl_db; 

CREATE ICEBERG TABLE REGIONAL_SALES_ICEBERG (
    NATION_NAME STRING,
    MARKET_SEGMENT STRING,
    ORDER_YEAR INTEGER,
    ORDER_PRIORITY STRING,
    TOTAL_ORDER_COUNT INTEGER,
    TOTAL_REVENUE NUMBER(24,2),
    UNIQUE_CUSTOMER_COUNT INTEGER
) 
EXTERNAL_VOLUME = 'codelabs_retl_ext_vol'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'regional_sales_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 SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.orders AS o
    INNER JOIN SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.customer AS c 
        ON o.o_custkey = c.c_custkey
    INNER JOIN SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.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
);

如要進一步瞭解如何使用 Snowflake 建立及管理 Iceberg 資料表,請參閱官方說明文件

在 GCP 中驗證資料

現在請檢查 GCS bucket。您應該會看到 Snowflake 建立的檔案。這表示匯出作業已順利完成。Iceberg 中繼資料會位於 metadata 資料夾中,實際資料則會以 Parquet 檔案的形式位於 data 資料夾中。

gcloud storage ls "gs://$GCS_BUCKET_NAME/snowflake_extvol/**"

確切的檔案名稱會有所不同,但結構應如下所示:

gs://$GCS_BUCKET_NAME/snowflake_extvol/
gs://$GCS_BUCKET_NAME/snowflake_extvol/regional_sales_iceberg.snvrAWuR/data/snow_cbsKIRmdDmo_wLg128fugxg_0_2_009.parquet
...
gs://$GCS_BUCKET_NAME/snowflake_extvol/regional_sales_iceberg.snvrAWuR/metadata/00001-62f831ff-6708-4494-94c5-c891b7ad447f.metadata.json
...

資料現在已從 Snowflake 複製到 Google Cloud Storage,並採用 Iceberg 格式。

我們有了這份清單後,請將 metadata.json 檔案儲存至環境變數,稍後會用到。

export GCS_METADATA_JSON=$(gcloud storage ls "gs://$GCS_BUCKET_NAME/snowflake_extvol/**" | grep .metadata.json)

5. 設定 BigQuery 外部資料表

Iceberg 資料表現在位於 Google Cloud Storage 中,下一步是讓 BigQuery 能夠存取該資料表。您可以建立 BigLake 外部資料表來完成這項操作。

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

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

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

設定 Google Cloud Storage 連線

首先,系統會建立連線,讓 BigQuery 存取 GCS。這項指令會在 BigQuery 中建立連線資源。

bq mk \
  --connection \
  --project_id=$GCP_PROJECT \
  --location=$GCP_REGION \
  --connection_type=CLOUD_RESOURCE \
  codelabs-retl-connection

成功訊息如下所示:

Connection 12345678.region.codelabs-retl-connection successfully created

如要進一步瞭解 BigQuery 中的 Cloud 資源連線,請參閱 Google Cloud 說明文件

授權 BigQuery 連線讀取資料

新的 BigQuery 連線有自己的服務帳戶,需要具備從 Google Cloud Storage 值區讀取資料的權限。

1. 取得連線服務帳戶

首先,請從剛建立的連線取得服務帳戶 ID:

bq show \
  --location $GCP_REGION \
  --connection codelabs-retl-connection

結果會顯示相符連線的表格。

請將 serviceAccountId 設為環境變數,以供後續使用。

export GCP_BQ_SERVICE_ACCOUNT=<Your service account email>

2. 授予權限

執行下列指令,授權服務帳戶查看 GCS bucket 中的資料。

gcloud storage buckets add-iam-policy-binding \
  gs://$GCS_BUCKET_NAME \
  --member serviceAccount:$GCP_BQ_SERVICE_ACCOUNT \
  --role roles/storage.objectViewer

建立外部資料表

現在,請在 BigQuery 中建立 BigLake 外部資料表。這項指令不會移動任何資料。這項操作只會建立指向 GCS 中現有資料的指標,您需要 Snowflake 建立的其中一個 .metadata.json 檔案路徑。

bq mk --dataset --location=$GCP_REGION codelabs_retl

bq mk \
    --table \
    --location=$GCP_REGION \
--external_table_definition=ICEBERG=$GCS_METADATA_JSON@projects/$GCP_PROJECT/locations/$GCP_REGION/connections/codelabs-retl-connection \
    codelabs_retl.regional_sales

在 BigQuery 中驗證資料

現在,您可以使用標準 SQL 查詢這個資料表,就像查詢任何其他 BigQuery 資料表一樣。BigQuery 會使用連線,即時從 GCS 讀取 Parquet 檔案。

bq query \
  --location=$GCP_REGION \
  --nouse_legacy_sql "SELECT * FROM \`$GCP_PROJECT.codelabs_retl.regional_sales\` LIMIT 10;"

6. 將資料從 BigQuery 匯入 Spanner:最後一個步驟

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

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

程序如下:

  1. 在 Spanner 資料庫中建立符合資料結構的資料表結構定義。
  2. 執行 BigQuery EXPORT DATA 查詢,將資料從 BigLake 資料表直接載入 Spanner 資料表。

建立 Spanner 資料表

從 BigQuery 移轉資料前,必須先在 Spanner 中建立具有相容結構定義的目的地資料表。

gcloud spanner databases ddl update $SPANNER_DB \
  --instance=$SPANNER_INSTANCE \
  --ddl="$(cat <<EOF
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);
EOF
)"

從 BigQuery 匯出資料

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

這項查詢專為這類情境設計。可有效率地將資料從 BigQuery 資料表 (包括 BigLake 資料表等外部資料表) 匯出至外部目的地。在本例中,目的地是 Spanner 資料表。

bq query --location=$GCP_REGION --use_legacy_sql=false <<EOF
EXPORT DATA OPTIONS (
uri="https://spanner.googleapis.com/projects/${GCP_PROJECT}/instances/${SPANNER_INSTANCE}/databases/${SPANNER_DB}",
  format='CLOUD_SPANNER',
  spanner_options="""{ 
      "table": "regional_sales", 
      "priority": "HIGH" 
      }"""
) AS 
SELECT * FROM \`${PROJECT_ID}.codelabs_retl.regional_sales\`
EOF

查詢完成後,「結果」窗格應會顯示「更新完成」。

7. 驗證 Spanner 中的資料

恭喜!已成功建構及執行完整的 Reverse ETL 管道。最後一個步驟是確認資料是否已如預期匯入 Spanner。

gcloud spanner databases execute-sql \
  --instance=$SPANNER_INSTANCE \
  $SPANNER_DB \
  --sql='SELECT * FROM regional_sales LIMIT 10'

匯入的範例資料會如要求顯示:

nation_name  market_segment  order_year  order_priority   total_order_count  total_revenue  unique_customer_count
ALGERIA      AUTOMOBILE      1992        1-URGENT         375                59232423.66    298
ALGERIA      AUTOMOBILE      1992        2-HIGH           328                47371891.08    269
ALGERIA      AUTOMOBILE      1992        3-MEDIUM         346                52823195.87    262
ALGERIA      AUTOMOBILE      1992        4-NOT SPECIFIED  365                52935998.34    288
ALGERIA      AUTOMOBILE      1992        5-LOW            380                54920263.68    293
ALGERIA      AUTOMOBILE      1993        1-URGENT         394                63145618.78    312
ALGERIA      AUTOMOBILE      1993        2-HIGH           340                50737488.4     277
ALGERIA      AUTOMOBILE      1993        3-MEDIUM         383                55871057.46    298
ALGERIA      AUTOMOBILE      1993        4-NOT SPECIFIED  365                56424662.05    291
ALGERIA      AUTOMOBILE      1993        5-LOW            363                54673249.06    283

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

8. 清除

清除 Spanner

刪除 Spanner 資料庫和執行個體

gcloud spanner instances delete $SPANNER_INSTANCE

清除 GCS

刪除為代管資料而建立的 GCS Bucket

gcloud storage rm --recursive gs://$GCS_BUCKET_NAME

清除 BigQuery

bq rm -r codelabs_retl
bq rm --connection --location=$GCP_REGION codelabs-retl-connection

清理 Snowflake

捨棄資料庫

  1. 在左側選單的「Horizon Catalog」下方,將游標懸停在「Catalog」上,然後點選「Database Explorer」
  2. 按一下 CODELABS_RETL_DB 資料庫右側的「...」,展開選項並選取「Drop」
  3. 在彈出的確認對話方塊中,選取「Drop Database」

刪除活頁簿

  1. 在左側選單的「處理資料」下方,將游標懸停在「專案」上,然後點選「工作區」
  2. 在「我的工作區」側邊欄中,將滑鼠游標懸停在您用於本實驗室的不同工作區檔案上,顯示「...」其他選項,然後點選該選項
  3. 選取「刪除」,然後在彈出的確認對話方塊中再次選取「刪除」
  4. 針對您為本實驗室建立的所有 SQL 工作區檔案執行這項操作。

刪除外部磁碟區

  1. 在左側選單的「Horizon Catalog」下方,將游標懸停在「Catalog」上,然後點選「External Data」
  2. 按一下 CODELABS_RETL_EXT_VOL 右側的 227b3e306c3d609d.png,然後選取「卸除外部磁碟區」,接著在確認對話方塊中再次點選「卸除外部磁碟區」

9. 恭喜

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

涵蓋內容

  • 如何將資料載入 Snowflake
  • 如何建立 GCS 值區
  • 如何以 CSV 格式將 Snowflake 資料表匯出至 GCS
  • 如何設定 Spanner 執行個體
  • 如何使用 Dataflow 將 CSV 資料表載入 Spanner