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