תבנית BigQuery to Elasticsearch היא צינור להעברת נתונים באצוות, שמעביר נתונים מטבלה ב-BigQuery ל-Elasticsearch כמסמכים. התבנית יכולה לקרוא את כל הטבלה או לקרוא רשומות ספציפיות באמצעות שאילתה שסופקה.
הדרישות לגבי צינורות עיבוד נתונים
- טבלת המקור ב-BigQuery צריכה להתקיים.
- מארח Elasticsearch ב Google Cloud מופע או ב-Elastic Cloud עם Elasticsearch מגרסה 7.0 ואילך. צריכה להיות גישה אליה ממכונות העובדים של Dataflow.
פרמטרים של תבניות
פרמטרים נדרשים
- connectionUrl: כתובת ה-URL של Elasticsearch בפורמט
https://hostname:[port]. אם משתמשים ב-Elastic Cloud, צריך לציין את CloudID. לדוגמה,https://elasticsearch-host:9200. - apiKey: מפתח ה-API בקידוד Base64 שמשמש לאימות.
- index: האינדקס של Elasticsearch שאליו מונפקות הבקשות. לדוגמה,
my-index.
פרמטרים אופציונליים
- inputTableSpec: הטבלה ב-BigQuery שממנה קוראים. אם מציינים את
inputTableSpec, התבנית קוראת את הנתונים ישירות מאחסון BigQuery באמצעות BigQuery Storage Read API (https://cloud.google.com/bigquery/docs/reference/storage). מידע על מגבלות ב-Storage Read API זמין בכתובת https://cloud.google.com/bigquery/docs/reference/storage#limitations. חובה לצייןinputTableSpecאוquery. אם מגדירים את שני הפרמטרים, התבנית משתמשת בפרמטרquery. לדוגמה,<BIGQUERY_PROJECT>:<DATASET_NAME>.<INPUT_TABLE>. - outputDeadletterTable: הטבלה ב-BigQuery להודעות שלא הצליחו להגיע לטבלת הפלט. אם טבלה לא קיימת, היא נוצרת במהלך הפעלת צינור הנתונים. אם לא מציינים ערך, המערכת משתמשת בערך
<outputTableSpec>_error_records. לדוגמה,<PROJECT_ID>:<DATASET_NAME>.<DEADLETTER_TABLE>. - query: שאילתת ה-SQL שמשמשת לקריאת נתונים מ-BigQuery. אם מערך הנתונים ב-BigQuery נמצא בפרויקט אחר ממשימת Dataflow, צריך לציין את השם המלא של מערך הנתונים בשאילתת ה-SQL, למשל: <PROJECT_ID>.<DATASET_NAME>.<TABLE_NAME>. כברירת מחדל, הפרמטר
queryמשתמש ב-GoogleSQL (https://cloud.google.com/bigquery/docs/introduction-sql), אלא אםuseLegacySqlהואtrue. חובה לצייןinputTableSpecאוquery. אם מגדירים את שני הפרמטרים, התבנית משתמשת בפרמטרquery. לדוגמה,select * from sampledb.sample_table. - useLegacySql: מגדירים את הערך ל-
trueכדי להשתמש ב-SQL מדור קודם. הפרמטר הזה רלוונטי רק כשמשתמשים בפרמטרquery. ברירת המחדל היאfalse. - queryLocation: נדרש כשקוראים מתצוגה מורשית ללא הרשאה לטבלה הבסיסית. לדוגמה,
US. - queryTempDataset: באמצעות האפשרות הזו, אפשר להגדיר מערך נתונים קיים כדי ליצור את הטבלה הזמנית לאחסון תוצאות השאילתה. לדוגמה,
temp_dataset. - KMSEncryptionKey: אם קוראים מ-BigQuery באמצעות מקור שאילתה, משתמשים במפתח Cloud KMS הזה כדי להצפין טבלאות זמניות שנוצרו. לדוגמה,
projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key. - elasticsearchUsername: שם המשתמש ב-Elasticsearch לאימות. אם מציינים את הערך של
apiKey, המערכת מתעלמת ממנו. - elasticsearchPassword: סיסמת Elasticsearch לאימות. אם מציינים את הערך של
apiKey, המערכת מתעלמת ממנו. - batchSize: גודל האצווה במספר המסמכים. ברירת המחדל היא
1000. - batchSizeBytes: גודל הקבוצה במספר בייטים. ברירת המחדל היא
5242880(5MB). - maxRetryAttempts: המספר המקסימלי של ניסיונות חוזרים. הערך חייב להיות גדול מאפס. ברירת המחדל היא
5. - maxRetryDuration: משך הזמן המקסימלי לניסיון חוזר, באלפיות השנייה. הערך חייב להיות גדול מאפס. ברירת המחדל היא
60000(דקה אחת). - propertyAsIndex: המאפיין במסמך שמתווסף לאינדקס, שהערך שלו מציין מטא-נתונים של
_indexשייכללו במסמך בבקשות בכמות גדולה. מקבל עדיפות על פני UDF של_index. ברירת המחדל היאnone. - javaScriptIndexFnGcsPath: הנתיב ב-Cloud Storage למקור של פונקציית JavaScript UDF, לפונקציה שמציינת מטא-נתונים של
_indexשיש לכלול במסמך בבקשות בכמות גדולה. ברירת המחדל היאnone. - javaScriptIndexFnName: השם של פונקציית ה-JavaScript של ה-UDF שמציינת מטא-נתונים של
_indexשיש לכלול במסמך בבקשות בכמות גדולה. ברירת המחדל היאnone. - propertyAsId: מאפיין במסמך שמתווסף לאינדקס, שהערך שלו מציין מטא-נתונים שייכללו עם המסמך בבקשות בכמות גדולה.
_idמקבל עדיפות על פני UDF של_id. ברירת המחדל היאnone. - javaScriptIdFnGcsPath: הנתיב ב-Cloud Storage למקור של פונקציית ה-UDF ב-JavaScript, שמציינת מטא-נתונים של
_idשיש לכלול במסמך בבקשות בכמות גדולה. ברירת המחדל היאnone. - javaScriptIdFnName: השם של פונקציית JavaScript UDF שמציינת את המטא-נתונים של
_idשייכללו במסמך בבקשות בכמות גדולה. ברירת המחדל היאnone. - javaScriptTypeFnGcsPath: הנתיב ב-Cloud Storage למקור של פונקציית JavaScript UDF שמציינת מטא-נתונים של
_typeשיש לכלול במסמכים בבקשות בכמות גדולה. ברירת המחדל היאnone. - javaScriptTypeFnName: השם של פונקציית ה-UDF JavaScript שמציינת את המטא-נתונים של
_typeשצריך לכלול במסמך בבקשות בכמות גדולה. ברירת המחדל היאnone. - javaScriptIsDeleteFnGcsPath: הנתיב ב-Cloud Storage למקור של פונקציית ה-JavaScript UDF שקובעת אם למחוק את המסמך במקום להוסיף או לעדכן אותו. הפונקציה מחזירה מחרוזת עם הערך
trueאוfalse. ברירת המחדל היאnone. - javaScriptIsDeleteFnName: השם של פונקציית ה-JavaScript של ה-UDF שקובעת אם למחוק את המסמך במקום להוסיף או לעדכן אותו. הפונקציה מחזירה מחרוזת עם הערך
trueאוfalse. ברירת המחדל היאnone. - usePartialUpdate: האם להשתמש בעדכונים חלקיים (עדכון במקום יצירה או הוספה לאינדקס, שמאפשרים מסמכים חלקיים) בבקשות Elasticsearch. ברירת המחדל היא
false. - bulkInsertMethod: האם להשתמש ב-
INDEX(index, מאפשר עדכונים) או ב-CREATE(create, מחזיר שגיאה אם יש כפילות של _id) עם בקשות בכמות גדולה של Elasticsearch. ברירת המחדל היאCREATE. - trustSelfSignedCerts: האם לתת אמון באישור בחתימה עצמית או לא. יכול להיות שמופע Elasticsearch שהותקן כולל אישור בחתימה עצמית. כדי לעקוף את האימות של אישור ה-SSL, צריך להגדיר את הערך הזה כ-true. (ברירת המחדל:
false). - disableCertificateValidation: אם הערך הוא
true, המערכת בוטחת באישור ה-SSL בחתימה עצמית. יכול להיות שלמופע Elasticsearch יש אישור בחתימה עצמית. כדי לעקוף את האימות של האישור, מגדירים את הפרמטר הזה לערךtrue. ברירת המחדל היאfalse. - apiKeyKMSEncryptionKey: מפתח Cloud KMS לפענוח מפתח ה-API. חובה לכלול את הפרמטר הזה אם הערך של
apiKeySourceהואKMS. אם הפרמטר הזה מסופק, צריך להעביר מחרוזתapiKeyמוצפנת. הצפנת פרמטרים באמצעות נקודת הקצה להצפנה של KMS API. למפתח, משתמשים בפורמטprojects/<PROJECT_ID>/locations/<KEY_REGION>/keyRings/<KEY_RING>/cryptoKeys/<KMS_KEY_NAME>. למידע נוסף: https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt לדוגמה,projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name. - apiKeySecretId: המזהה הסודי ב-Secret Manager של מפתח ה-API. אם הערך של
apiKeySourceהואSECRET_MANAGER, צריך לספק את הפרמטר הזה. משתמשים בפורמטprojects/<PROJECT_ID>/secrets/<SECRET_ID>/versions/<SECRET_VERSION>. For example,projects/your-project-id/secrets/your-secret/versions/your-secret-version`. - apiKeySource: המקור של מפתח ה-API. הערכים המותרים הם
PLAINTEXT, KMSאוSECRET_MANAGER. חובה להשתמש בפרמטר הזה כשמשתמשים ב-Secret Manager או ב-KMS. אם הערך שלapiKeySourceהואKMS, צריך לספק אתapiKeyKMSEncryptionKeyואת מפתח ה-API המוצפן. אם הערך שלapiKeySourceהואSECRET_MANAGER, צריך לספק את הערך שלapiKeySecretId. אם הערך שלapiKeySourceהואPLAINTEXT, צריך לספק את הערך שלapiKey. ברירת המחדל היא: PLAINTEXT. - socketTimeout: אם מוגדר, מחליף את ברירת המחדל של הזמן הקצוב לתפוגה לניסיון חוזר ואת ברירת המחדל של הזמן הקצוב לתפוגה של socket (30,000 אלפיות שנייה) ב-Elastic RestClient.
- javascriptTextTransformGcsPath: ה-URI של Cloud Storage של קובץ ה- .js שמגדיר את הפונקציה בהגדרת המשתמש (UDF) ב-JavaScript שבה רוצים להשתמש. לדוגמה,
gs://my-bucket/my-udfs/my_file.js. - javascriptTextTransformFunctionName: השם של פונקציית JavaScript בהגדרת המשתמש (UDF) שבה רוצים להשתמש. לדוגמה, אם קוד פונקציית ה-JavaScript הוא
myTransform(inJson) { /*...do stuff...*/ }, אז שם הפונקציה הואmyTransform. דוגמאות ל-UDF ב-JavaScript זמינות במאמר UDF Examples (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples).
פונקציות בהגדרת המשתמש
התבנית הזו תומכת בפונקציות בהגדרת המשתמש (UDF) בכמה נקודות בצינור, כפי שמתואר בהמשך. למידע נוסף, ראו יצירת פונקציות מוגדרות על ידי המשתמש לתבניות Dataflow.
פונקציית אינדקס
הפונקציה מחזירה את האינדקס שאליו המסמך שייך.
פרמטרים של תבנית:
-
javaScriptIndexFnGcsPath: ה-URI של Cloud Storage של קובץ ה-JavaScript. -
javaScriptIndexFnName: השם של פונקציית JavaScript.
מפרט הפונקציה:
- קלט: מסמך Elasticsearch שעבר סריאליזציה כמחרוזת JSON.
- Output: הערך של שדה המטא-נתונים
_indexבמסמך.
הפונקציה Document ID
הפונקציה מחזירה את מזהה המסמך.
פרמטרים של תבנית:
-
javaScriptIdFnGcsPath: ה-URI של קובץ ה-JavaScript ב-Cloud Storage. -
javaScriptIdFnName: השם של פונקציית JavaScript.
מפרט הפונקציה:
- קלט: מסמך Elasticsearch שעבר סריאליזציה כמחרוזת JSON.
- Output: הערך של שדה המטא-נתונים
_idבמסמך.
פונקציה למחיקת מסמכים
מציינים אם למחוק מסמך. כדי להשתמש בפונקציה הזו, צריך להגדיר את מצב ההוספה בכמות גדולה ל-INDEX ולספק פונקציית מזהה מסמך.
פרמטרים של תבנית:
-
javaScriptIsDeleteFnGcsPath: ה-URI של קובץ ה-JavaScript ב-Cloud Storage. -
javaScriptIsDeleteFnName: השם של פונקציית JavaScript.
מפרט הפונקציה:
- קלט: מסמך Elasticsearch שעבר סריאליזציה כמחרוזת JSON.
- פלט: מחזירה את המחרוזת
"true"כדי למחוק את המסמך, או את המחרוזת"false"כדי לעדכן או להוסיף (upsert) את המסמך.
פונקציית מיפוי סוג
מחזירה את סוג המיפוי של המסמך.
פרמטרים של תבנית:
-
javaScriptTypeFnGcsPath: ה-URI של Cloud Storage של קובץ ה-JavaScript. -
javaScriptTypeFnName: השם של פונקציית JavaScript.
מפרט הפונקציה:
- קלט: מסמך Elasticsearch שעבר סריאליזציה כמחרוזת JSON.
- Output: הערך של שדה המטא-נתונים
_typeבמסמך.
הרצת התבנית
המסוף
- עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow. כניסה לדף Create job from template
- בשדה שם המשימה, מזינים שם ייחודי למשימה.
- אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא
us-central1.רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר בנושא מיקומי Dataflow.
- בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים בתבנית BigQuery to Elasticsearch (מ-BigQuery אל Elasticsearch).
- בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
- לוחצים על הפעלת העבודה.
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/ \ --parameters \ inputTableSpec=INPUT_TABLE_SPEC,\ connectionUrl=CONNECTION_URL,\ apiKey=APIKEY,\ index=INDEX
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud -
JOB_NAME: שם ייחודי של המשימה לפי בחירתכם -
REGION_NAME: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה:us-central1 -
VERSION: הגרסה של התבנית שבה רוצים להשתמשאפשר להשתמש בערכים הבאים:
-
latestכדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/ - שם הגרסה, כמו
2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
-
-
INPUT_TABLE_SPEC: שם הטבלה ב-BigQuery. -
CONNECTION_URL: כתובת ה-URL של Elasticsearch. -
APIKEY: מפתח ה-API שלכם בקידוד base64 לאימות. -
INDEX: האינדקס של Elasticsearch.
API
כדי להריץ את התבנית באמצעות API בארכיטקטורת REST, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launch_parameter": { "jobName": "JOB_NAME", "parameters": { "inputTableSpec": "INPUT_TABLE_SPEC", "connectionUrl": "CONNECTION_URL", "apiKey": "APIKEY", "index": "INDEX" }, "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/", } }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud -
JOB_NAME: שם ייחודי של המשימה לפי בחירתכם -
LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה:us-central1 -
VERSION: הגרסה של התבנית שבה רוצים להשתמשאפשר להשתמש בערכים הבאים:
-
latestכדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/ - שם הגרסה, כמו
2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
-
-
INPUT_TABLE_SPEC: שם הטבלה ב-BigQuery. -
CONNECTION_URL: כתובת ה-URL של Elasticsearch. -
APIKEY: מפתח ה-API שלכם בקידוד base64 לאימות. -
INDEX: האינדקס של Elasticsearch.
המאמרים הבאים
- מידע נוסף על תבניות Dataflow
- כאן אפשר לעיין ברשימת התבניות ש-Google סיפקה.