Reverse ETL จาก Snowflake ไปยัง Spanner โดยใช้ CSV

1. สร้างไปป์ไลน์ Reverse ETL จาก Snowflake ไปยัง Spanner โดยใช้ Google Cloud Storage และ Dataflow

บทนำ

ใน Lab นี้ เราจะสร้างไปป์ไลน์ Reverse ETL โดยปกติแล้ว ไปป์ไลน์ ETL (Extract, Transform, Load) จะย้ายข้อมูลจากฐานข้อมูลการดำเนินงานไปยังคลังข้อมูล เช่น Snowflake เพื่อการวิเคราะห์ ไปป์ไลน์ Reverse ETL จะทําตรงกันข้าม นั่นคือย้ายข้อมูลที่ดูแลจัดการและประมวลผลแล้วจากคลังข้อมูลกลับไปยังระบบปฏิบัติการ ซึ่งจะช่วยขับเคลื่อนแอปพลิเคชัน ให้บริการฟีเจอร์ที่แสดงต่อผู้ใช้ หรือใช้ในการตัดสินใจแบบเรียลไทม์

เป้าหมายคือการย้ายชุดข้อมูลตัวอย่างจากตาราง Snowflake ไปยัง Spanner ซึ่งเป็นฐานข้อมูลเชิงสัมพันธ์ที่กระจายอยู่ทั่วโลกและเหมาะสำหรับแอปพลิเคชันที่มีความพร้อมใช้งานสูง

โดยใช้ Google Cloud Storage (GCS) และ Dataflow เป็นขั้นตอนกลาง ต่อไปนี้คือรายละเอียดของโฟลว์และเหตุผลที่อยู่เบื้องหลังสถาปัตยกรรมนี้

  1. Snowflake ไปยัง Google Cloud Storage (GCS) ในรูปแบบ CSV:
  • ขั้นตอนแรกคือการนำข้อมูลออกจาก Snowflake ในรูปแบบเปิดที่เป็นสากล การส่งออกเป็น CSV เป็นวิธีที่ใช้กันทั่วไปและตรงไปตรงมาในการสร้างไฟล์ข้อมูลแบบพกพา เราจะจัดเตรียมไฟล์เหล่านี้ใน GCS ซึ่งเป็นโซลูชันพื้นที่เก็บข้อมูลออบเจ็กต์ที่ปรับขนาดได้และมีความทนทาน
  1. GCS ไปยัง Spanner (ผ่าน Dataflow):
  • เราใช้ Google Dataflow ซึ่งเป็นบริการประมวลผลข้อมูลที่มีการจัดการเต็มรูปแบบแทนการเขียนสคริปต์ที่กำหนดเองเพื่ออ่านจาก GCS และเขียนไปยัง Spanner Dataflow มีเทมเพลตที่สร้างไว้ล่วงหน้าสำหรับงานประเภทนี้โดยเฉพาะ การใช้เทมเพลต "ข้อความ GCS ไปยัง Cloud Spanner" ช่วยให้สามารถนำเข้าข้อมูลแบบคู่ขนานที่มีปริมาณงานสูงได้โดยไม่ต้องเขียนโค้ดการประมวลผลข้อมูล ซึ่งช่วยประหยัดเวลาในการพัฒนาได้อย่างมาก

สิ่งที่คุณจะได้เรียนรู้

  • วิธีโหลดข้อมูลลงใน Snowflake
  • วิธีสร้างที่เก็บข้อมูล GCS
  • วิธีส่งออกตาราง Snowflake ไปยัง GCS ในรูปแบบ CSV
  • วิธีตั้งค่าอินสแตนซ์ Spanner
  • วิธีโหลดตาราง CSV ไปยัง Spanner ด้วย Dataflow

2. การตั้งค่า ข้อกำหนด และข้อจำกัด

ข้อกำหนดเบื้องต้น

  • บัญชี Snowflake
  • บัญชี Google Cloud ที่เปิดใช้ Spanner, Cloud Storage และ Dataflow API
  • สิทธิ์เข้าถึง Google Cloud Console ผ่านเว็บเบราว์เซอร์
  • เทอร์มินัลที่ติดตั้ง Google Cloud CLI
  • หากองค์กร Google Cloud มีiam.allowedPolicyMemberDomainsนโยบายที่เปิดใช้ ผู้ดูแลระบบอาจต้องให้ข้อยกเว้นเพื่ออนุญาตบัญชีบริการจากโดเมนภายนอก ซึ่งจะอธิบายในขั้นตอนถัดไป (หากมี)

