אפשר להשתמש בתבנית SQL Server to BigQuery כדי להעתיק נתונים מטבלאות SQL Server לטבלה ב-BigQuery. הצינור הזה של עיבוד נתונים באצווה עוזר להעביר נתונים יחסיים לניתוח נתונים ולמחסן נתונים ב- Google Cloud. התבנית מתחברת ל-SQL Server באמצעות JDBC. כדי לאבטח פרמטרים רגישים של חיבור כמו שם משתמש, סיסמה ומחרוזת חיבור, אפשר להצפין אותם באמצעות מפתח של Cloud Key Management Service (Cloud KMS). הפרמטרים האלה חייבים לעבור קידוד Base64 לפני ההצפנה. פרטים על הצפנה מופיעים במאמר בנושא הצפנה ופענוח של נתונים באמצעות מפתח סימטרי.
הדרישות לגבי צינורות עיבוד נתונים
- הטבלה ב-BigQuery צריכה להתקיים לפני הפעלת צינור הנתונים.
- לטבלה ב-BigQuery צריכה להיות סכימה תואמת.
- צריכה להיות גישה למסד הנתונים הרלציוני מרשת המשנה שבה פועל Dataflow.
פרמטרים של תבניות
פרמטרים נדרשים
- connectionURL: מחרוזת כתובת ה-URL של חיבור JDBC. אפשר להעביר אותו כמחרוזת בקידוד Base64 ואז להצפין אותו באמצעות מפתח Cloud KMS, או שהוא יכול להיות סוד של Secret Manager בפורמט projects/{project}/secrets/{secret}/versions/{secret_version}. לדוגמה,
jdbc:sqlserver://localhost;databaseName=sampledb. - outputTable: המיקום של טבלת הפלט ב-BigQuery. לדוגמה,
<PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>. - bigQueryLoadingTemporaryDirectory: ספריית הזמנית לתהליך הטעינה של BigQuery. לדוגמה,
gs://your-bucket/your-files/temp_dir.
פרמטרים אופציונליים
- connectionProperties: מחרוזת המאפיינים לשימוש בחיבור JDBC. הפורמט של המחרוזת צריך להיות
[propertyName=property;]*.מידע נוסף זמין במאמר Configuration Properties (מאפייני הגדרה) (https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html) במסמכי העזרה של MySQL. לדוגמה,unicode=true;characterEncoding=UTF-8. - username: שם המשתמש שמשמש לחיבור JDBC. אפשר להעביר אותו כמחרוזת מוצפנת באמצעות מפתח Cloud KMS, או כסוד של Secret Manager בפורמט projects/{project}/secrets/{secret}/versions/{secret_version}.
- password: הסיסמה לשימוש בחיבור JDBC. אפשר להעביר אותו כמחרוזת מוצפנת באמצעות מפתח Cloud KMS, או כסוד של Secret Manager בפורמט projects/{project}/secrets/{secret}/versions/{secret_version}.
- query: השאילתה להרצה במקור כדי לחלץ את הנתונים. שימו לב: יש הבדלים בין חלק מסוגי ה-SQL של JDBC לבין סוגי BigQuery, למרות שהשמות שלהם זהים. כמה מיפויי סוגים חשובים מ-SQL ל-BigQuery שכדאי לזכור הם
DATETIME --> TIMESTAMP. יכול להיות שיהיה צורך בהמרת טיפוסים אם הסכימות לא זהות. לדוגמה,select * from sampledb.sample_table. - KMSEncryptionKey: מפתח ההצפנה של Cloud KMS שבו יש להשתמש כדי לפענח את שם המשתמש, הסיסמה ומחרוזת החיבור. אם מעבירים מפתח Cloud KMS, צריך גם להצפין את שם המשתמש, הסיסמה ומחרוזת החיבור. לדוגמה,
projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key. - useColumnAlias: אם המאפיין הזה מוגדר לערך
true, צינור הנתונים משתמש בכינוי העמודה (AS) במקום בשם העמודה כדי למפות את השורות ל-BigQuery. ברירת המחדל היאfalse. - isTruncate: אם הערך מוגדר ל-
true, צינור הנתונים מבצע חיתוך לפני טעינת הנתונים ל-BigQuery. ברירת המחדל היאfalse, שגורמת לצינור לצרף נתונים. - partitionColumn: אם מציינים את
partitionColumnיחד עםtable, JdbcIO קורא את הטבלה במקביל על ידי הפעלת כמה מופעים של השאילתה באותה טבלה (תת-שאילתה) באמצעות טווחים. בשלב הזה יש תמיכה בעמודות של מחיצותLongו-DateTime. העברת סוג העמודה דרךpartitionColumnType. - partitionColumnType: הסוג של
partitionColumn. הערכים האפשריים הםlongאוdatetime. ברירת המחדל היא: long. - table: הטבלה שממנה מתבצעת הקריאה כשמשתמשים במחיצות. הפרמטר הזה מקבל גם שאילתת משנה בסוגריים. לדוגמה,
(select id, name from Person) as subq. - numPartitions: מספר המחיצות. הערך הזה, יחד עם הגבול התחתון והגבול העליון, יוצר צעדים של מחיצות לביטויי פסקה שנוצרו
WHERE, שמשמשים לפיצול שווה של עמודת המחיצות. אם הקלט קטן מ-1, המספר מוגדר כ-1. - lowerBound: הגבול התחתון לשימוש בסכמת המחיצות. אם לא מספקים ערך, Apache Beam מסיק אותו באופן אוטומטי עבור הסוגים הנתמכים.
datetimepartitionColumnType מקבל ערך של גבול תחתון בפורמטyyyy-MM-dd HH:mm:ss.SSSZ. לדוגמה,2024-02-20 07:55:45.000+03:30. - upperBound: הגבול העליון לשימוש בסכמת החלוקה. אם לא מספקים ערך, Apache Beam מסיק אותו באופן אוטומטי עבור הסוגים הנתמכים.
datetimepartitionColumnType מקבל ערך עליון בפורמטyyyy-MM-dd HH:mm:ss.SSSZ. לדוגמה,2024-02-20 07:55:45.000+03:30. - fetchSize: מספר השורות שיש לאחזר מהמסד בכל פעם. לא משמש לקריאות מחולקות. ברירת המחדל היא: 50,000.
- createDisposition: הגדרת CreateDisposition של BigQuery לשימוש. לדוגמה,
CREATE_IF_NEEDEDאוCREATE_NEVER. ברירת המחדל היא: CREATE_NEVER. - bigQuerySchemaPath: נתיב Cloud Storage של סכימת ה-JSON של BigQuery. אם המדיניות
createDispositionמוגדרת לערךCREATE_IF_NEEDED, חובה לציין את הפרמטר הזה. לדוגמה,gs://your-bucket/your-schema.json. - outputDeadletterTable: הטבלה ב-BigQuery שבה יישמרו הודעות שלא הצליחו להגיע לטבלת הפלט, בפורמט
"PROJECT_ID:DATASET_NAME.TABLE_NAME". אם הטבלה לא קיימת, היא נוצרת כשהצינור מופעל. אם לא מציינים את הפרמטר הזה, הצינור ייכשל אם יתרחשו שגיאות כתיבה.אפשר לציין את הפרמטר הזה רק אם הפרמטרuseStorageWriteApiאוuseStorageWriteApiAtLeastOnceמוגדר כ-True. - disabledAlgorithms: אלגוריתמים שמופרדים בפסיקים וצריך להשבית. אם הערך הזה מוגדר כ-
none, אף אלגוריתם לא מושבת. חשוב להשתמש בפרמטר הזה בזהירות, כי יכול להיות שיש אלגוריתמים שמושבתים כברירת מחדל בגלל פגיעויות או בעיות בביצועים. לדוגמה,SSLv3, RC4. - extraFilesToStage: נתיבים ב-Cloud Storage או סודות ב-Secret Manager של קבצים להעברה זמנית לעובד, מופרדים בפסיקים. הקבצים האלה נשמרים בספרייה /extra_files בכל עובד. לדוגמה,
gs://<BUCKET_NAME>/file.txt,projects/<PROJECT_ID>/secrets/<SECRET_ID>/versions/<VERSION_ID>. - useStorageWriteApi: אם הערך הוא
true, צינור הנתונים משתמש ב-BigQuery Storage Write API (https://cloud.google.com/bigquery/docs/write-api). ערך ברירת המחדל הואfalse. מידע נוסף זמין במאמר בנושא שימוש ב-Storage Write API (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api). - useStorageWriteApiAtLeastOnce: כשמשתמשים ב-Storage Write API, המאפיין הזה מציין את סמנטיקת הכתיבה. כדי להשתמש בסמנטיקה של 'לפחות פעם אחת' (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), צריך להגדיר את הפרמטר הזה לערך
true. כדי להשתמש בסמנטיקה של מסירה חד-פעמית, מגדירים את הפרמטר לערךfalse. הפרמטר הזה רלוונטי רק אם הערך שלuseStorageWriteApiהואtrue. ערך ברירת המחדל הואfalse.
הרצת התבנית
המסוף
- עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow. כניסה לדף Create job from template
- בשדה שם המשימה, מזינים שם ייחודי למשימה.
- אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא
us-central1.רשימה של אזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר מיקומי Dataflow.
- בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים בתבנית SQL Server to BigQuery (מ-SQL Server ל-BigQuery).
- בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
- לוחצים על הפעלת העבודה.
gcloud
במעטפת או בטרמינל, מריצים את התבנית:
gcloud dataflow flex-template run JOB_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/SQLServer_to_BigQuery \ --parameters \ connectionURL=JDBC_CONNECTION_URL,\ query=SOURCE_SQL_QUERY,\ outputTable=PROJECT_ID:DATASET.TABLE_NAME, bigQueryLoadingTemporaryDirectory=PATH_TO_TEMP_DIR_ON_GCS,\ connectionProperties=CONNECTION_PROPERTIES,\ username=CONNECTION_USERNAME,\ password=CONNECTION_PASSWORD,\ KMSEncryptionKey=KMS_ENCRYPTION_KEY
מחליפים את מה שכתוב בשדות הבאים:
-
JOB_NAME: שם ייחודי של המשימה לפי בחירתכם -
VERSION: הגרסה של התבנית שרוצים להשתמש בהאפשר להשתמש בערכים הבאים:
latestכדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/- שם הגרסה, כמו
2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
-
REGION_NAME: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה:us-central1 -
JDBC_CONNECTION_URL: כתובת ה-URL של חיבור JDBC -
SOURCE_SQL_QUERY: שאילתת ה-SQL להרצה במסד הנתונים של המקור -
DATASET: מערך הנתונים שלכם ב-BigQuery -
TABLE_NAME: שם הטבלה ב-BigQuery -
PATH_TO_TEMP_DIR_ON_GCS: הנתיב שלכם ב-Cloud Storage לספריית temp -
CONNECTION_PROPERTIES: מאפייני החיבור של JDBC, אם צריך -
CONNECTION_USERNAME: שם המשתמש של חיבור ה-JDBC -
CONNECTION_PASSWORD: הסיסמה לחיבור JDBC -
KMS_ENCRYPTION_KEY: מפתח ההצפנה של Cloud KMS
API
כדי להפעיל את התבנית באמצעות API בארכיטקטורת REST, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launchParameter": { "jobName": "JOB_NAME", "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/SQLServer_to_BigQuery", "parameters": { "connectionURL": "JDBC_CONNECTION_URL", "query": "SOURCE_SQL_QUERY", "outputTable": "PROJECT_ID:DATASET.TABLE_NAME", "bigQueryLoadingTemporaryDirectory": "PATH_TO_TEMP_DIR_ON_GCS", "connectionProperties": "CONNECTION_PROPERTIES", "username": "CONNECTION_USERNAME", "password": "CONNECTION_PASSWORD", "KMSEncryptionKey":"KMS_ENCRYPTION_KEY" }, "environment": { "zone": "us-central1-f" } } }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud -
JOB_NAME: שם ייחודי של המשימה לפי בחירתכם -
VERSION: הגרסה של התבנית שרוצים להשתמש בהאפשר להשתמש בערכים הבאים:
latestכדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/- שם הגרסה, כמו
2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
-
LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה:us-central1 -
JDBC_CONNECTION_URL: כתובת ה-URL של חיבור JDBC -
SOURCE_SQL_QUERY: שאילתת ה-SQL להרצה במסד הנתונים של המקור -
DATASET: מערך הנתונים שלכם ב-BigQuery -
TABLE_NAME: שם הטבלה ב-BigQuery -
PATH_TO_TEMP_DIR_ON_GCS: הנתיב שלכם ב-Cloud Storage לספריית temp -
CONNECTION_PROPERTIES: מאפייני החיבור של JDBC, אם צריך -
CONNECTION_USERNAME: שם המשתמש של חיבור ה-JDBC -
CONNECTION_PASSWORD: הסיסמה לחיבור JDBC -
KMS_ENCRYPTION_KEY: מפתח ההצפנה של Cloud KMS
המאמרים הבאים
- מידע נוסף על תבניות Dataflow
- כאן אפשר לעיין ברשימת התבניות ש-Google סיפקה.