תבנית BigQuery ל-Clickhouse

התבנית BigQuery to Clickhouse (מ-BigQuery אל Clickhouse) היא צינור להעברת נתונים באצווה שמעתיק נתונים מטבלה ב-BigQuery לטבלה קיימת ב-Clickhouse. התבנית יכולה לקרוא את כל הטבלה או לקרוא רשומות ספציפיות באמצעות שאילתה שסופקה.

הדרישות לגבי צינורות עיבוד נתונים

  • טבלת המקור ב-BigQuery צריכה להתקיים.
  • הטבלה ב-Clickhouse חייבת להתקיים.

פרמטרים של תבניות

פרמטרים נדרשים

  • ‫jdbcUrl: כתובת ה-URL של היעד ClickHouse JDBC בפורמט jdbc:clickhouse://host:port/schema. אפשר להוסיף כל אפשרות JDBC בסוף כתובת ה-URL של JDBC. לדוגמה, jdbc:clickhouse://localhost:8123/default.
  • ‫clickHouseUsername: שם המשתמש ב-ClickHouse לאימות.
  • ‫clickHouseTable: שם טבלת היעד ב-ClickHouse שאליה רוצים להוסיף את הנתונים.

פרמטרים אופציונליים

  • ‫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.
  • ‫clickHousePassword: הסיסמה של ClickHouse לאימות.
  • ‫maxInsertBlockSize: גודל הבלוק המקסימלי להוספה, אם אנחנו שולטים ביצירת הבלוקים להוספה (אפשרות ClickHouseIO).
  • ‫insertDistributedSync: אם ההגדרה מופעלת, השאילתה מוכנסת להמתנה מבוזרת עד שהנתונים יישלחו לכל הצמתים באשכול. (אפשרות ClickHouseIO).
  • ‫insertQuorum: בשאילתות INSERT בטבלה המשוכפלת, המערכת מחכה עד שהנתונים ייכתבו למספר העותקים שצוין, ואז מוסיפה את הנתונים בצורה לינארית. ‫0 – מושבת. ההגדרה הזו מושבתת בהגדרות ברירת המחדל של השרת (אפשרות ClickHouseIO).
  • ‫insertDeduplicate: בשאילתות INSERT בטבלה המשוכפלת, מציין שצריך לבצע ביטול כפילויות של בלוקים להוספה.
  • ‫maxRetries: המספר המקסימלי של ניסיונות חוזרים לכל הוספה.

הרצת התבנית

המסוף

  1. עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow.
  2. כניסה לדף Create job from template
  3. בשדה שם המשימה, מזינים שם ייחודי למשימה.
  4. אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא us-central1.

    רשימה של אזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר מיקומי Dataflow.

  5. בתפריט הנפתח Dataflow template, בוחרים את התבנית BigQuery to Clickhouse.
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. לוחצים על הפעלת העבודה.

gcloud

במעטפת או בטרמינל, מריצים את התבנית:

gcloud dataflow flex-template run JOB_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/BigQuery_to_Clickhouse \
    --parameters \
jdbcUrl=JDBC_URL,\
clickHouseUsername=CLICKHOUSE_USERNAME,\
clickHouseTable=CLICKHOUSE_TABLE

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Google Cloud Dataflow
  • ‫JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • ‫REGION_NAME: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • ‫VERSION: הגרסה של התבנית שרוצים להשתמש בה

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את הגרסה הזו בתיקיית ההורה המתאימה עם התאריך בדלי – gs://dataflow-templates/
  • ‫JDBC_URL: כתובת ה-JDBC.
  • ‫CLICKHOUSE_USERNAME: שם המשתמש שלכם ב-Clickhouse.
  • ‫CLICKHOUSE_TABLE: טבלת Clickhouse.

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": {
          "jdbcUrl": "JDBC_URL",
          "clickHouseUsername": "CLICKHOUSE_USERNAME",
          "clickHouseTable": "CLICKHOUSE_TABLE"
      },
      "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/BigQuery_to_Clickhouse",
   }
}

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Google Cloud Dataflow
  • ‫JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • ‫LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • ‫VERSION: הגרסה של התבנית שרוצים להשתמש בה

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את הגרסה הזו בתיקיית ההורה המתאימה עם התאריך בדלי – gs://dataflow-templates/
  • ‫JDBC_URL: כתובת ה-JDBC.
  • ‫CLICKHOUSE_USERNAME: שם המשתמש שלכם ב-Clickhouse.
  • ‫CLICKHOUSE_TABLE: טבלת Clickhouse.

המאמרים הבאים