1. יצירת צינור עיבוד נתונים של reverse ETL מ-Databricks ל-Spanner באמצעות GCS ו-Dataflow
מבוא
בשיעור הזה תלמדו איך ליצור צינור עיבוד נתונים של Reverse ETL מ-Databricks ל-Spanner באמצעות קובצי CSV שמאוחסנים ב-Google Cloud Storage. באופן מסורתי, צינורות ETL (חילוץ, טרנספורמציה, טעינה) מעבירים נתונים ממסדי נתונים תפעוליים לתוך מחסן נתונים כמו Databricks לצורך ניתוח. צינור ETL הפוך עושה את הפעולה ההפוכה: הוא מעביר נתונים מעובדים ומסודרים מ מחסן הנתונים בחזרה למערכות תפעוליות, שבהן אפשר להשתמש בנתונים כדי להפעיל אפליקציות, לספק תכונות שפונות למשתמשים או לקבל החלטות בזמן אמת.
המטרה היא להעביר מערך נתונים לדוגמה מטבלת Databricks אל Spanner, מסד נתונים רלציוני שמפוזר גלובלית ומתאים באופן אידיאלי לאפליקציות עם זמינות גבוהה.
כדי לעשות את זה, משתמשים ב-Google Cloud Storage (GCS) וב-Dataflow כשלבי ביניים. הנה פירוט של זרימת הנתונים וההיגיון מאחורי הארכיטקטורה הזו:
- Databricks ל-Google Cloud Storage (GCS) בפורמט CSV:
- השלב הראשון הוא לייצא את הנתונים מ-Databricks בפורמט פתוח ואוניברסלי. ייצוא ל-CSV היא שיטה נפוצה ופשוטה ליצירת קובצי נתונים ניידים. הקבצים האלה יועברו ל-GCS, שבו אפשר לאחסן אובייקטים בצורה עמידה וניתנת להרחבה.
- GCS ל-Spanner (באמצעות Dataflow):
- במקום לכתוב סקריפט בהתאמה אישית כדי לקרוא מ-GCS ולכתוב ב-Spanner, נעשה שימוש ב-Google Dataflow, שירות לעיבוד נתונים בניהול מלא. ב-Dataflow יש תבניות מוכנות מראש שמתאימות במיוחד למשימה מהסוג הזה. השימוש בתבנית GCS Text to Cloud Spanner מאפשר ייבוא נתונים מקבילי עם תפוקה גבוהה, בלי לכתוב קוד לעיבוד נתונים, וכך חוסך זמן פיתוח משמעותי.
מה תלמדו
- איך טוענים נתונים ל-Databricks
- איך יוצרים קטגוריה ב-GCS
- איך מייצאים טבלה של Databricks ל-GCS בפורמט CSV
- איך מגדירים מופע Spanner
- איך טוענים טבלאות CSV ל-Spanner באמצעות Dataflow
2. הגדרה, דרישות ומגבלות
דרישות מוקדמות
- חשבון Databricks עם הרשאות ליצירת אשכולות ולהתקנת ספריות. חשבון עם תקופת ניסיון לא מספיק לתרגיל הזה.
- חשבון Google Cloud עם ממשקי Spanner, Cloud Storage ו-Dataflow API מופעלים.
- גישה ל-Google Cloud Console דרך דפדפן אינטרנט.
- טרמינל עם Google Cloud CLI מותקן.
- אם המדיניות
iam.allowedPolicyMemberDomainsמופעלת בארגון שלכם ב-Google Cloud, יכול להיות שאדמין יצטרך להעניק חריגה כדי לאפשר חשבונות שירות מדומיינים חיצוניים. הנושא הזה יוסבר בשלב מאוחר יותר, אם הוא רלוונטי.
הרשאות 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. | |
לנוחותכם, אפשר להשתמש בתפקידים מוגדרים מראש שכוללים את ההרשאות האלה.
|
|
|
|
|
|
|
|
מגבלות
חשוב להיות מודעים להבדלים בסוגי הנתונים כשמעבירים נתונים בין מערכות.
- Databricks ל-CSV: כשמייצאים, סוגי הנתונים של Databricks מומרים לייצוגים סטנדרטיים של טקסט.
- ייבוא מ-CSV ל-Spanner: כשמייבאים נתונים, צריך לוודא שסוגי הנתונים של היעד ב-Spanner תואמים לייצוגי המחרוזות בקובץ ה-CSV. בשיעור ה-Lab הזה מוסבר על קבוצה נפוצה של מיפויי סוגים.
הגדרת מאפיינים לשימוש חוזר
יהיו כמה ערכים שתצטרכו להשתמש בהם שוב ושוב במהלך שיעור ה-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>
Databricks
בשיעור ה-Lab הזה, נשתמש בחשבון Databricks שמתארח ב-GCP כדי להגדיר מיקום נתונים חיצוני ב-GCS.
Google Cloud
כדי לבצע את המעבדה הזו, צריך פרויקט ב-Google Cloud.
פרויקט ב-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) ישמש לאחסון זמני של קובצי הנתונים בפורמט CSV שנוצרו על ידי Snowflake, לפני שהם יובאו אל Spanner.
יצירת הקטגוריה
כדי ליצור קטגוריית אחסון באזור ספציפי, משתמשים בפקודה הבאה.
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. ייצוא מ-Databricks ל-GCS
עכשיו, סביבת Databricks תוגדר כך שתתחבר ל-GCS בצורה מאובטחת ותייצא נתונים.
יצירת פרטי כניסה
- בתפריט הצד שמימין, לוחצים על קטלוג.
- לוחצים על נתונים חיצוניים אם האפשרות הזו זמינה בחלק העליון של דף הקטלוג. אחרת, לוחצים על התפריט הנפתח Connect (קישור) ואז על Credentials (פרטי כניסה).
- אם אתם לא בכרטיסייה Credentials, עוברים אליה.
- לוחצים על Create Credentials (יצירת פרטי כניסה).
- בוחרים באפשרות
GCP Service Accountבשדה סוג פרטי הכניסה - מזינים
codelabs-retl-credentialsבשדה שם פרטי הכניסה - לחץ על צור.
- מעתיקים את כתובת האימייל של חשבון השירות מתיבת הדו-שיח ולוחצים על סיום.
מגדירים את חשבון השירות הזה כמשתנה סביבה במופע של מעטפת הפקודות לשימוש חוזר:
export GCP_SERVICE_ACCOUNT=<Your service account>
מתן הרשאות ל-GCS ב-Databricks
עכשיו צריך לתת לחשבון השירות של 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"
יצירת מיקום חיצוני
- חוזרים לדף Credentials (פרטי כניסה) באמצעות נתיב הניווט בחלק העליון של הדף.
- עוברים לכרטיסייה מיקום חיצוני.
- לוחצים על יצירת מיקום חיצוני.
- הגדרת שם המיקום החיצוני לערך
codelabs-retl-gcs - משאירים את סוג האחסון כ-
GCP - מגדירים את נתיב הדלי לכתובת ה-URL
- מגדירים את פרטי הכניסה לאחסון לערך
codelabs-retl-credentials - לחץ על צור.
- באישור. לחץ על צור.
יצירת קטלוג וסכימה
- בתפריט הצד שמימין, לוחצים על קטלוג.
- לוחצים על יצירה ואז על יצירת קטלוג.
- מגדירים את Catalog Name לערך
retl_tpch_project - מגדירים את הסוג לערך
Standard - בוחרים באפשרות
codelabs-retl-gcsכמיקום חיצוני - לחץ על צור.
- לוחצים על
retl_tpch_projectברשימה Catalog. - לוחצים על יצירת סכימה.
- מגדירים את שם הסכימה לערך
tpch_data - בוחרים באפשרות מיקום האחסון וקובעים את הערך
codelabs-retl-gcs - לחץ על צור.
ייצוא הנתונים כקובץ CSV
עכשיו הנתונים מוכנים לייצוא. נשתמש במערך הנתונים לדוגמה של TPC-H כדי להגדיר את הטבלה החדשה שתאוחסן חיצונית כקובץ CSV.
קודם מעתיקים את הנתונים לדוגמה לטבלה חדשה בסביבת העבודה. כדי לעשות זאת, צריך להריץ קוד SQL משאילתה.
- בתפריט הימני, בקטע SQL, לוחצים על Queries (שאילתות).
- לוחצים על הלחצן יצירת שאילתה.
- לצד הלחצן הפעלה, מגדירים את סביבת העבודה ל-
retl_tpch_project.
CREATE TABLE retl_tpch_project.tpch_data.regional_sales_csv
USING CSV
LOCATION 'gs://<Your bucket name>/regional_sales_csv'
OPTIONS (
header "false",
delimiter ","
)
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 1, 2, 3, 4;
אימות הנתונים ב-GCS
בודקים את קטגוריית GCS כדי לראות את הקבצים שנוצרו ב-Databricks.
gcloud storage ls gs://$GCS_BUCKET_NAME/regional_sales_csv/
אחד או יותר מהקבצים .csv אמורים להיות גלויים, יחד עם _SUCCESS וקבצי יומן.
5. טעינת נתונים ל-Spanner באמצעות Dataflow
תבנית Dataflow שסופקה על ידי Google תשמש לייבוא נתוני ה-CSV מ-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
)"
יצירת מניפסט של Dataflow
תבנית Dataflow דורשת קובץ 'מניפסט'. זהו קובץ 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 לקובץ המניפסט שנוצר.
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.
קודם כול, בודקים את מספר השורות. הוא צריך להיות 4, 375.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT COUNT(*) FROM regional_sales;'
אחר כך מריצים שאילתה על כמה שורות כדי לבדוק את הנתונים.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM regional_sales LIMIT 5'
הנתונים שיובאו מטבלת Databricks אמורים להיות גלויים.
6. ניקוי תלונות
ניקוי Spanner
מחיקה של מסד הנתונים והמכונה של Spanner
gcloud spanner instances delete $SPANNER_INSTANCE
ניקוי GCS
מחיקת דלי GCS שנוצר לאירוח הנתונים
gcloud storage rm --recursive gs://$GCS_BUCKET_NAME
ניקוי Databricks
מחיקת קטלוג, סכימה או טבלה
- כניסה למופע Databricks
- לוחצים על
בתפריט שבצד ימין. - בוחרים את
retl_tpch_projectשיצרתם קודם מרשימת הקטלוג.

