תבנית הצינור SQL Server to BigQuery היא צינור אצווה שמעתיק נתונים מטבלת SQL Server לטבלה קיימת ב-BigQuery. בצינור הזה נעשה שימוש ב-JDBC כדי להתחבר ל-SQL Server. כדי להוסיף עוד שכבת הגנה, אפשר גם להעביר מפתח Cloud KMS יחד עם פרמטרים של שם משתמש, סיסמה ומחרוזת חיבור שמקודדים ב-Base64 ומוצפנים באמצעות מפתח Cloud KMS. מידע נוסף על הצפנה של שם המשתמש, הסיסמה ופרמטרים של מחרוזת החיבור זמין במאמר בנושא נקודת הקצה של Cloud KMS API להצפנה.
הדרישות לגבי צינורות עיבוד נתונים
- הטבלה ב-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: השאילתה להרצה במקור כדי לחלץ את הנתונים. שימו לב: יש הבדלים בין חלק מהסוגים של JDBC SQL ו-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: הגדרת BigQuery CreateDisposition לשימוש. לדוגמה,
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.
הפעלת התבנית
המסוף
- עוברים לדף Dataflow Create job from template (יצירת משימה מתבנית). כניסה לדף Create job from template
- בשדה שם המשימה, מזינים שם ייחודי למשימה.
- אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא
us-central1.רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר מיקומי Dataflow.
- בתפריט הנפתח Dataflow template (תבנית של העברת נתונים), בוחרים באפשרות the SQL Server to BigQuery template.
- בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
- לוחצים על הפעלת העבודה.
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