שליחת שאילתות לנתוני Cloud Storage בטבלאות BigLake

במאמר הזה מוסבר איך לשלוח שאילתות לנתונים שמאוחסנים בטבלת BigLake ב-Cloud Storage.

לפני שמתחילים

מוודאים שיש לכם טבלת BigLake ב-Cloud Storage.

התפקידים הנדרשים

כדי לשלוח שאילתות לטבלאות BigLake ב-Cloud Storage, צריך לוודא שיש לכם את התפקידים הבאים:

  • צפייה בנתוני BigQuery ‏ (roles/bigquery.dataViewer)
  • משתמש BigQuery‏ (roles/bigquery.user)

בהתאם להרשאות שלכם, אתם יכולים להקצות לעצמכם את התפקידים האלה או לבקש מהאדמין להקצות אותם לכם. מידע נוסף על מתן תפקידים זמין במאמר איך בודקים אילו תפקידים אפשר לתת במשאבים.

כדי לראות את ההרשאות הנדרשות לשאילתות בטבלאות Cloud Storage BigLake, מרחיבים את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

שליחת שאילתות לטבלאות BigLake

אחרי שיוצרים טבלת BigLake ב-Cloud Storage, אפשר להריץ עליה שאילתות באמצעות תחביר GoogleSQL, בדיוק כמו בטבלה ב-BigQuery רגילה. לדוגמה, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.

שליחת שאילתות לטבלאות BigLake באמצעות כלים חיצוניים לעיבוד נתונים

אתם יכולים להשתמש במחברים של BigQuery עם כלים אחרים לעיבוד נתונים כדי לגשת לטבלאות BigLake ב-Cloud Storage. מידע נוסף זמין במאמר בנושא מחברים.

Apache Spark

בדוגמה הבאה נעשה שימוש ב-Dataproc, אבל היא פועלת גם עם כל פריסת Spark שמשתמשת במחבר Spark-BigQuery.

בדוגמה הזו, אתם מספקים את המחבר Spark-BigQuery כפעולת אתחול כשאתם יוצרים אשכול. הפעולה הזו מאפשרת לכם להשתמש במחברת Zeppelin ולתרגל את תהליך העבודה של ניתוח הנתונים.

גרסאות של מחבר Spark-BigQuery מפורטות במאגר GoogleCloudDataproc/spark-bigquery-connector ב-GitHub.

יצירת אשכול עם צומת יחיד באמצעות פעולת האתחול של המחבר Spark-BigQuery:

gcloud dataproc clusters create biglake-demo-cluster \
    --optional-components=ZEPPELIN \
    --region=REGION \
    --enable-component-gateway \
    --single-node \
    --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \
    --metadata spark-bigquery-connector-url= gs://spark-lib/bigquery/spark-bigquery-with-dependencies_SCALA_VERSION-CONNECTOR_VERSION.jar

‫Apache Hive

בדוגמה הבאה נעשה שימוש ב-Dataproc, אבל היא פועלת גם עם כל פריסת Hive שמשתמשת במחבר Hive-BigQuery.

בדוגמה הזו, מספקים את מחבר Hive-BigQuery כפעולת אתחול כשיוצרים אשכול.

גרסאות של מחבר Hive-BigQuery מפורטות במאגר GoogleCloudDataproc/hive-bigquery-connector ב-GitHub.

יוצרים אשכול עם צומת יחיד באמצעות פעולת האתחול של המחבר Hive-BigQuery:

gcloud dataproc clusters create biglake-hive-demo-cluster \
    --region=REGION \
    --single-node \
    --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \
    --metadata hive-bigquery-connector-url=gs://goog-dataproc-artifacts-REGION/hive-bigquery/hive-bigquery-connector-CONNECTOR_VERSION.jar

מידע נוסף על מחבר Hive-BigQuery זמין במאמר שימוש במחבר Hive-BigQuery.

Dataflow

