1. פיתוח צינור Reverse ETL מ-Snowflake ל-Spanner באמצעות Google Cloud Storage ו-BigQuery
מבוא
בשיעור הזה תלמדו איך ליצור צינור עיבוד נתונים של Reverse ETL מ-Snowflake ל-Spanner. באופן מסורתי, צינורות ETL (חילוץ, טרנספורמציה, טעינה) מעבירים נתונים ממסדי נתונים תפעוליים לתוך מחסן נתונים כמו Snowflake לצורך ניתוח. צינור ETL הפוך עושה את הפעולה ההפוכה: הוא מעביר נתונים מעובדים ומסודרים מ מחסן הנתונים בחזרה למערכות תפעוליות, שבהן אפשר להשתמש בנתונים כדי להפעיל אפליקציות, לספק תכונות שפונות למשתמשים או לקבל החלטות בזמן אמת.
המטרה היא להעביר מערך נתונים מצטבר מטבלת Snowflake Iceberg אל Spanner, מסד נתונים רלציוני מבוזר גלובלית שמתאים באופן אידיאלי לאפליקציות עם זמינות גבוהה.
כדי לעשות את זה, משתמשים ב-Google Cloud Storage (GCS) וב-BigQuery כשלבי ביניים. הנה פירוט של זרימת הנתונים וההיגיון מאחורי הארכיטקטורה הזו:
- מ-Snowflake אל Google Cloud Storage (GCS) בפורמט Iceberg:
- השלב הראשון הוא לייצא את הנתונים מ-Snowflake בפורמט פתוח ומוגדר היטב. הטבלה מיוצאת בפורמט Apache Iceberg. במהלך התהליך הזה, הנתונים הבסיסיים נכתבים כקבוצה של קבצי Parquet והמטא-נתונים של הטבלה (סכימה, מחיצות, מיקומי קבצים) נכתבים כקבצי JSON ו-Avro. העברת המבנה המלא של הטבלה ל-GCS מאפשרת ניוד של הנתונים וגישה אליהם מכל מערכת שמזהה את פורמט Iceberg.
- המרת טבלאות Iceberg ב-GCS לטבלה חיצונית של BigLake ב-BigQuery:
- במקום לטעון את הנתונים ישירות מ-GCS ל-Spanner, נעשה שימוש ב-BigQuery ככלי ביניים יעיל. תצרו טבלה חיצונית של BigLake ב-BigQuery שמפנה ישירות לקובץ המטא-נתונים של Iceberg ב-GCS. לגישה הזו יש כמה יתרונות:
- ללא שכפול נתונים: BigQuery קורא את מבנה הטבלה מהמטא-נתונים ומריץ שאילתות על קובצי הנתונים בפורמט Parquet במקום בלי להטמיע אותם, וכך חוסך זמן רב ועלויות אחסון.
- שאילתות מאוחדות: מאפשרות להריץ שאילתות SQL מורכבות על נתונים ב-GCS כאילו היו טבלה מקורית ב-BigQuery.
- מ-BigQuery ל-Spanner:
- השלב האחרון הוא להעביר את הנתונים מ-BigQuery ל-Spanner. כדי לעשות את זה, תשתמשו בתכונה עוצמתית ב-BigQuery שנקראת
EXPORT DATAשאילתה, שהיא השלב של "העברת נתונים הפוכה". - מוכנות תפעולית: Spanner מיועד לעומסי עבודה טרנזקציוניים, ומספק עקביות חזקה וזמינות גבוהה לאפליקציות. העברת הנתונים ל-Spanner מאפשרת גישה אליהם לאפליקציות שפונות למשתמשים, לממשקי API ולמערכות תפעוליות אחרות שנדרשות בהן בדיקות נקודתיות עם השהיה נמוכה.
- מדרגיות: התבנית הזו מאפשרת להשתמש ביכולות הניתוח של BigQuery כדי לעבד מערכי נתונים גדולים, ואז להציג את התוצאות בצורה יעילה באמצעות התשתית הגלובלית של Spanner, שניתנת להרחבה.
שירותים ומינוחים
- Snowflake – פלטפורמת נתונים בענן שמספקת מחסן נתונים כשירות.
- Spanner – מסד נתונים רלציוני מנוהל שמופץ באופן גלובלי.
- Google Cloud Storage – שירות אחסון ה-Blob של Google Cloud.
- BigQuery – מחסן נתונים (data warehouse) מנוהל וללא שרתים לניתוח נתונים.
- Iceberg – פורמט טבלה פתוח שהוגדר על ידי Apache ומספק הפשטה של פורמטים נפוצים של קובצי נתונים בקוד פתוח.
- Parquet – פורמט קובץ בינארי של נתונים עמודתיים בקוד פתוח מבית Apache.
מה תלמדו
- איך טוענים נתונים ל-Snowflake
- איך יוצרים קטגוריה ב-GCS
- איך מייצאים טבלה מ-Snowflake ל-GCS בפורמט Iceberg
- איך מגדירים מופע Spanner
- איך טוענים טבלאות חיצוניות של BigLake ב-BigQuery אל Spanner
2. הגדרה, דרישות ומגבלות
דרישות מוקדמות
- חשבון Snowflake
- כדי לייצא מ-BigQuery ל-Spanner, צריך חשבון Google Cloud עם הזמנה ברמה Enterprise או ברמה גבוהה יותר ב-BigQuery.
- גישה ל-Google Cloud Console דרך דפדפן אינטרנט
- טרמינל להרצת פקודות של Google Cloud CLI
- אם המדיניות
iam.allowedPolicyMemberDomainsמופעלת בארגון שלכם ב-Google Cloud, יכול להיות שאדמין יצטרך להעניק חריגה כדי לאפשר חשבונות שירות מדומיינים חיצוניים. הנושא הזה יוסבר בשלב מאוחר יותר, אם הוא רלוונטי.
מגבלות
חשוב להכיר מגבלות מסוימות ואי-תאימויות בין סוגי נתונים שעלולות להתרחש בצינור הזה.
פתית שלג לקרחון
סוגי הנתונים בעמודות שונים בין Snowflake לבין Iceberg. מידע על תרגום ביניהם זמין בתיעוד של Snowflake.
Iceberg ל-BigQuery
יש כמה מגבלות כשמשתמשים ב-BigQuery כדי לבצע שאילתות בטבלאות Iceberg. הרשימה המלאה זמינה במאמרי העזרה של BigQuery. שימו לב שסוגים כמו BIGNUMERIC, INTERVAL, JSON, RANGE או GEOGRAPHY לא נתמכים כרגע.
BigQuery ל-Spanner
הפקודה EXPORT DATA מ-BigQuery ל-Spanner לא תומכת בכל סוגי הנתונים של BigQuery. ייצוא של טבלה עם הסוגים הבאים יגרום לשגיאה:
STRUCTGEOGRAPHYDATETIMERANGETIME
בנוסף, אם בפרויקט BigQuery נעשה שימוש בניב GoogleSQL, לא תהיה תמיכה בייצוא ל-Spanner של הסוגים המספריים הבאים:
BIGNUMERIC
רשימה מלאה ועדכנית של המגבלות זמינה במסמכי התיעוד הרשמיים: מגבלות על ייצוא ל-Spanner.
פתית שלג
כדי לבצע את ה-codelab הזה, אתם יכולים להשתמש בחשבון Snowflake קיים או להגדיר חשבון לתקופת ניסיון בחינם.
הרשאות IAM ב-Google Cloud Platform
כדי לבצע את כל השלבים ב-codelab הזה, לחשבון Google צריכות להיות ההרשאות הבאות.
חשבונות שירות | ||
| מאפשרת יצירה של חשבונות שירות. | |
Spanner | ||
| מאפשר ליצור מופע חדש של Spanner. | |
| מאפשר להריץ הצהרות DDL כדי ליצור | |
| מאפשר להריץ הצהרות DDL כדי ליצור טבלאות במסד הנתונים. | |
Google Cloud Storage | ||
| מאפשר ליצור מאגר חדש ב-GCS לאחסון קובצי Parquet שיוצאו. | |
| מאפשר לכתוב את קובצי Parquet המיוצאים לקטגוריית GCS. | |
| מאפשר ל-BigQuery לקרוא את קובצי Parquet ממאגר GCS. | |
| מאפשר ל-BigQuery להציג את קובצי Parquet בדלי GCS. | |
Dataflow | ||
| מאפשרת לתבוע פריטי עבודה מ-Dataflow. | |
| מאפשר לעובד של Dataflow לשלוח הודעות בחזרה לשירות Dataflow. | |
| מאפשר לעובדי Dataflow לכתוב רשומות ביומן ב-Google Cloud Logging. | |
לנוחותכם, אפשר להשתמש בתפקידים מוגדרים מראש שכוללים את ההרשאות האלה.
|
|
|
|
|
|
|
|
הגדרת מאפיינים לשימוש חוזר
במהלך שיעור ה-Lab הזה תצטרכו להשתמש כמה פעמים בכמה ערכים. כדי להקל על התהליך, נגדיר את הערכים האלה כמשתני מעטפת לשימוש מאוחר יותר.
- GCP_REGION – האזור הספציפי שבו ימוקמו המשאבים של GCP. כאן אפשר לראות את רשימת האזורים.
- GCP_PROJECT – מזהה הפרויקט ב-GCP שבו רוצים להשתמש.
- 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
Google Cloud Storage (GCS) ישמש לאחסון קובצי הנתונים בפורמט Parquet ומטא-נתונים בפורמט Iceberg שנוצרו על ידי Snowflake. לשם כך, קודם צריך ליצור קטגוריה חדשה שתשמש כיעד הקובץ. מבצעים את השלבים הבאים מחלון Terminal במכונה מקומית.
יצירת הקטגוריה
כדי ליצור קטגוריה לאחסון באזור ספציפי (למשל 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.
4. ייצוא מ-Snowflake ל-GCS
בשיעור ה-Lab הזה נשתמש במערך הנתונים TPC-H, שהוא מדד השוואה מקובל בתחום למערכות תמיכה בקבלת החלטות. הסכימה שלו מדמה סביבה עסקית מציאותית עם לקוחות, הזמנות, ספקים וחלקים, ולכן הוא מושלם להדגמת תרחיש של ניתוח נתונים והעברת נתונים בעולם האמיתי. מערך הנתונים הזה זמין כברירת מחדל בכל חשבונות Snowflake.
במקום להשתמש בטבלאות הגולמיות והמנורמלות של TPC-H, תיצרו טבלה חדשה ומצטברת. הטבלה החדשה הזו תאחד נתונים מהטבלאות orders, customer ו-nation כדי ליצור תצוגה לא מנורמלת של סיכום סכומי המכירות ברמה הארצית. שלב הצבירה המוקדמת הזה הוא שיטה נפוצה בניתוח נתונים, כי הוא מכין את הנתונים לתרחיש שימוש ספציפי – בתרחיש הזה, לשימוש באפליקציה תפעולית.
איך מאפשרים ל-Snowflake לגשת ל-Google Cloud Storage
כדי לאפשר ל-Snowflake לכתוב נתונים בדלי GCS, צריך ליצור שני דברים: נפח חיצוני והרשאות נדרשות.
- נפח חיצוני הוא אובייקט Snowflake שמספק קישור מאובטח למיקום ספציפי בקטגוריית GCS. הוא לא מאחסן נתונים בעצמו, אלא מכיל את ההגדרה שדרושה ל-Snowflake כדי לגשת לאחסון בענן.
- מטעמי אבטחה, קטגוריות של Cloud Storage מוגדרות כפרטיות כברירת מחדל. כשיוצרים נפח חיצוני, Snowflake יוצרת חשבון שירות ייעודי. צריך לתת לחשבון השירות הזה הרשאות לקריאה ולכתיבה בקטגוריה.
יצירת מסד נתונים
- בתפריט השמאלי, בקטע Horizon Catalog, מעבירים את העכבר מעל Catalog ולוחצים על Database Explorer.
- בדף מסדי נתונים, לוחצים על הלחצן + מסד נתונים בפינה השמאלית העליונה.
- נותנים שם למסד הנתונים החדש
codelabs_retl_db
יצירת גיליון עבודה
כדי להריץ פקודות SQL מול מסד הנתונים, צריך להשתמש בגיליונות עבודה.
כדי ליצור גיליון עבודה:
- בתפריט השמאלי, בקטע עבודה עם נתונים, מעבירים את העכבר מעל פרויקטים ואז לוחצים על סביבות עבודה.
- בסרגל הצד My Workspaces (סביבות העבודה שלי), לוחצים על הלחצן + Add new (הוספת חדש) ובוחרים באפשרות SQL File (קובץ 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;
- בחלונית התוצאות, מחפשים את מאפייני ה-JSON ואת הרשומה
property_valueשמכילה מחרוזת JSON שמתחילה ב-"NAME":"codelabs_retl_ext_vol" - מחפשים את המאפיין
STORAGE_GCP_SERVICE_ACCOUNTבאובייקט ה-JSON ומעתיקים את הערך שלו (הוא ייראה כמו כתובת אימייל). זהו מזהה חשבון השירות שצריך לקבל גישה לדלי GCS. - שומרים את חשבון השירות הזה במשתנה סביבה במופע של המעטפת לשימוש חוזר בהמשך
export GCP_SERVICE_ACCOUNT=<Your service account>
מתן הרשאות ל-Snowflake ב-GCS
עכשיו צריך לתת לחשבון השירות של 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
חוזרים לגליון העבודה של Snowflake ומריצים את הפקודה הזו כדי לוודא ש-Snowflake יכול להתחבר עכשיו בהצלחה לקטגוריה של GCS.
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('codelabs_retl_ext_vol');
התוצאה צריכה להיות אובייקט JSON שמכיל את "success":true.
מידע נוסף על אמצעי אחסון חיצוניים ב-Snowflake זמין במסמכי העזרה הרשמיים.
ייצוא של נתוני הזמנות לדוגמה
עכשיו אפשר ליצור טבלת Iceberg ב-Snowflake. הפקודה הבאה מורה ל-Snowflake להריץ שאילתה ולאחסן את התוצאות ב-GCS בפורמט Iceberg. קבצי הנתונים יהיו בפורמט Parquet, והמטא-נתונים יהיו בפורמטים Avro ו-JSON. כל הקבצים האלה מאוחסנים במיקום שמוגדר על ידי codelabs_retl_ext_vol External Volume.
יצירת מסד נתונים
- בתפריט השמאלי, בקטע Horizon Catalog, מעבירים את העכבר מעל Catalog ולוחצים על Database Explorer.
- בדף מסדי נתונים, לוחצים על הלחצן + מסד נתונים בפינה השמאלית העליונה.
- נותנים שם למסד הנתונים החדש
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
);
מידע נוסף על יצירה וניהול של טבלאות Iceberg באמצעות Snowflake זמין בתיעוד הרשמי.
אימות הנתונים ב-GCP
עכשיו בודקים את דלי ה-GCS. הקבצים שנוצרו על ידי 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. בשיעור ה-Lab הזה, זו הטכנולוגיה העיקרית שמאפשרת ל-BigQuery להבין את טבלת Iceberg שיוצאה זה עתה בלי צורך להטמיע את הנתונים.
כדי שהשילוב הזה יפעל, צריך שני רכיבים:
- חיבור למשאב בענן: זהו קישור מאובטח בין BigQuery ל-GCS. הוא משתמש בחשבון שירות מיוחד כדי לטפל באימות, ומוודא של-BigQuery יש את ההרשאות הנדרשות לקריאת הקבצים ממאגר GCS.
- הגדרת טבלה חיצונית: ההגדרה הזו מציינת ל-BigQuery איפה נמצא קובץ המטא-נתונים של טבלת Iceberg ב-GCS ואיך צריך לפרש אותו.
הגדרת חיבור ל-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
מידע נוסף על קישורים למשאבי Cloud ב-BigQuery זמין במאמרי העזרה של Google Cloud.
אישור החיבור ל-BigQuery כדי לקרוא נתונים
לחיבור החדש ל-BigQuery יש חשבון שירות משלו שצריך לקבל הרשאה לקרוא נתונים ממאגר Google Cloud Storage.
1. קבלת חשבון השירות של החיבור
קודם כל, מאתרים את מזהה חשבון השירות מהחיבור שנוצר:
bq show \
--location $GCP_REGION \
--connection codelabs-retl-connection
בתוצאות תופיע טבלה של חיבורים תואמים.
מגדירים את serviceAccountId כמשתנה סביבה כדי להשתמש בו בהמשך.
export GCP_BQ_SERVICE_ACCOUNT=<Your service account email>
2. מתן הרשאות
מריצים את הפקודה הבאה כדי לתת לחשבון השירות הרשאה לצפייה בנתונים בדלי GCS.
gcloud storage buckets add-iam-policy-binding \
gs://$GCS_BUCKET_NAME \
--member serviceAccount:$GCP_BQ_SERVICE_ACCOUNT \
--role roles/storage.objectViewer
יצירת טבלה חיצונית
עכשיו יוצרים את הטבלה החיצונית BigLake ב-BigQuery. הפקודה הזו לא מעבירה נתונים. הוא פשוט יוצר מצביע לנתונים הקיימים ב-GCS. תצטרכו את הנתיב לאחד מקובצי .metadata.json שנוצרו על ידי Snowflake.
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 תשתמש בחיבור כדי לקרוא את קובצי Parquet מ-GCS תוך כדי תנועה.
bq query \
--location=$GCP_REGION \
--nouse_legacy_sql "SELECT * FROM \`$GCP_PROJECT.codelabs_retl.regional_sales\` LIMIT 10;"
6. ייבוא נתונים מ-BigQuery ל-Spanner: השלב האחרון
הגענו לחלק האחרון והחשוב ביותר בצינור: העברת הנתונים מטבלת BigLake אל Spanner. זהו השלב של 'העברת נתונים הפוכה', שבו הנתונים, אחרי שעברו עיבוד וארגון במחסן הנתונים, נטענים למערכת תפעולית לשימוש באפליקציות.
Spanner הוא מסד נתונים רלציוני מנוהל שמופץ באופן גלובלי. הוא מציע עקביות טרנזקציונלית של מסד נתונים רלציוני מסורתי, אבל עם יכולת ההרחבה האופקית של מסד נתונים NoSQL. לכן, זו בחירה אידיאלית ליצירת אפליקציות עם זמינות גבוהה שניתנות להרחבה.
התהליך יהיה כזה:
- יוצרים סכימת טבלה במסד הנתונים של Spanner שתואמת למבנה הנתונים.
- מריצים שאילתת 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
זה השלב האחרון. אחרי שהנתונים מוכנים בטבלת BigLake ב-BigQuery וטבלת היעד נוצרה ב-Spanner, העברת הנתונים עצמה פשוטה באופן מפתיע. תתבצע שאילתת SQL אחת ב-BigQuery: 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
כשהשאילתה מסתיימת, בחלונית Results (תוצאות) אמור להופיע הכיתוב Update completed (העדכון הושלם).
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 שנוצר לאירוח הנתונים
gcloud storage rm --recursive gs://$GCS_BUCKET_NAME
ניקוי ב-BigQuery
bq rm -r codelabs_retl
bq rm --connection --location=$GCP_REGION codelabs-retl-connection
ניקוי של Snowflake
מחיקת מסד הנתונים
- בתפריט הימני, בקטע קטלוג Horizon, מעבירים את העכבר מעל קטלוג ולוחצים על כלי לבדיקת מסדי נתונים.
- לוחצים על … משמאל למסד הנתונים
CODELABS_RETL_DBכדי להרחיב את האפשרויות ובוחרים באפשרות מחיקה. - בתיבת הדו-שיח הקופצת לאישור, בוחרים באפשרות מחיקת מסד נתונים.
מחיקת חוברות עבודה
- בתפריט השמאלי, בקטע עבודה עם נתונים, מעבירים את העכבר מעל פרויקטים ואז לוחצים על סביבות עבודה.
- בסרגל הצד My Workspace (סביבת העבודה שלי), מעבירים את העכבר מעל הקבצים השונים של סביבת העבודה שבהם השתמשתם בשיעור Lab הזה כדי להציג את האפשרויות הנוספות ... ולוחצים עליהן.
- בוחרים באפשרות מחיקה, ואז שוב באפשרות מחיקה בתיבת הדו-שיח לאישור שמופיעה.
- מבצעים את הפעולה הזו לכל קובצי ה-SQL Workspace שיצרתם לשיעור ה-Lab הזה.
מחיקת נפחי אחסון חיצוניים
- בתפריט השמאלי, בקטע קטלוג Horizon, מעבירים את העכבר מעל קטלוג ואז לוחצים על נתונים חיצוניים.
- לוחצים על הסמל
משמאל ל-CODELABS_RETL_EXT_VOL, בוחרים באפשרות הסרת עוצמת קול חיצונית ולוחצים שוב על הסרת עוצמת קול חיצונית בתיבת הדו-שיח לאישור.
9. מזל טוב
כל הכבוד, סיימתם את ה-Codelab.
מה נכלל
- איך טוענים נתונים ל-Snowflake
- איך יוצרים קטגוריה ב-GCS
- איך מייצאים טבלת Snowflake ל-GCS בפורמט CSV
- איך מגדירים מופע Spanner
- איך טוענים טבלאות CSV ל-Spanner באמצעות Dataflow