สิทธิ์ IAM ของ Google Cloud Platform

บัญชี Google จะต้องมีสิทธิ์ต่อไปนี้เพื่อดำเนินการทุกขั้นตอนในโค้ดแล็บนี้

บัญชีบริการ

iam.serviceAccountKeys.create

อนุญาตให้สร้างบัญชีบริการ

Spanner

spanner.instances.create

อนุญาตให้สร้างอินสแตนซ์ Spanner ใหม่

spanner.databases.create

อนุญาตให้เรียกใช้คำสั่ง DDL เพื่อสร้าง

spanner.databases.updateDdl

อนุญาตให้เรียกใช้คำสั่ง DDL เพื่อสร้างตารางในฐานข้อมูล

Google Cloud Storage

storage.buckets.create

อนุญาตให้สร้างที่เก็บข้อมูล GCS ใหม่เพื่อจัดเก็บไฟล์ Parquet ที่ส่งออก

storage.objects.create

อนุญาตให้เขียนไฟล์ Parquet ที่ส่งออกไปยังที่เก็บข้อมูล GCS

storage.objects.get

อนุญาตให้ BigQuery อ่านไฟล์ Parquet จากที่เก็บข้อมูล GCS

storage.objects.list

อนุญาตให้ BigQuery แสดงรายการไฟล์ Parquet ในที่เก็บข้อมูล GCS

Dataflow

Dataflow.workitems.lease

อนุญาตให้เคลมรายการงานจาก Dataflow

Dataflow.workitems.sendMessage

อนุญาตให้ผู้ปฏิบัติงาน Dataflow ส่งข้อความกลับไปยังบริการ Dataflow

Logging.logEntries.create

อนุญาตให้ Worker ของ 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

ข้อจำกัด

โปรดทราบถึงความแตกต่างของประเภทข้อมูลเมื่อย้ายข้อมูลระหว่างระบบ

  • Snowflake เป็น CSV: เมื่อส่งออก ระบบจะแปลงประเภทข้อมูล Snowflake เป็นการแสดงข้อความมาตรฐาน
  • CSV ไปยัง Spanner: เมื่อนำเข้า คุณต้องตรวจสอบว่าประเภทข้อมูล Spanner เป้าหมายเข้ากันได้กับการแสดงสตริงในไฟล์ CSV ห้องทดลองนี้จะแนะนำการแมปประเภทที่ใช้กันโดยทั่วไป

ตั้งค่าพร็อพเพอร์ตี้ที่นำมาใช้ซ้ำได้

คุณจะต้องใช้ค่าบางค่าซ้ำๆ ตลอดแล็บนี้ เราจะตั้งค่าเหล่านี้เป็นตัวแปร Shell เพื่อใช้ในภายหลังเพื่อให้ง่ายขึ้น

  • GCP_REGION - ภูมิภาคที่เฉพาะเจาะจงซึ่งทรัพยากร GCP จะอยู่ ดูรายชื่อภูมิภาคได้ที่นี่
  • GCP_PROJECT - รหัสโปรเจ็กต์ GCP ที่จะใช้
  • GCP_BUCKET_NAME - ชื่อที่เก็บข้อมูล GCS ที่จะสร้างและที่จัดเก็บไฟล์ข้อมูล
  • SPANNER_INSTANCE - ชื่อที่จะกำหนดให้กับอินสแตนซ์ Spanner
  • SPANNER_DB - ชื่อที่จะกำหนดให้กับฐานข้อมูลภายในอินสแตนซ์ Spanner
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

โปรเจ็กต์ Google Cloud

โปรเจ็กต์คือหน่วยพื้นฐานของการจัดระเบียบใน Google Cloud หากผู้ดูแลระบบได้ระบุไว้ให้ใช้ คุณอาจข้ามขั้นตอนนี้ได้

คุณสร้างโปรเจ็กต์ได้โดยใช้ CLI ดังนี้

gcloud projects create $GCP_PROJECT
gcloud config set project $GCP_PROJECT

ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและจัดการโปรเจ็กต์ได้ที่นี่

3. ตั้งค่า 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

4. สร้างที่เก็บข้อมูล Google Cloud Storage

ระบบจะใช้ Google Cloud Storage (GCS) เพื่อจัดเก็บไฟล์ข้อมูล CSV ที่สร้างโดย Snowflake ชั่วคราวก่อนที่จะนำเข้าสู่ Spanner

สร้างที่เก็บข้อมูล

ใช้คำสั่งต่อไปนี้เพื่อสร้างที่เก็บข้อมูลในภูมิภาคที่เฉพาะเจาะจง (เช่น us-central1)

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

