זיהוי סכימה ומיפוי ב-Snowflake
במדריך הזה נסביר איך להגדיר את הסכימה כשמעבירים נתונים מ-Snowflake ל-BigQuery. אתם יכולים להשתמש בשירות העברת הנתונים ל-BigQuery כדי לזהות באופן אוטומטי את מיפוי הסכימה וסוגי הנתונים, או להשתמש במנוע התרגום כדי להגדיר את הסכימה וסוגי הנתונים באופן ידני.
הפעלת זיהוי אוטומטי של סכימה שמוגדרת כברירת מחדל
מחבר Snowflake יכול לזהות אוטומטית את סכימת הטבלה של Snowflake. כדי להשתמש בזיהוי סכימה אוטומטי, אפשר להשאיר את השדה נתיב GCS של פלט התרגום ריק כשמגדירים העברה של Snowflake.
ברשימה הבאה מוצג מיפוי של סוגי הנתונים ב-Snowflake למקבילים שלהם ב-BigQuery:
- סוגי הנתונים הבאים ממופים כ-
STRINGב-BigQuery:TIMESTAMP_TZTIMESTAMP_LTZOBJECTVARIANTARRAY
- סוגי הנתונים הבאים ממופים כ-
TIMESTAMPב-BigQuery:TIMESTAMP_NTZ
כל שאר סוגי הנתונים ב-Snowflake ממופים ישירות לסוגים המקבילים שלהם ב-BigQuery.
הגדרה ידנית של סכימה באמצעות פלט של מנוע תרגום
מחבר Snowflake של שירות העברת הנתונים ל-BigQuery משתמש במנוע התרגום של שירות ההעברה של BigQuery למיפוי סכימות, כשמעבירים טבלאות של Snowflake ל-BigQuery.
כדי להגדיר את הסכימה באופן ידני (לדוגמה, כדי לבטל מאפיינים מסוימים של הסכימה), אפשר ליצור את המטא-נתונים ואז להפעיל את מנוע התרגום.
מגבלות
הנתונים מחולצים מ-Snowflake בפורמט הנתונים Parquet לפני שהם נטענים ל-BigQuery:
- סוגי הנתונים הבאים של Parquet לא נתמכים:
TIMESTAMP_TZ,TIMESTAMP_LTZ- מידע נוסף זמין במאמר בנושא הערכת נתונים ב-Snowflake.
סוגי הנתונים הבאים של Parquet לא נתמכים, אבל אפשר להמיר אותם:
TIMESTAMP_NTZOBJECT,VARIANT,ARRAY
כדי לשנות את התנהגות ברירת המחדל של סוגי הנתונים האלה כשמריצים את מנוע התרגום, צריך להשתמש בקובץ YAML של הגדרת המרות מסוג גלובלי.
קובץ ה-YAML של ההגדרות יכול להיראות כמו בדוגמה הבאה:
type: experimental_object_rewriter global: typeConvert: datetime: TIMESTAMP json: VARCHAR
- סוגי הנתונים הבאים של Parquet לא נתמכים:
הרשאות נדרשות בחשבון שירות
בהעברה של Snowflake, נעשה שימוש בחשבון שירות כדי לקרוא נתונים מהפלט של מנוע התרגום בנתיב Cloud Storage שצוין.
צריך להעניק לחשבון השירות את ההרשאות storage.objects.get ו-storage.objects.list.
מומלץ שחשבון השירות ישתייך לאותו Google Cloud פרויקט שבו נוצרו הגדרות ההעברה ומערך נתוני היעד. אם חשבון השירות נמצא בפרויקט Google Cloud ששונה מהפרויקט שבו נוצרה העברת הנתונים ב-BigQuery, צריך להפעיל הרשאה של חשבון שירות בין פרויקטים.
מידע נוסף זמין במאמר תפקידים והרשאות של IAM ב-BigQuery.
הגדרה ידנית של מיפוי סכימה
כדי להגדיר מיפוי סכימה באופן ידני:
- מריצים את
dwh-migration-toolעבור Snowflake. מידע נוסף זמין במאמר יצירת מטא-נתונים לתרגום ולבדיקה. - מעלים את קובץ ה-
metadata.zipשנוצר לקטגוריה של Cloud Storage. הקובץmetadata.zipמשמש כקלט למנוע התרגום. מריצים את שירות התרגום של קבוצת בקשות, ומציינים את השדה
target_typesבתורmetadata. מידע נוסף זמין במאמר בנושא תרגום שאילתות SQL באמצעות Translation API.- זו דוגמה לפקודה להרצת תרגום באצווה עבור Snowflake:
curl -d "{ \"name\": \"sf_2_bq_translation\", \"displayName\": \"Snowflake to BigQuery Translation\", \"tasks\": { string: { \"type\": \"Snowflake2BigQuery_Translation\", \"translation_details\": { \"target_base_uri\": \"gs://sf_test_translation/output\", \"source_target_mapping\": { \"source_spec\": { \"base_uri\": \"gs://sf_test_translation/input\" } }, \"target_types\": \"metadata\", } } }, }" \ -H "Content-Type:application/json" \ -H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2alpha/projects/project_id/locations/location/workflows- אפשר לבדוק את הסטטוס של הפקודה הזו בדף תרגום ה-SQL ב-BigQuery.
הפלט של משימת התרגום באצווה מאוחסן ב-
gs://translation_target_base_uri/metadata/config/.
קובץ סכימה מותאם אישית
מומלץ לציין סכימה מותאמת אישית אם אתם צריכים לתעד מידע חשוב על טבלה, כמו המפתח הראשי, שאחרת יאבד במהלך ההעברה. לדוגמה, כשמבצעים העברה מצטברת, מומלץ לציין קובץ סכימה בהתאמה אישית כדי שניתן יהיה לחלק את הנתונים מההעברות הבאות למחיצות בצורה נכונה כשהם נטענים ל-BigQuery. בלי קובץ סכימה, כל המידע על מפתחות ראשיים ומעקב אחר שינויים עלול ללכת לאיבוד, כי שירות העברת הנתונים ל-BigQuery מחיל אוטומטית סכימת טבלה באמצעות נתוני המקור שמועברים.
סכימה מותאמת אישית יכולה לעזור גם כשצריך לשנות שמות של עמודות או סוגי נתונים במהלך העברת הנתונים.
קובץ סכימה מותאם אישית הוא קובץ JSON שמתאר אובייקטים של מסד נתונים. הסכימה
מכילה קבוצה של מסדי נתונים, שכל אחד מהם מכיל קבוצה של טבלאות, שכל אחת מהן
מכילה קבוצה של עמודות. לכל אובייקט יש שדה originalName שמציין את שם האובייקט ב-Snowflake, ושדה name שמציין את שם היעד של האובייקט ב-BigQuery.
העמודות כוללות את השדות הבאים:
-
originalType: מציין את סוג הנתונים בעמודה ב-Snowflake -
type: מציין את סוג הנתונים של עמודת היעד ב-BigQuery. usageType: מידע על האופן שבו המערכת משתמשת בעמודה. אלה סוגי השימוש שנתמכים:-
DEFAULT: אפשר להוסיף הערות לכמה עמודות בטבלת יעד אחת עם סוג השימוש הזה. סוג השימושDEFAULTמציין שלעמודה אין שימוש מיוחד במערכת המקור. זה ערך ברירת המחדל. PRIMARY_KEY: אפשר להוסיף הערות לעמודות בכל טבלת יעד עם סוג השימוש הזה. משתמשים בסוג השימושPRIMARY_KEYכדי לזהות עמודה אחת בלבד כמפתח הראשי, או במקרה של מפתח מורכב, משתמשים באותו סוג שימוש בכמה עמודות כדי לזהות את הישויות הייחודיות של טבלה. העמודות האלה פועלות יחד עםCOMMIT_TIMESTAMPכדי לחלץ שורות שנוצרו או עודכנו מאז ההרצה האחרונה של ההעברה.
-
בדוגמה הבאה מוצג קובץ סכימה בהתאמה אישית להעברת טבלה בשם orders ב-Snowflake במסד הנתונים my_db, לשינוי השם של העמודה O_ORDERKEY ל-ORDERKEY ולזיהוי O_ORDERSTATUS כמפתח הראשי.
{ "databases": [ { "name": "my_db", "originalName": "my_db", "tables": [ { "name": "orders", "originalName": "orders", "columns": [ { "name": "ORDERKEY", "originalName": "O_ORDERKEY", "type": "INT64", "originalType": "NUMERIC", "usageType": [ "PRIMARY_KEY" ], "isRequired": true, "originalColumnLength": 4 }, { "name": "O_ORDERSTATUS", "originalName": "O_ORDERSTATUS", "type": "STRING", "originalType": "VARCHAR", "usageType": [ "DEFAULT" ], "isRequired": true, "originalColumnLength": 1 } ] } ] } ] }