ייצוא נתוני טבלה ל-Cloud Storage
בדף הזה מוסבר איך לייצא או לחלץ נתונים מטבלאות ב-BigQuery אל Cloud Storage.
אחרי טעינת הנתונים ל-BigQuery, אפשר לייצא אותם בכמה פורמטים. אפשר לייצא מ-BigQuery עד 1GB של נתונים לוגיים לקובץ יחיד. אם מייצאים יותר מ-1 GB של נתונים, צריך לייצא את הנתונים לכמה קבצים. כשמייצאים את הנתונים לכמה קבצים, הגודל של הקבצים משתנה.
אפשר גם לייצא את תוצאות השאילתה באמצעות ההצהרה EXPORT DATA. אפשר להשתמש ב-EXPORT DATA OPTIONS
כדי לציין את הפורמט של הנתונים המיוצאים.
לבסוף, אפשר להשתמש בשירות כמו Dataflow כדי לקרוא נתונים מ-BigQuery במקום לייצא אותם מ-BigLake. מידע נוסף על שימוש ב-Dataflow לקריאה מ-BigQuery וכתיבה ל-BigQuery זמין במסמכי התיעוד בנושא קלט/פלט של BigQuery.
מגבלות על ייצוא
כשמייצאים נתונים מ-BigQuery, חשוב לשים לב לנקודות הבאות:
- אי אפשר לייצא נתונים מטבלה לקובץ מקומי, ל-Google Sheets או ל-Google Drive. המיקום היחיד שנתמך לייצוא הוא Cloud Storage. מידע על שמירת תוצאות של שאילתות זמין במאמר הורדה ושמירה של תוצאות שאילתות.
- אפשר לייצא עד 1GB של נתונים לוגיים של טבלה לקובץ יחיד. אם אתם מייצאים יותר מ-1GB של נתונים, אתם יכולים להשתמש בתו כללי כדי לייצא את הנתונים לכמה קבצים. כשמייצאים נתונים לכמה קבצים, הגודל של הקבצים משתנה. כדי להגביל את גודל הקובץ המיוצא, אפשר לחלק את הנתונים ולייצא כל מחיצה.
- אין ערובה לגודל הקובץ שייווצר כשמשתמשים בהצהרה
EXPORT DATA. - מספר הקבצים שנוצרים על ידי עבודת חילוץ יכול להשתנות.
- אי אפשר לייצא נתונים מקוננים וחוזרים בפורמט CSV. יש תמיכה בנתונים מקוננים וחוזרים בייצוא של קובצי Avro, JSON ו-Parquet.
- כשמייצאים נתונים בפורמט JSON, סוגי הנתונים INT64 (מספר שלם) מקודדים כמחרוזות JSON כדי לשמור על דיוק של 64 ביט כשמערכות אחרות קוראות את הנתונים.
- אי אפשר לייצא נתונים מכמה טבלאות במשימת חילוץ אחת.
- כשמייצאים נתונים באמצעות מסוף Cloud de Confiance , אי אפשר לבחור סוג דחיסה אחר מלבד
GZIP. - כשמייצאים טבלה בפורמט JSON, הסמלים
<,>ו-&מומרים באמצעות סימון Unicode\uNNNN, כאשרNהיא ספרה הקסדצימלית. לדוגמה,profit&lossהופך ל-profit\u0026loss. ההמרה הזו ל-Unicode מתבצעת כדי למנוע פרצות אבטחה. - סדר הנתונים בטבלה המיוצאת לא מובטח, אלא אם משתמשים בהצהרה
EXPORT DATAומציינים פסקהORDER BYב-query_statement. - BigQuery לא תומך בנתיבי משאבים ב-Cloud Storage שכוללים כמה לוכסנים עוקבים אחרי שני הלכסנים הראשוניים.
שמות של אובייקטים ב-Cloud Storage יכולים להכיל כמה תווים עוקבים של קו נטוי ("/"). עם זאת, BigQuery ממיר כמה לוכסנים עוקבים ללוכסן אחד. לדוגמה, נתיב המשאב הבא, למרות שהוא תקין ב-Cloud Storage, לא פועל ב-BigQuery:
gs://bucket/my//object//name. - נתונים חדשים שנטענו ל-BigQuery בזמן שמשימת החילוץ פועלת לא ייכללו במשימת החילוץ הזו. כדי לייצא את הנתונים החדשים, צריך ליצור משימת חילוץ חדשה.
לפני שמתחילים
להקצות תפקידים בניהול הזהויות והרשאות הגישה (IAM) שמעניקים למשתמשים את ההרשאות הנדרשות לביצוע כל משימה שמופיעה במאמר הזה.
ההרשאות הנדרשות
כדי לבצע את המשימות שמתוארות במאמר הזה, נדרשות ההרשאות הבאות.
הרשאות לייצוא נתונים מטבלה ב-BigQuery
כדי לייצא נתונים מטבלה ב-BigQuery, אתם צריכים את הרשאת bigquery.tables.export IAM.
כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאה bigquery.tables.export:
roles/bigquery.dataViewerroles/bigquery.dataOwnerroles/bigquery.dataEditorroles/bigquery.admin
הרשאות להפעלת משימת חילוץ
כדי להפעיל עבודת חילוץ, אתם צריכים את הרשאת ה-IAM bigquery.jobs.create.
כל אחד מתפקידי ה-IAM המוגדרים מראש הבאים כולל את ההרשאות שנדרשות להפעלת משימת חילוץ:
roles/bigquery.userroles/bigquery.jobUserroles/bigquery.admin
הרשאות לכתיבת הנתונים בקטגוריה של Cloud Storage
כדי לכתוב את הנתונים לקטגוריה קיימת ב-Cloud Storage, אתם צריכים את הרשאות ה-IAM הבאות:
storage.objects.createstorage.objects.delete
כל אחד מתפקידי ה-IAM המוגדרים מראש הבאים כולל את ההרשאות שנדרשות כדי לכתוב את הנתונים לקטגוריה קיימת של Cloud Storage:
roles/storage.objectAdminroles/storage.admin
במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.
פורמטים של ייצוא וסוגי דחיסה
BigQuery תומך בפורמטים הבאים של נתונים ובסוגי הדחיסה הבאים של נתונים מיוצאים.
| פורמט נתונים | סוגי דחיסה נתמכים | פרטים |
|---|---|---|
| CSV | GZIP | אתם יכולים לשלוט בתו המפריד של קובץ ה-CSV בנתונים המיוצאים באמצעות הדגל אין תמיכה בנתונים שהם רכיב בתוך רכיב ובנתונים שחוזרים על עצמם. |
| JSON | GZIP | יש תמיכה בנתונים בתוך נתונים ובנתונים חוזרים. |
| Avro | DEFLATE, SNAPPY | אין תמיכה ב-GZIP בייצוא של Avro. יש תמיכה בנתונים בתוך נתונים ובנתונים חוזרים. פרטים על ייצוא בפורמט Avro |
| Parquet | SNAPPY, GZIP, ZSTD | יש תמיכה בנתונים בתוך נתונים ובנתונים חוזרים. פרטים על ייצוא ל-Parquet |
ייצוא נתונים
בקטעים הבאים מוסבר איך לייצא ל-Cloud Storage את נתוני הטבלה, המטא-נתונים של הטבלה ותוצאות השאילתות.
ייצוא נתוני טבלה
אפשר לייצא נתונים מטבלה באמצעות:
- שימוש במסוף Cloud de Confiance
- שימוש בפקודה
bq extractבכלי שורת הפקודה של BigQuery - שליחת עבודת
extractבאמצעות ה-API או ספריות הלקוח
צריך לבחור אחת מהאפשרויות האלה:
המסוף
פותחים את הדף BigQuery במסוף Cloud de Confiance .
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets (מערכי נתונים) ואז לוחצים על מערך הנתונים.
לוחצים על סקירה כללית > טבלאות ובוחרים טבלה.
בחלונית הפרטים, לוחצים על העלאה ייצוא.
בתיבת הדו-שיח Export to Google Cloud Storage (ייצוא אל Google Cloud Storage):
- בקטע מיקום ב-GCS, בוחרים את הדלי, התיקייה או הקובץ שאליהם רוצים לייצא את הנתונים.
- בקטע פורמט ייצוא, בוחרים את הפורמט של הנתונים המיוצאים: CSV, JSON (עם תווי שורה), Avro או Parquet.
- בקטע דחיסה, בוחרים פורמט דחיסה או באפשרות
Noneכדי לא לדחוס את הקובץ.
לוחצים על שמירה כדי לייצא את הטבלה.
כדי לבדוק את התקדמות העבודה, בחלונית Explorer לוחצים על Job history ומחפשים עבודה מסוג EXTRACT.
כדי לייצא תצוגות ל-Cloud Storage, משתמשים בהצהרת EXPORT DATA OPTIONS.
SQL
משתמשים בהצהרה EXPORT DATA.
בדוגמה הבאה מיוצאים שדות נבחרים מטבלה בשם mydataset.table1:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
EXPORT DATA OPTIONS ( uri = 'gs://bucket/folder/*.csv', format = 'CSV', overwrite = true, header = true, field_delimiter = ';') AS ( SELECT field1, field2 FROM mydataset.table1 ORDER BY field1 );
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
משתמשים בפקודה bq extract עם הדגל --destination_format.
(אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום.
דגלים אופציונליים אחרים:
-
--compression: סוג הדחיסה שבה יש להשתמש עבור קבצים מיוצאים. -
--field_delimiter: התו שמציין את הגבול בין העמודות בקובץ הפלט של ייצוא CSV. גם\tוגםtabמותרים לשימוש כמפרידים בין כרטיסיות. -
--print_header: כשמציינים את האפשרות הזו, שורות הכותרת מודפסות בפורמטים שיש להם כותרות, כמו CSV.
bq extract --location=location \ --destination_format format \ --compression compression_type \ --field_delimiter delimiter \ --print_header=boolean \ project_id:dataset.table \ gs://bucket/filename.ext
כאשר:
- location הוא השם של המיקום. הדגל
--locationהוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ .bigqueryrc. - format הוא הפורמט של הנתונים המיוצאים:
CSV,NEWLINE_DELIMITED_JSON,AVROאוPARQUET. - compression_type הוא סוג דחיסה נתמך לפורמט הנתונים שלכם. פורמטים של ייצוא וסוגי דחיסה
- delimiter הוא התו שמציין את הגבול בין העמודות בייצוא ל-CSV.
\tו-tabהם שמות מקובלים לכרטיסייה. - boolean הוא
trueאוfalse. אם הערך הואtrue, שורות הכותרת מודפסות בנתונים המיוצאים אם פורמט הנתונים תומך בכותרות. ערך ברירת המחדל הואtrue. - project_id הוא מזהה הפרויקט.
- dataset הוא השם של מערך נתוני המקור.
- table היא הטבלה שמייצאים. אם משתמשים במעצב מחיצות, צריך להקיף את נתיב הטבלה בגרשיים בודדים או להשתמש בתו
$כתו בריחה. - bucket הוא השם של קטגוריית Cloud Storage שאליה מייצאים את הנתונים. מערך הנתונים ב-BigQuery וקטגוריית Cloud Storage צריכים להיות באותו מיקום.
- filename.ext הוא השם והסיומת של קובץ הנתונים המיוצא. אפשר לייצא לכמה קבצים באמצעות תו כללי לחיפוש.
דוגמאות:
לדוגמה, הפקודה הבאה מייצאת את mydataset.mytable לקובץ דחוס בפורמט gzip בשם myfile.csv. myfile.csv מאוחסן בקטגוריה של Cloud Storage בשם example-bucket.
bq extract \ --compression GZIP \ 'mydataset.mytable' \ gs://example-bucket/myfile.csv
פורמט היעד שמוגדר כברירת מחדל הוא CSV. כדי לייצא ל-JSON או ל-Avro, משתמשים בדגל destination_format ומגדירים אותו ל-NEWLINE_DELIMITED_JSON או ל-AVRO. לדוגמה:
bq extract \ --destination_format NEWLINE_DELIMITED_JSON \ 'mydataset.mytable' \ gs://example-bucket/myfile.json
הפקודה הבאה מייצאת את mydataset.mytable לקובץ Avro שדחוס באמצעות Snappy. שם הקובץ הוא myfile.avro. myfile.avro מיוצא לקטגוריה של Cloud Storage בשם example-bucket.
bq extract \ --destination_format AVRO \ --compression SNAPPY \ 'mydataset.mytable' \ gs://example-bucket/myfile.avro
הפקודה הבאה מייצאת מחיצה אחת של mydataset.my_partitioned_table לקובץ CSV ב-Cloud Storage:
bq extract \ --destination_format CSV \ 'mydataset.my_partitioned_table$0' \ gs://example-bucket/single_partition.csv
API
כדי לייצא נתונים, יוצרים extract משימה וממלאים את הגדרות המשימה.
(אופציונלי) מציינים את המיקום במאפיין location בקטע jobReference של משאב המשרה.
יוצרים משימת חילוץ שמפנה לנתוני המקור ב-BigQuery ולמקום היעד ב-Cloud Storage.
מציינים את טבלת המקור באמצעות אובייקט ההגדרה
sourceTableשמכיל את מזהה הפרויקט, מזהה מערך הנתונים ומזהה הטבלה.המאפיין
destination URI(s)צריך להיות מוגדר באופן מלא, בפורמטgs://bucket/filename.ext. כל URI יכול להכיל תו כללי אחד לחיפוש '*', והוא חייב להופיע אחרי שם הקטגוריה.מגדירים את פורמט הנתונים באמצעות המאפיין
configuration.extract.destinationFormat. לדוגמה, כדי לייצא קובץ JSON, מגדירים את המאפיין הזה לערךNEWLINE_DELIMITED_JSON.כדי לבדוק את סטטוס המשרה, מתקשרים אל jobs.get(job_id) עם המזהה של המשרה שהוחזר מהבקשה הראשונית.
- אם התוצאה היא
status.state = DONE, העבודה הושלמה בהצלחה. - אם המאפיין
status.errorResultקיים, הבקשה נכשלה והאובייקט הזה יכלול מידע שמתאר מה השתבש. - אם
status.errorResultלא מופיע, העבודה הסתיימה בהצלחה, אבל יכול להיות שהיו כמה שגיאות לא קריטיות. שגיאות לא קריטיות מפורטות במאפייןstatus.errorsשל אובייקט המשימה שמוחזר.
- אם התוצאה היא
הערות לגבי ה-API:
מומלץ ליצור מזהה ייחודי ולהעביר אותו כ-
jobReference.jobIdכשמתקשרים אלjobs.insertכדי ליצור משימה. הגישה הזו עמידה יותר בפני כשלים ברשת, כי הלקוח יכול לבצע בדיקה או לנסות שוב באמצעות מזהה המשימה הידוע.הקריאה ל-
jobs.insertבמזהה משימה נתון היא אידמפוטנטית. במילים אחרות, אפשר לנסות שוב כמה פעמים שרוצים עם אותו מזהה משימה, ולכל היותר אחת מהפעולות האלה תצליח.
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי C#הוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery C# API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Go
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
PHP
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי PHPהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery PHP API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Ruby
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Rubyהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Ruby API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
ייצוא מטא-נתונים של טבלה
כדי לייצא מטא-נתונים של טבלה מטבלאות Iceberg, משתמשים בהצהרת ה-SQL הבאה:
EXPORT TABLE METADATA FROM `[[PROJECT_NAME.]DATASET_NAME.]TABLE_NAME`;
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_NAME: שם הפרויקט של הטבלה. ערך ברירת המחדל הוא הפרויקט שמריץ את השאילתה הזו.
- DATASET_NAME: השם של מערך הנתונים של הטבלה.
- TABLE_NAME: שם הטבלה.
המטא-נתונים המיוצאים נמצאים בתיקייה STORAGE_URI/metadata, כאשר STORAGE_URI הוא מיקום האחסון של הטבלה שהוגדר באפשרויות.
ייצוא תוצאות של שאילתה
כדי לייצא את תוצאות השאילתה ל-Cloud Storage במסוף Cloud de Confiance :
פותחים את הדף BigQuery במסוף Cloud de Confiance .
לוחצים על שאילתת SQL.
מזינים שאילתת GoogleSQL תקינה באזור הטקסט של עורך השאילתות.
לוחצים על Run.
אחרי שהתוצאות מוחזרות, לוחצים על שמירת התוצאות > Cloud Storage.
בתיבת הדו-שיח Export to Google Cloud Storage (ייצוא אל Google Cloud Storage):
- בקטע מיקום ב-GCS, בוחרים את הדלי, התיקייה או הקובץ שאליהם רוצים לייצא את הנתונים.
- בקטע פורמט ייצוא, בוחרים את הפורמט של הנתונים המיוצאים: CSV, JSON (עם תווי שורה), Avro או Parquet.
- בקטע דחיסה, בוחרים פורמט דחיסה או באפשרות
Noneכדי לא לדחוס את הקובץ.
לוחצים על שמירה כדי לייצא את תוצאות השאילתה.
כדי לבדוק את התקדמות העבודה, מרחיבים את החלונית Job history ומחפשים את העבודה עם הסוג EXTRACT.
פרטי ייצוא בפורמט Avro
נתונים בפורמט Avro מוצגים ב-BigQuery בדרכים הבאות:
- קבצי הייצוא שמתקבלים הם קובצי Avro container.
- כל שורה ב-BigQuery מיוצגת כרשומת Avro. נתונים מקוננים מיוצגים על ידי אובייקטים מקוננים של רשומות.
- שדות
REQUIREDמיוצגים כסוגי ה-Avro המתאימים. לדוגמה, סוגINTEGERב-BigQuery ממופה לסוגLONGב-Avro. - שדות
NULLABLEמיוצגים כאיחוד Avro של הסוג המתאים ושל 'null'. - שדות
REPEATEDמיוצגים כמערכי Avro. - סוגי הנתונים
TIMESTAMPמיוצגים כסוג לוגיtimestamp-micros(הם מוסיפים הערות לסוגLONGשל Avro) כברירת מחדל גם במשימות Extract וגם ב-SQL של Export Data. (חשוב לדעת: אפשר להוסיףuse_avro_logical_types=Falseל-Export Data Optionsכדי להשבית את הסוג הלוגי, כך שבמקום זאת ייעשה שימוש בסוגstringבעמודת חותמת הזמן, אבל בעבודות Extract תמיד נעשה שימוש בסוג הלוגי Avro). - סוגי הנתונים
DATEמיוצגים כסוג לוגיdate(הם מוסיפים הערות לסוגיINTAvro) כברירת מחדל ב-SQL של ייצוא נתונים, אבל מיוצגים כסוגstringכברירת מחדל במשימות חילוץ. (הערה: אפשר להוסיףuse_avro_logical_types=Falseל-Export Data Optionsכדי להשבית את הסוג הלוגי, או להשתמש בדגל--use_avro_logical_types=Trueכדי להפעיל את הסוג הלוגי בעבודות Extract). - סוגי הנתונים
TIMEמיוצגים כסוג לוגיtimestamp-micro(הם מוסיפים הערות לסוגיLONGAvro) כברירת מחדל ב-Export Data SQL, אבל מיוצגים כסוגstringכברירת מחדל במשימות Extract. (הערה: אפשר להוסיףuse_avro_logical_types=Falseל-Export Data Optionsכדי להשבית את הסוג הלוגי, או להשתמש בדגל--use_avro_logical_types=Trueכדי להפעיל את הסוג הלוגי במשימות Extract). - סוגי הנתונים
DATETIMEמיוצגים כסוגיSTRINGשל Avro (סוג מחרוזת עם סוג לוגי מותאם אישית בשםdatetime) כברירת מחדל ב-Export Data SQL, אבל מיוצגים כסוגstringכברירת מחדל במשימות Extract. (הערה: אפשר להוסיףuse_avro_logical_types=Falseל-Export Data Optionsכדי להשבית את הסוג הלוגי, או להשתמש בדגל--use_avro_logical_types=Trueכדי להפעיל את הסוג הלוגי בעבודות Extract). - אין תמיכה בסוגי RANGE בייצוא של Avro.
סוגי הנתונים NUMERIC(P[, S]) ו-BIGNUMERIC(P[, S]) עם פרמטרים מעבירים את הפרמטרים של סוג הדיוק והקנה מידה שלהם לסוג הלוגי העשרוני של Avro.
אי אפשר להשתמש בפורמט Avro בשילוב עם דחיסת GZIP. כדי לדחוס נתוני Avro, משתמשים בכלי שורת הפקודה של BigQuery או ב-API ומציינים אחד מסוגי הדחיסה הנתמכים לנתוני Avro: DEFLATE או SNAPPY.
פרטי ייצוא של קובצי Parquet
BigQuery ממיר סוגי נתונים של GoogleSQL לסוגי הנתונים הבאים של Parquet:
| סוג נתונים ב-BigQuery | סוג פרימיטיבי של Parquet | סוג לוגי של Parquet |
|---|---|---|
| מספר שלם | INT64 |
NONE |
| Numeric | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = 38, scale = 9) |
| מספרי(P[, S]) | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = P, scale = S) |
| BigNumeric | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = 76, scale = 38) |
| BigNumeric(P[, S]) | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = P, scale = S) |
| נקודה צפה | FLOAT |
NONE |
| בוליאני | BOOLEAN |
NONE |
| String | BYTE_ARRAY |
STRING (UTF8) |
| בייטים | BYTE_ARRAY |
NONE |
| תאריך | INT32 |
DATE |
| תאריך ושעה | INT64 |
TIMESTAMP (isAdjustedToUTC = false, unit = MICROS) |
| שעה | INT64 |
TIME (isAdjustedToUTC = true, unit = MICROS) |
| חותמת הזמן | INT64 |
TIMESTAMP (isAdjustedToUTC = false, unit = MICROS) |
| גיאוגרפיה | BYTE_ARRAY |
GEOGRAPHY (edges = spherical) |
סכמת Parquet מייצגת נתונים מוטמעים כקבוצה ורשומות חוזרות כקבוצות חוזרות. מידע נוסף על שימוש בנתונים בתצוגת עץ ובנתונים חוזרים ב-BigQuery מופיע במאמר בנושא ציון עמודות בתצוגת עץ ועמודות חוזרות.
אפשר להשתמש בפתרונות העקיפים הבאים לסוגים DATETIME:
- טוענים את הקובץ לטבלת ביניים. אחר כך משתמשים בשאילתת SQL כדי להמיר את השדה ל-
DATETIMEושומרים את התוצאה בטבלה חדשה. מידע נוסף זמין במאמר בנושא שינוי סוג הנתונים של עמודה. - מספקים סכימה לטבלה באמצעות הדגל
--schemaבעבודת הטעינה. מגדירים את העמודה של התאריך והשעה כ-col:DATETIME.
הסוג הלוגי GEOGRAPHY מיוצג באמצעות מטא-נתונים של GeoParquet שנוספו לקבצים המיוצאים.
ייצוא נתונים לקובץ אחד או יותר
המאפיין destinationUris מציין את המיקום או המיקומים ושמות הקבצים שאליהם BigQuery צריך לייצא את הקבצים.
BigQuery תומך באופרטור יחיד של תו כללי לחיפוש (*) בכל URI. התו הכללי יכול להופיע בכל מקום ברכיב של שם הקובץ. השימוש באופרטור wildcard מורה ל-BigQuery ליצור כמה קבצים מפולחים על סמך התבנית שסופקה. התו הכללי מוחלף במספר (החל מ-0), עם ריפוד משמאל ל-12 ספרות. לדוגמה, אם ה-URI כולל תבנית wildcard בסוף שם הקובץ, ייווצרו קבצים עם התוספת 000000000000 לקובץ הראשון, 000000000001 לקובץ השני וכן הלאה.
בטבלה הבאה מפורטות כמה אפשרויות אפשריות של המאפיין destinationUris:
destinationUris אפשרויות |
|
|---|---|
| URI יחיד |
אם מייצאים נתונים של טבלה בגודל של 1 GB או פחות, אפשר להשתמש ב-URI יחיד. האפשרות הזו היא התרחיש הנפוץ ביותר לשימוש, כי בדרך כלל הנתונים המיוצאים קטנים מהערך המקסימלי של 1GB. האפשרות הזו לא נתמכת ב-
הגדרת המאפיין:
יצירה: gs://my-bucket/file-name.json |
| תו כללי לחיפוש של URI יחיד |
אפשר להשתמש בתו כללי יחיד רק ברכיב של שם הקובץ ב-URI. אם אתם חושבים שהנתונים המיוצאים יהיו גדולים יותר מהערך המקסימלי של 1GB, השתמשו ב-URI עם תו כללי יחיד. BigQuery מפצל את הנתונים לקבצים רבים על סמך התבנית שצוינה. גודל הקבצים המיוצאים משתנה. הגדרת המאפיין:
יצירה: gs://my-bucket/file-name-000000000000.json gs://my-bucket/file-name-000000000001.json gs://my-bucket/file-name-000000000002.json ...
יצירה: gs://my-bucket/000000000000 gs://my-bucket/000000000001 gs://my-bucket/000000000002 ... |
הגבלת גודל הקובץ המיוצא
כשמייצאים יותר מ-1GB של נתונים בייצוא אחד, צריך להשתמש בתו כללי כדי לייצא את הנתונים לכמה קבצים, והגודל של הקבצים משתנה. אם אתם רוצים להגביל את הגודל המקסימלי של כל קובץ מיוצא, אפשרות אחת היא לחלק את הנתונים באופן אקראי ואז לייצא כל מחיצה לקובץ:
- קובעים את מספר המחיצות שצריך, ששווה לגודל הכולל של הנתונים חלקי הגודל של קובץ הייצוא שנבחר. לדוגמה, אם יש לכם 8,000MB של נתונים ואתם רוצים שכל קובץ מיוצא יהיה בערך 20MB, אתם צריכים 400 מחיצות.
יוצרים טבלה חדשה עם חלוקה למחיצות ועם אשכולים לפי עמודה חדשה שנוצרה באופן אקראי בשם
export_id. בדוגמה הבאה מוצגות הפעולות ליצירת טבלה חדשהprocessed_tableמטבלה קיימת בשםsource_table, שנדרשים להnמחיצות כדי להגיע לגודל הקובץ שנבחר:CREATE TABLE my_dataset.processed_table PARTITION BY RANGE_BUCKET(export_id, GENERATE_ARRAY(0, n, 1)) CLUSTER BY export_id AS ( SELECT *, CAST(FLOOR(n*RAND()) AS INT64) AS export_id FROM my_dataset.source_table );
לכל מספר שלם
iבין 0 ל-n-1, מריצים הצהרתEXPORT DATAבשאילתה הבאה:SELECT * EXCEPT(export_id) FROM my_dataset.processed_table WHERE export_id = i;
חילוץ טבלה דחוסה
Go
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
תרחיש שימוש לדוגמה
בדוגמה הזו מוסבר איך לייצא נתונים ל-Cloud Storage.
נניח שאתם מבצעים סטרימינג של נתונים ל-Cloud Storage מיומני נקודות קצה באופן רציף. צריך לייצא תמונת מצב יומית ל-Cloud Storage למטרות גיבוי וארכיון. האפשרות הכי טובה היא עבודת חילוץ, בכפוף למכסות והגבלות מסוימות.
שולחים עבודת חילוץ באמצעות API או ספריות לקוח, ומעבירים מזהה ייחודי בתור jobReference.jobId. הפעולות של Extract Jobs הן אסינכרוניות.
בודקים את סטטוס העבודה באמצעות מזהה העבודה הייחודי ששימש ליצירת העבודה. העבודה הושלמה בהצלחה אם status.status הוא DONE. אם status.errorResult מופיע, העבודה נכשלה וצריך לנסות שוב.
עיבוד נתונים באצווה
נניח שמשתמשים במשימה באצווה שמתבצעת בלילה כדי לטעון נתונים עד למועד יעד קבוע. אחרי שמשימת הטעינה הזו מסתיימת, נוצרת טבלה עם נתונים סטטיסטיים מתוך שאילתה, כמו שמתואר בקטע הקודם. הנתונים מהטבלה הזו מאוחזרים ונאספים לדוח PDF שנשלח לרשות רגולטורית.
מכיוון שכמות הנתונים שצריך לקרוא קטנה, משתמשים ב-API tabledata.list כדי לאחזר את כל השורות בטבלה בפורמט של מילון JSON. אם יש יותר מדף אחד של נתונים, המאפיין pageToken מוגדר בתוצאות. כדי לאחזר את דף התוצאות הבא, מבצעים עוד קריאה של tabledata.list וכוללים את ערך האסימון כפרמטר pageToken. אם הקריאה ל-API נכשלת עם שגיאת 5xx, צריך לנסות שוב עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff). אי אפשר לנסות שוב את רוב השגיאות מסוג 4xx. כדי להפריד טוב יותר בין BigQuery Export לבין יצירת דוחות, צריך לשמור את התוצאות בדיסק.
מדיניות בנושא מכסה
מידע על מכסות של משימות חילוץ זמין במאמר משימות חילוץ בדף מכסות ומגבלות.
נתוני השימוש במשימות חילוץ זמינים ב-INFORMATION_SCHEMA.
רשומת העבודה בJOBS_BY_*טבלאות המערכת של עבודת החילוץ מכילה ערך total_bytes_processed שאפשר להשתמש בו כדי לעקוב אחרי השימוש המצטבר ולוודא שהוא לא חורג מ-50TiB ליום. במאמר סכימת INFORMATION_SCHEMA.JOBS מוסבר איך לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.JOBS כדי לקבל את הערך total_bytes_processed.
צפייה בשימוש הנוכחי במכסה
כדי לראות את השימוש הנוכחי שלכם בשאילתות, בהעלאות, בחילוצים או בהעתקות, אתם יכולים להריץ שאילתה INFORMATION_SCHEMA כדי לראות את המטא-נתונים של המשימות שהורצו בפרק זמן מסוים. אתם יכולים להשוות את השימוש הנוכחי שלכם למגבלת המכסה כדי לדעת מהו השימוש במכסה עבור סוג מסוים של עבודה. בדוגמה הבאה מוצגת שאילתה שמשתמשת בתצוגה INFORMATION_SCHEMA.JOBS כדי להציג את מספר העבודות של שאילתות, טעינה, חילוץ והעתקה לפי פרויקט:
SELECT sum(case when job_type="QUERY" then 1 else 0 end) as QRY_CNT, sum(case when job_type="LOAD" then 1 else 0 end) as LOAD_CNT, sum(case when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT, sum(case when job_type="COPY" then 1 else 0 end) as CPY_CNT FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE date(creation_time)= CURRENT_DATE()
אתם יכולים להגדיר מדיניות התראות ב-Cloud Monitoring שתעקוב אחרי מספר הבייטים שיוצאו.
-
נכנסים לדף notifications Alerting במסוף Cloud de Confiance :
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.
בדף Alerting, לוחצים על Create Policy.
בקטע מצב הגדרת מדיניות, בוחרים באפשרות עורך קוד (MQL או PromQL).
בעורך השאילתות PromQL, מזינים את השאילתה הבאה:
( sum by (project_id, quota_metric, location) (increase({"serviceruntime.googleapis.com/quota/rate/net_usage", monitored_resource="consumer_quota", service="bigquery.googleapis.com"}[1m])) / max by (project_id, quota_metric, location) ({"serviceruntime.googleapis.com/quota/limit", monitored_resource="consumer_quota", service="bigquery.googleapis.com", limit_name="ExtractBytesPerDay"}) ) > 0.01אם האפשרות הרצה אוטומטית לא מופעלת, לוחצים על הרצת שאילתה.
מגדירים את שאר ההתראות ולוחצים על יצירת מדיניות.
לשלבים מפורטים ליצירת מדיניות התראות מבוססת-PromQL, אפשר לעיין במאמר בנושא יצירת מדיניות התראות מבוססת-PromQL (מסוף).
פתרון בעיות
אבחון ופתרון בעיות שקשורות לעבודות חילוץ.
אבחון בעיות באמצעות Logs Explorer
כדי לאבחן בעיות במשימות חילוץ, אפשר להשתמש בכלי Logs Explorer כדי לבדוק את היומנים של משימת חילוץ ספציפית ולזהות שגיאות אפשריות. המסנן הבא ב-Logs Explorer מחזיר מידע על משימות החילוץ:
resource.type="bigquery_resource"
protoPayload.methodName="jobservice.insert"
(protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.query.query=~"EXPORT" OR
protoPayload.serviceData.jobCompletedEvent.eventName="extract_job_completed" OR
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.query=~"EXPORT")
שגיאה שקשורה לחריגה מהמכסה היומית של בייטים לחילוץ
המערכת של BigQuery מחזירה את השגיאה הזו כשהחילוץ חורג ממגבלת ברירת המחדל של 50 TiB ליום בפרויקט. מידע נוסף על מגבלות של משימות חילוץ זמין במאמר משימות חילוץ.
הודעת השגיאה
Your usage exceeded quota for ExtractBytesPerDay
אבחון
אם מייצאים טבלה שגודלה גדול מ-50TiB, הייצוא נכשל כי היא חורגת ממגבלת החילוץ. אם רוצים לייצא נתונים מטבלה למחיצות ספציפיות בטבלה, אפשר להשתמש בקישוט מחיצות כדי לזהות את המחיצות שרוצים לייצא.
אם רוצים לאסוף נתוני שימוש של ייצוא נתונים מהימים האחרונים, אפשר לנסות את הפעולות הבאות:
צפייה במכסות של הפרויקט עם קריטריוני סינון כמו
Name: Extract bytes per dayאוMetric: bigquery.googleapis.com/quota/extract/bytes, יחד עם התרשים 'הצגת נתוני השימוש', כדי לראות את מגמת השימוש לאורך כמה ימים.אפשר גם להריץ שאילתה ב-
INFORMATION_SCHEMA.JOBS_BY_PROJECTכדי לראות את סך הבייטים שחולצו במשך כמה ימים. לדוגמה, השאילתה הבאה מחזירה את סך הבייטים היומי שעובד על ידי משימותEXTRACTבשבעת הימים האחרונים.SELECT TIMESTAMP_TRUNC(creation_time, DAY) AS day, SUM ( total_bytes_processed ) / POW(1024, 3) AS total_gibibytes_processed FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP() AND job_type = "EXTRACT" GROUP BY 1 ORDER BY 2 DESC
לאחר מכן, תוכלו לצמצם עוד יותר את התוצאות על ידי זיהוי המשימות הספציפיות שצורכות יותר בייטים מהצפוי. בדוגמה הבאה מוצגים 100 המשימות המובילות
EXTRACTשצורכות יותר מ-100 GB שעברו עיבוד במהלך שבעת הימים האחרונים.SELECT creation_time, job_id, total_bytes_processed/POW(1024, 3) AS total_gigabytes_processed FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP() AND job_type="EXTRACT" AND total_bytes_processed > (POW(1024, 3) * 100) ORDER BY total_bytes_processed DESC LIMIT 100
אפשר גם להשתמש בכלי לבדיקת משימות עם מסננים כמו Bytes processed more than כדי לסנן משימות עם שימוש גבוה במעבד לתקופה מסוימת.
רזולוציה
אחת מהשיטות לפתרון שגיאת המכסה הזו היא ליצור הזמנה של משבצת זמן ולהקצות את הפרויקט להזמנה עם PIPELINEסוג העבודה. השיטה הזו יכולה לעקוף את בדיקת המגבלה כי היא משתמשת בהזמנות הייעודיות שלכם ולא בנפח אחסון ארגוני משותף בחינם. אם צריך, אפשר למחוק את ההזמנה אם רוצים להשתמש בהמשך במאגר משותף של משבצות.
בקטע ההערות במאמר משימות חילוץ מוסבר על גישות חלופיות לייצוא של יותר מ-50 TiB.
תמחור
מידע על התמחור של ייצוא נתונים מופיע בדף התמחור של BigQuery.
אחרי שהנתונים מיוצאים, אתם מחויבים על אחסון הנתונים ב-Cloud Storage. מידע נוסף מופיע במאמר בנושא תמחור של Cloud Storage.
אבטחת טבלאות
כדי לשלוט בגישה לטבלאות ב-BigQuery, אפשר לעיין במאמר בנושא שליטה בגישה למשאבים באמצעות IAM.
המאמרים הבאים
- מידע נוסף על מסוף Cloud de Confiance זמין במאמר בנושא שימוש במסוף Cloud de Confiance .
- מידע נוסף על כלי שורת הפקודה של BigQuery זמין במאמר שימוש בכלי שורת הפקודה של BigQuery.
- במאמר מדריך למתחילים בנושא ספריות לקוח מוסבר איך ליצור אפליקציה באמצעות ספריות הלקוח של BigQuery API.