ยืนยันการสร้างที่เก็บข้อมูล

เมื่อคำสั่งทำงานสำเร็จแล้ว ให้ตรวจสอบผลลัพธ์โดยแสดงรายการที่เก็บข้อมูลทั้งหมด ถังใหม่ควรปรากฏในรายการผลลัพธ์ โดยปกติแล้วการอ้างอิงที่เก็บข้อมูลจะแสดงพร้อมคำนำหน้า 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

หากต้องการดูเนื้อหาของออบเจ็กต์ในที่เก็บข้อมูล คุณสามารถใช้ gcloud storage cat ได้

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

เนื้อหาของไฟล์ควรแสดงให้เห็นดังนี้

Hello, GCS

ล้างไฟล์ทดสอบ

ตอนนี้ระบบได้ตั้งค่าที่เก็บข้อมูล Cloud Storage แล้ว ตอนนี้คุณลบไฟล์ทดสอบชั่วคราวได้แล้ว

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

เอาต์พุตควรยืนยันการลบ

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

5. ส่งออกจาก Snowflake ไปยัง GCS

สำหรับแล็บนี้ เราจะใช้ชุดข้อมูล TPC-H ซึ่งเป็นเกณฑ์มาตรฐานระดับอุตสาหกรรมสำหรับระบบสนับสนุนการตัดสินใจ ชุดข้อมูลนี้พร้อมใช้งานโดยค่าเริ่มต้นในบัญชี Snowflake ทั้งหมด

เตรียมข้อมูลใน Snowflake

เข้าสู่ระบบบัญชี Snowflake แล้วสร้างเวิร์กชีตใหม่

คุณไม่สามารถส่งออกข้อมูล TPC-H ตัวอย่างที่ Snowflake จัดหาให้จากตำแหน่งที่แชร์ได้โดยตรงเนื่องจากสิทธิ์ ก่อนอื่นต้องคัดลอกORDERSตารางไปยังฐานข้อมูลและสคีมาแยกต่างหาก

สร้างฐานข้อมูล

  1. ในเมนูด้านซ้าย ภายใต้แคตตาล็อก Horizon ให้วางเมาส์เหนือแคตตาล็อก แล้วคลิกDatabase Explorer
  2. เมื่ออยู่ในหน้าฐานข้อมูล ให้คลิกปุ่ม + ฐานข้อมูลที่ด้านขวาบน
  3. ตั้งชื่อฐานข้อมูลใหม่ codelabs_retl_db

สร้างเวิร์กชีต

หากต้องการเรียกใช้คำสั่ง SQL กับฐานข้อมูล คุณจะต้องใช้เวิร์กชีต

วิธีสร้างเวิร์กชีต

  1. ในเมนูด้านซ้าย ภายใต้ทำงานกับข้อมูล ให้วางเมาส์เหนือโปรเจ็กต์ แล้วคลิกพื้นที่ทำงาน
  2. ในแถบด้านข้างพื้นที่ทำงานของฉัน ให้คลิกปุ่ม + เพิ่มใหม่ แล้วเลือกไฟล์ SQL
USE DATABASE codelabs_retl_db;

CREATE SCHEMA codelabs_retl_export;

CREATE TABLE codelabs_retl_export.regional_sales_csv 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;

SELECT COUNT(*) FROM regional_sales_csv;

เอาต์พุตควรระบุว่ามีการคัดลอก 4375 แถว

กำหนดค่า Snowflake เพื่อเข้าถึง GCS

หากต้องการอนุญาตให้ Snowflake เขียนข้อมูลไปยังที่เก็บข้อมูล GCS คุณต้องสร้างการผสานรวมพื้นที่เก็บข้อมูลและพื้นที่เก็บข้อมูลชั่วคราว

  • การผสานรวมพื้นที่เก็บข้อมูล: ออบเจ็กต์ Snowflake ที่จัดเก็บบัญชีบริการที่สร้างขึ้นและข้อมูลการตรวจสอบสิทธิ์สำหรับพื้นที่เก็บข้อมูลระบบคลาวด์ภายนอก
  • สเตจ: ออบเจ็กต์ที่มีชื่อซึ่งอ้างอิงถึงที่เก็บข้อมูลและเส้นทางที่เฉพาะเจาะจง โดยใช้การผสานรวมพื้นที่เก็บข้อมูลเพื่อจัดการการตรวจสอบสิทธิ์ ซึ่งเป็นตำแหน่งที่มีชื่อที่สะดวกสำหรับการดำเนินการโหลดและยกเลิกการโหลดข้อมูล

