ייצוא נתוני טבלה ל-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 ביט כשמערכות אחרות קוראות את הנתונים.
- אי אפשר לייצא נתונים מכמה טבלאות במשימת חילוץ אחת.
- כשמייצאים נתונים באמצעות מסוף Google Cloud , אי אפשר לבחור סוג דחיסה אחר מלבד
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 את נתוני הטבלה, המטא-נתונים של הטבלה ותוצאות השאילתה.
ייצוא נתוני טבלה
אפשר לייצא נתונים מטבלה בדרכים הבאות:
- שימוש במסוף Google Cloud
- שימוש בפקודה
bq extractבכלי שורת הפקודה של BigQuery - שליחת משימת
extractבאמצעות ה-API או ספריות הלקוח
צריך לבחור אחת מהאפשרויות האלה:
המסוף
פותחים את הדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets (מערכי נתונים) ואז לוחצים על מערך הנתונים.
לוחצים על סקירה כללית > טבלאות ובוחרים טבלה.
בחלונית הפרטים, לוחצים על העלאה ייצוא / סנכרון > Cloud Storage.
בתיבת הדו-שיח Export to Google Cloud Storage:
- בקטע מיקום ב-GCS, בוחרים את הדלי, התיקייה או הקובץ שאליהם רוצים לייצא את הנתונים.
- בקטע פורמט ייצוא, בוחרים את הפורמט של הנתונים המיוצאים: CSV, JSON (עם תווי שורה), Avro או Parquet.
- בקטע דחיסה, בוחרים פורמט דחיסה או בוחרים באפשרות
Noneכדי לא לדחוס את הקובץ.
לוחצים על שמירה כדי לייצא את הטבלה.
כדי לבדוק את התקדמות העבודה, בחלונית Explorer לוחצים על Job history ומחפשים עבודה מסוג EXTRACT.
כדי לייצא תצוגות ל-Cloud Storage, משתמשים בהצהרת EXPORT DATA OPTIONS.
SQL
משתמשים בהנחיה EXPORT DATA.
בדוגמה הבאה מיוצאים שדות נבחרים מטבלה בשם mydataset.table1:
במסוף Google Cloud , עוברים לדף 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 היא הטבלה שמייצאים. אם משתמשים בpartition decorator, צריך להקיף את נתיב הטבלה בגרשיים או להשתמש בתו
$כדי לבטל את המשמעות של התו. - 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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
המשך
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.