כדי לקרוא טבלאות BigLake מ-Dataflow, צריך להשתמש במחבר Dataflow במצב DIRECT_READ כדי להשתמש ב-BigQuery Storage API. יש גם תמיכה בקריאה ממחרוזת שאילתה. אפשר לקרוא מידע נוסף על BigQuery I/O במאמרי העזרה של Apache Beam.

שליחת שאילתות לטבלאות זמניות ב-BigLake

שאילתות של מקור נתונים חיצוני באמצעות טבלה זמנית שימושיות לשאילתות חד-פעמיות אד-הוק על נתונים חיצוניים, או לתהליכי חילוץ, טרנספורמציה וטעינה (ETL).

כדי לשלוח שאילתה למקור נתונים חיצוני בלי ליצור טבלה קבועה, צריך לספק הגדרת טבלה לטבלה הזמנית, ואז להשתמש בהגדרת הטבלה הזו בפקודה או בקריאה כדי לשלוח שאילתה לטבלה הזמנית. אפשר לספק את הגדרת הטבלה באחת מהדרכים הבאות:

קובץ הגדרת הטבלה או הסכימה שסופקה משמשים ליצירת הטבלה החיצונית הזמנית, והשאילתה מופעלת מול הטבלה החיצונית הזמנית.

כשמשתמשים בטבלה חיצונית זמנית, לא יוצרים טבלה באחד ממערכי הנתונים של BigQuery. אי אפשר לשתף את הטבלה עם אחרים כי היא לא נשמרת לצמיתות במערך נתונים.

אפשר ליצור טבלה זמנית שמקושרת למקור נתונים חיצוני ולבצע עליה שאילתות באמצעות כלי שורת הפקודה של BigQuery, ה-API או ספריות הלקוח.

BQ

משתמשים בפקודה bq query עם הדגל --external_table_definition.

(אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום.

כדי להריץ שאילתה בטבלה זמנית שמקושרת למקור נתונים חיצוני באמצעות קובץ הגדרת טבלה, מזינים את הפקודה הבאה.

bq --location=LOCATION query \
--external_table_definition=TABLE::DEFINITION_FILE \
'QUERY'

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

  • LOCATION: השם של המיקום. הדגל --location הוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ ‎.bigqueryrc.
  • TABLE: השם של הטבלה הזמנית שיוצרים.
  • DEFINITION_FILE: הנתיב אל קובץ הגדרת הטבלה במחשב המקומי.
  • QUERY: השאילתה ששולחים לטבלה הזמנית.

לדוגמה, הפקודה הבאה יוצרת שאילתה על טבלה זמנית בשם sales באמצעות קובץ הגדרת טבלה בשם sales_def.

bq query \
--external_table_definition=sales::sales_def@us.myconnection \
'SELECT
  Region,
  Total_sales
FROM
  sales'

כדי ליצור שאילתה בטבלה זמנית שמקושרת למקור הנתונים החיצוני באמצעות הגדרת סכימה מוטבעת, מזינים את הפקודה הבאה.

bq --location=LOCATION query \
--external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
'query'

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

  • LOCATION: השם של המיקום. הדגל --location הוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ ‎.bigqueryrc.
  • TABLE: השם של הטבלה הזמנית שיוצרים.
  • SCHEMA: הגדרת הסכימה במקום בפורמט field:data_type,field:data_type.
  • SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני, לדוגמה, CSV.
  • BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה, בפורמט gs://bucket_name/[folder_name/]file_pattern.

    אפשר לבחור כמה קבצים מהמאגר על ידי ציון כוכבית אחת (*) כתו כללי ב-file_pattern. לדוגמה, gs://mybucket/file00*.parquet. מידע נוסף זמין במאמר בנושא תמיכה בתווים כלליים בכתובות URI של Cloud Storage.

    אפשר לציין כמה דליים לאפשרות uris על ידי ציון כמה נתיבים.

    בדוגמאות הבאות מוצגים ערכים חוקיים של uris:

    • gs://bucket/path1/myfile.csv
    • gs://bucket/path1/*.parquet
    • gs://bucket/path1/file1*, gs://bucket1/path1/*

    כשמציינים ערכים של uris שמטרגטים כמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.

    מידע נוסף על שימוש בכתובות URI של Cloud Storage ב-BigQuery זמין במאמר בנושא נתיב משאב ב-Cloud Storage.

  • PROJECT_ID: הפרויקט שמכיל את החיבור.

  • REGION: האזור שמכיל את החיבור, לדוגמה us.

  • CONNECTION_ID: שם החיבור, לדוגמה myconnection.

  • QUERY: השאילתה ששולחים לטבלה הזמנית.

לדוגמה, הפקודה הבאה יוצרת שאילתה בטבלה זמנית בשם sales שמקושרת לקובץ CSV שמאוחסן ב-Cloud Storage עם הגדרת הסכימה הבאה: Region:STRING,Quarter:STRING,Total_sales:INTEGER.

bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv@us.myconnection \
'SELECT
  Region,
  Total_sales
FROM
  sales'

כדי ליצור שאילתה בטבלה זמנית שמקושרת למקור נתונים חיצוני באמצעות קובץ סכימה של JSON, מזינים את הפקודה הבאה.

bq --location=LOCATION query \
--external_table_definition=SCHEMA_FILE@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
'QUERY'

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

  • LOCATION: השם של המיקום. הדגל --location הוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ ‎.bigqueryrc.
  • SCHEMA_FILE: הנתיב לקובץ סכימת ה-JSON במחשב המקומי.
  • SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני, לדוגמה, CSV.
  • BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה, בפורמט gs://bucket_name/[folder_name/]file_pattern.

    אפשר לבחור כמה קבצים מהמאגר על ידי ציון כוכבית אחת (*) כתו כללי ב-file_pattern. לדוגמה, gs://mybucket/file00*.parquet. מידע נוסף זמין במאמר בנושא תמיכה בתווים כלליים בכתובות URI של Cloud Storage.

    אפשר לציין כמה דליים לאפשרות uris על ידי ציון כמה נתיבים.

    בדוגמאות הבאות מוצגים ערכים חוקיים של uris:

    • gs://bucket/path1/myfile.csv
    • gs://bucket/path1/*.parquet
    • gs://bucket/path1/file1*, gs://bucket1/path1/*

    כשמציינים ערכים של uris שמטרגטים כמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.

    מידע נוסף על שימוש בכתובות URI של Cloud Storage ב-BigQuery זמין במאמר בנושא נתיב משאב ב-Cloud Storage.

  • PROJECT_ID: הפרויקט שמכיל את החיבור.

  • REGION: האזור שמכיל את החיבור, לדוגמה us.

  • CONNECTION_ID: שם החיבור, לדוגמה myconnection.

  • QUERY: השאילתה ששולחים לטבלה הזמנית.

לדוגמה, הפקודה הבאה יוצרת שאילתה בטבלה זמנית בשם sales שמקושרת לקובץ CSV שמאוחסן ב-Cloud Storage באמצעות קובץ הסכימה /tmp/sales_schema.json.

  bq query \
  --external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv@us.myconnection \
  'SELECT
      Region,
      Total_sales
    FROM
      sales'

API

כדי להריץ שאילתה באמצעות ה-API, צריך לבצע את השלבים הבאים:

  1. יוצרים אובייקט Job.
  2. מאכלסים את הקטע configuration באובייקט Job באמצעות אובייקט JobConfiguration.
  3. מאכלסים את הקטע query באובייקט JobConfiguration באמצעות אובייקט JobConfigurationQuery.
  4. מאכלסים את הקטע tableDefinitions של אובייקט JobConfigurationQuery באובייקט ExternalDataConfiguration. בשדה connectionId מציינים את החיבור שבו רוצים להשתמש כדי להתחבר ל-Cloud Storage.
  5. מבצעים קריאה ל-jobs.insert method כדי להריץ את השאילתה באופן אסינכרוני, או ל-jobs.query method כדי להריץ את השאילתה באופן סינכרוני, ומעבירים את האובייקט Job.

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