ก่อนอื่น ให้สร้างการผสานรวมที่เก็บข้อมูล

CREATE OR REPLACE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  -- Grant Snowflake permission to write to a specific path in your bucket.
  STORAGE_ALLOWED_LOCATIONS = ('gcs://<Your bucket name>/sample_orders');

จากนั้นอธิบายการผสานรวมเพื่อรับบัญชีบริการที่ Snowflake สร้างขึ้น

DESC STORAGE INTEGRATION gcs_int; 

ในผลลัพธ์ ให้คัดลอกค่าสำหรับ STORAGE_GCP_SERVICE_ACCOUNT โดยจะมีลักษณะคล้ายอีเมล

จัดเก็บบัญชีบริการนี้ไว้ในตัวแปรสภาพแวดล้อมในอินสแตนซ์เชลล์เพื่อนำกลับมาใช้ใหม่ในภายหลัง

export GCP_SERVICE_ACCOUNT=<Your service account>

ให้สิทธิ์ GCS แก่ Snowflake

ตอนนี้บัญชีบริการ Snowflake ต้องได้รับสิทธิ์เขียนไปยังที่เก็บข้อมูล GCS

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 สร้าง Stage ที่ใช้การผสานรวม แล้วใช้คำสั่ง COPY INTO เพื่อส่งออกข้อมูลตาราง SAMPLE_ORDERS ไปยัง Stage นั้น

CREATE OR REPLACE STAGE retl_gcs_stage
    URL = 'gcs://<Your bucket name>/regional_sales_csv'
    STORAGE_INTEGRATION = gcs_int
    -- Define the output file format
    FILE_FORMAT = (TYPE = 'CSV');

COPY INTO @retl_gcs_stage/regional_sales_csv
FROM (SELECT * FROM codelabs_retl_export.regional_sales_csv)
FILE_FORMAT = (TYPE = CSV, COMPRESSION = NONE);

ในแผงผลลัพธ์ rows_unloaded ควรแสดงค่าเป็น 1500000

ยืนยันข้อมูลใน GCS

ตรวจสอบที่เก็บข้อมูล GCS เพื่อดูไฟล์ที่ Snowflake สร้างขึ้น ซึ่งเป็นการยืนยันว่าการส่งออกสำเร็จ

gcloud storage ls gs://$GCS_BUCKET_NAME/regional_sales_csv/

คุณควรเห็นไฟล์ CSV ที่มีหมายเลขอย่างน้อย 1 ไฟล์

gs://your-bucket-name/regional_sales_csv/regional_sales_csv_0_0_0.csv
...

6. โหลดข้อมูลลงใน Spanner ด้วย Dataflow

เมื่อข้อมูลอยู่ใน GCS แล้ว ระบบจะใช้ Dataflow เพื่อนำเข้าไปยัง Spanner Dataflow คือบริการที่มีการจัดการครบวงจรของ Google Cloud สำหรับการประมวลผลข้อมูลแบบสตรีมและแบบกลุ่ม ระบบจะใช้เทมเพลต Google ที่สร้างไว้ล่วงหน้า ซึ่งออกแบบมาโดยเฉพาะสำหรับการนำเข้าไฟล์ข้อความจาก GCS ไปยัง Spanner

สร้างตาราง Spanner

ก่อนอื่น ให้สร้างตารางปลายทางใน Spanner สคีมาต้องเข้ากันได้กับข้อมูลในไฟล์ CSV

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
)"

สร้างไฟล์ Manifest ของ Dataflow

เทมเพลต Dataflow ต้องมีไฟล์ "manifest" นี่คือไฟล์ JSON ที่บอกเทมเพลตว่าไฟล์ข้อมูลต้นทางอยู่ที่ใดและควรโหลดไฟล์ลงในตาราง Spanner ใด

กำหนดและอัปโหลด regional_sales_manifest.json ใหม่ไปยังที่เก็บข้อมูล GCS โดยทำดังนี้

cat <<EOF | gcloud storage cp - gs://$GCS_BUCKET_NAME/regional_sales_manifest.json 
{ 
  "tables": [
    {
       "table_name": "regional_sales", 
       "file_patterns": [ 
         "gs://$GCS_BUCKET_NAME/regional_sales_csv/*.csv"
       ] 
    } 
  ] 
} 
EOF

เปิดใช้ Dataflow API

คุณต้องเปิดใช้ Dataflow ก่อนจึงจะใช้งานได้ โดยใช้

gcloud services enable dataflow.googleapis.com --project=$GCP_PROJECT

