שליחת שאילתות לנתוני Cloud Storage בטבלאות BigLake
במאמר הזה מוסבר איך לשלוח שאילתות לנתונים שמאוחסנים בטבלת BigLake ב-Cloud Storage.
לפני שמתחילים
מוודאים שיש לכם טבלת BigLake ב-Cloud Storage.
התפקידים הנדרשים
כדי לשלוח שאילתות לטבלאות BigLake ב-Cloud Storage, צריך לוודא שיש לכם את התפקידים הבאים:
- צפייה בנתוני BigQuery (
roles/bigquery.dataViewer) - משתמש BigQuery (
roles/bigquery.user)
בהתאם להרשאות שלכם, אתם יכולים להקצות לעצמכם את התפקידים האלה או לבקש מהאדמין להקצות אותם לכם. מידע נוסף על מתן תפקידים זמין במאמר איך בודקים אילו תפקידים אפשר לתת במשאבים.
כדי לראות את ההרשאות הנדרשות לשאילתות בטבלאות Cloud Storage BigLake, מרחיבים את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
bigquery.jobs.createbigquery.readsessions.create(נדרש רק אם קוראים נתונים באמצעות BigQuery Storage Read API)bigquery.tables.getbigquery.tables.getData
יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
שליחת שאילתות לטבלאות 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).
כדי לשלוח שאילתה למקור נתונים חיצוני בלי ליצור טבלה קבועה, צריך לספק הגדרת טבלה לטבלה הזמנית, ואז להשתמש בהגדרת הטבלה הזו בפקודה או בקריאה כדי לשלוח שאילתה לטבלה הזמנית. אפשר לספק את הגדרת הטבלה באחת מהדרכים הבאות:
- קובץ הגדרת טבלה
- הגדרת סכימה מוטבעת
- קובץ סכימת JSON
קובץ הגדרת הטבלה או הסכימה שסופקה משמשים ליצירת הטבלה החיצונית הזמנית, והשאילתה מופעלת מול הטבלה החיצונית הזמנית.
כשמשתמשים בטבלה חיצונית זמנית, לא יוצרים טבלה באחד ממערכי הנתונים של 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.csvgs://bucket/path1/*.parquetgs://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.csvgs://bucket/path1/*.parquetgs://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, צריך לבצע את השלבים הבאים:
- יוצרים אובייקט
Job. - מאכלסים את הקטע
configurationבאובייקטJobבאמצעות אובייקטJobConfiguration. - מאכלסים את הקטע
queryבאובייקטJobConfigurationבאמצעות אובייקטJobConfigurationQuery. - מאכלסים את הקטע
tableDefinitionsשל אובייקטJobConfigurationQueryבאובייקטExternalDataConfiguration. בשדהconnectionIdמציינים את החיבור שבו רוצים להשתמש כדי להתחבר ל-Cloud Storage. - מבצעים קריאה ל-
jobs.insertmethod כדי להריץ את השאילתה באופן אסינכרוני, או ל-jobs.querymethod כדי להריץ את השאילתה באופן סינכרוני, ומעבירים את האובייקטJob.