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

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

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

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

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

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

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

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

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

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

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

הרצת שאילתות על טבלאות BigLake

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

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

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

Apache Spark

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

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

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

יוצרים אשכול עם צומת יחיד באמצעות פעולת האתחול של מחבר 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

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

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

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

יוצרים אשכול עם צומת אחד באמצעות פעולת האתחול של מחבר ל-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. מפעילים את ה-method‏ jobs.insert כדי להריץ את השאילתה באופן אסינכרוני, או את ה-method‏ jobs.query כדי להריץ את השאילתה באופן סינכרוני, ומעבירים את האובייקט Job.

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