สร้างและเรียกใช้งาน Dataflow

ตอนนี้งานนำเข้าพร้อมทำงานแล้ว คำสั่งนี้จะเปิดใช้งานงาน Dataflow โดยใช้เทมเพลต GCS_Text_to_Cloud_Spanner

คำสั่งนี้ยาวและมีพารามิเตอร์หลายรายการ รายละเอียดมีดังนี้

–gcs-location

เส้นทางไปยังเทมเพลตที่สร้างไว้ล่วงหน้าใน GCS

–region

ภูมิภาคที่งาน Dataflow จะทำงาน

–parameters

instanceId, databaseId

อินสแตนซ์และฐานข้อมูล Spanner เป้าหมาย

importManifest

เส้นทาง GCS ไปยังไฟล์ Manifest ที่สร้างขึ้น

gcloud dataflow jobs run spanner-import-from-gcs \
  --gcs-location=gs://dataflow-templates/latest/GCS_Text_to_Cloud_Spanner \
  --region=$GCP_REGION \
  --staging-location=gs://$GCS_BUCKET_NAME/staging \
  --parameters \
instanceId=$SPANNER_INSTANCE,\
databaseId=$SPANNER_DB,\
importManifest=gs://$GCS_BUCKET_NAME/regional_sales_manifest.json,escape='\'

คุณตรวจสอบสถานะของงาน Dataflow ได้ด้วยคำสั่งต่อไปนี้

gcloud dataflow jobs list \
    --filter="name:spanner-import-from-gcs" \
    --region="$GCP_REGION" \
    --sort-by="~creationTime" \
    --limit=1

งานนี้จะใช้เวลาประมาณ 5 นาที

ยืนยันข้อมูลใน Spanner

เมื่องาน Dataflow สำเร็จแล้ว ให้ตรวจสอบว่าได้โหลดข้อมูลลงใน Spanner แล้ว

ก่อนอื่น ให้ตรวจสอบจำนวนแถว ควรเป็น 4375

gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT COUNT(*) FROM regional_sales;'

จากนั้น ให้ค้นหา 2-3 แถวเพื่อตรวจสอบข้อมูล

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

คุณควรเห็นข้อมูลที่นำเข้าจากตาราง Snowflake

7. การจัดระเบียบ

ล้างข้อมูล Spanner

ลบฐานข้อมูลและอินสแตนซ์ Spanner

gcloud spanner instances delete $SPANNER_INSTANCE

ล้างข้อมูลใน GCS

ลบที่เก็บข้อมูล GCS ที่สร้างขึ้นเพื่อโฮสต์ข้อมูล

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

ล้างข้อมูลใน Snowflake

ลดฐานข้อมูล

  1. ในเมนูด้านซ้าย ภายใต้แคตตาล็อก Horizon ให้วางเมาส์เหนือแคตตาล็อก แล้วคลิกDatabase Explorer
  2. คลิก ... ทางด้านขวาของฐานข้อมูล CODELABS_RETL_DB เพื่อขยายตัวเลือก แล้วเลือกทิ้ง
  3. ในกล่องโต้ตอบการยืนยันที่ปรากฏขึ้น ให้เลือกดรอปฐานข้อมูล

ลบเวิร์กบุ๊ก

  1. ในเมนูด้านซ้าย ภายใต้ทำงานกับข้อมูล ให้วางเมาส์เหนือโปรเจ็กต์ แล้วคลิกพื้นที่ทำงาน
  2. ในแถบด้านข้างพื้นที่ทำงานของฉัน ให้วางเมาส์เหนือไฟล์พื้นที่ทำงานต่างๆ ที่คุณใช้สำหรับแล็บนี้เพื่อแสดงตัวเลือกเพิ่มเติม ... แล้วคลิก
  3. เลือกลบ แล้วเลือกลบอีกครั้งในกล่องโต้ตอบการยืนยันที่ปรากฏขึ้น
  4. ทำเช่นนี้กับไฟล์พื้นที่ทำงาน SQL ทั้งหมดที่คุณสร้างขึ้นสำหรับแล็บนี้

8. ขอแสดงความยินดี

ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์

สิ่งที่เราได้พูดถึงไปแล้ว

  • วิธีโหลดข้อมูลลงใน Snowflake
  • วิธีสร้างที่เก็บข้อมูล GCS
  • วิธีส่งออกตาราง Snowflake ไปยัง GCS ในรูปแบบ CSV
  • วิธีตั้งค่าอินสแตนซ์ Spanner
  • วิธีโหลดตาราง CSV ไปยัง Spanner ด้วย Dataflow