- ברשימת הסכימות, בוחרים את
tpch_dataשנוצר - בוחרים את
regional_sales_csvשנוצר קודם מרשימת הטבלאות. - מרחיבים את אפשרויות הטבלה על ידי לחיצה על
ובוחרים באפשרות מחיקה. - לוחצים על מחיקה בתיבת הדו-שיח לאישור כדי למחוק את הטבלה.
- אחרי שהטבלה תימחק, תחזרו לדף הסכימה.
- מרחיבים את אפשרויות הסכימה על ידי לחיצה על
ובוחרים באפשרות מחיקה. - לוחצים על מחיקה בתיבת הדו-שיח לאישור כדי למחוק את הסכימה.
- אחרי שהסכימה תימחק, תחזרו לדף הקטלוג.
- אם קיימת סכימה של
default, חוזרים על שלבים 4 עד 11 כדי למחוק אותה. - בדף הקטלוג, לוחצים על סמל האפשרויות הנוספות (3 נקודות)
כדי להרחיב את אפשרויות הקטלוג, ואז בוחרים באפשרות מחיקה. - בתיבת הדו-שיח לאישור, לוחצים על מחיקה כדי למחוק את הקטלוג.
מחיקת מיקום נתונים חיצוניים / פרטי כניסה
- במסך הקטלוג, לוחצים על הסמל
. - אם לא מופיעה האפשרות
External Data, יכול להיות שהאפשרותExternal Locationמופיעה בתפריט הנפתחConnect. - לוחצים על
retl-gcs-locationהמיקום של הנתונים החיצוניים שיצרתם קודם. - בדף המיקום החיצוני, לוחצים על
כדי להרחיב את אפשרויות המיקום ובוחרים באפשרות Delete. - בתיבת הדו-שיח לאישור, לוחצים על מחיקה כדי למחוק את המיקום החיצוני.
- לוחצים על

- לוחצים על
retl-gcs-credentialשנוצר קודם. - בדף פרטי הכניסה, לוחצים על
כדי להרחיב את האפשרויות של פרטי הכניסה ובוחרים באפשרות Delete. - לוחצים על מחיקה בתיבת הדו-שיח לאישור כדי למחוק את פרטי הכניסה.
7. מזל טוב
כל הכבוד, סיימתם את ה-Codelab.
מה נכלל
- איך טוענים נתונים ל-Databricks
- איך יוצרים קטגוריה ב-GCS
- איך מייצאים טבלה של Databricks ל-GCS בפורמט CSV
- איך מגדירים מופע Spanner
- איך טוענים טבלאות CSV ל-Spanner באמצעות Dataflow