טעינת נתוני ORC מ-Cloud Storage
ב-BigQuery אפשר לטעון נתוני ORC מ-Cloud Storage לטבלה או למחיצה חדשה, או להוסיף אותם לטבלה או למחיצה קיימת או להחליף אותה. ORC הוא פורמט נתונים מבוסס-עמודות בקוד פתוח, שנמצא בשימוש נרחב בסביבה העסקית של Hadoop. במהלך ההטמעה, BigQuery ממיר את הנתונים לפורמט עמודות של Capacitor (פורמט האחסון של BigQuery) לצורך שאילתות וניתוח.
למידע על טעינת נתוני ORC מקובץ מקומי, קראו את המאמר טעינת נתונים ל-BigQuery ממקור נתונים מקומי.
מגבלות
כשאתם טוענים נתונים ל-BigQuery מקטגוריה של Cloud Storage, אתם כפופים למגבלות הבאות:
- ב-BigQuery אין הבטחה לעקביות של נתונים ממקורות חיצוניים. שינויים בנתוני הבסיס בזמן ששאילתה פועלת עלולים לגרום להתנהגות לא צפויה.
- ב-BigQuery אין תמיכה בניהול גרסאות של אובייקטים ב-Cloud Storage. אם תכללו מספר דור ב-URI של Cloud Storage, משימת הטעינה תיכשל.
לפני שמתחילים
מקצים תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים למשתמשים את ההרשאות שדרושות כדי לבצע כל משימה במסמך הזה, ויוצרים מערך נתונים לאחסון הנתונים.
ההרשאות הנדרשות
כדי לטעון נתונים ל-BigQuery, אתם צריכים הרשאות IAM להרצת משימת טעינה ולטעינת נתונים לטבלאות ב-BigQuery ולמחיצות. אם אתם טוענים נתונים מ-Cloud Storage, אתם צריכים גם הרשאות IAM כדי לגשת לקטגוריה שמכילה את הנתונים.
הרשאות לטעינת נתונים ל-BigQuery
כדי לטעון נתונים לטבלה או למחיצה חדשה ב-BigQuery, או כדי להוסיף או להחליף טבלה או מחיצה קיימת, צריך את הרשאות ה-IAM הבאות:
bigquery.tables.createbigquery.tables.updateDatabigquery.tables.updatebigquery.jobs.create
כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאות שצריך כדי לטעון נתונים לטבלה או למחיצה ב-BigQuery:
roles/bigquery.dataEditorroles/bigquery.dataOwner-
roles/bigquery.admin(כולל את ההרשאהbigquery.jobs.create) -
bigquery.user(כולל את ההרשאהbigquery.jobs.create) -
bigquery.jobUser(כולל את ההרשאהbigquery.jobs.create)
בנוסף, אם יש לכם את ההרשאה bigquery.datasets.create, אתם יכולים ליצור ולעדכן טבלאות באמצעות משימת טעינה בקבוצות הנתונים שאתם יוצרים.
למידע נוסף על תפקידים והרשאות של IAM ב-BigQuery, קראו את המאמר תפקידים והרשאות מוגדרים מראש.
הרשאות לטעינת נתונים מ-Cloud Storage
כדי לקבל את ההרשאות שנדרשות לטעינת נתונים מקטגוריה של Cloud Storage, בקשו מהאדמין לתת לכם את התפקיד אדמין של אחסון (roles/storage.admin) ב-IAM בקטגוריה.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות לטעינת נתונים מקטגוריה של Cloud Storage. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לטעון נתונים מקטגוריה של Cloud Storage, נדרשות ההרשאות הבאות:
-
storage.buckets.get -
storage.objects.get -
storage.objects.list (required if you are using a URI wildcard)
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
יצירת קבוצת נתונים
יוצרים מערך נתונים ב-BigQuery כדי לאחסן את הנתונים.
סכימות ORC
כשאתם טוענים קובצי ORC ל-BigQuery, סכימת הטבלה מאוחזרת באופן אוטומטי מנתוני המקור שמתארים את עצמם. כש-BigQuery מאחזר את הסכימה מנתוני המקור, הוא משתמש בקובץ האחרון לפי סדר אלפביתי.
לדוגמה, נניח שיש לכם את קובצי ה-ORC הבאים ב-Cloud Storage:
gs://mybucket/00/ a.orc z.orc gs://mybucket/01/ b.orc
הרצת הפקודה הזו בכלי שורת הפקודה של BigQuery טוענת את כל הקבצים (כרשימה מופרדת בפסיקים), והסכימה נגזרת מ-mybucket/01/b.orc:
bq load \ --source_format=ORC \ dataset.table \ "gs://mybucket/00/*.orc","gs://mybucket/01/*.orc"
כש-BigQuery מזהה את הסכימה, חלק מסוגי הנתונים של ORC מומרים לסוגי נתונים של BigQuery כדי שיהיו תואמים לתחביר של GoogleSQL. כל השדות בסכימה שזוהתה הם NULLABLE. מידע נוסף זמין במאמר המרות ORC.
כשאתם טוענים כמה קובצי ORC עם סכימות שונות, שדות זהים (עם אותו שם ואותה רמת הטמעה) שצוינו בכמה סכימות חייבים למפות לאותו סוג נתונים שהומר ב-BigQuery בכל הגדרת סכימה.
כדי לספק סכימת טבלה ליצירת טבלאות חיצוניות, מגדירים את המאפייןreferenceFileSchemaUri ב-BigQuery API או את הפרמטר --reference_file_schema_uri בכלי שורת הפקודה של BigQuery לכתובת ה-URL של קובץ רפרנס.
לדוגמה, --reference_file_schema_uri="gs://mybucket/schema.orc".
דחיסת ORC
BigQuery תומך בקודקים הבאים לדחיסת תוכן של קובצי ORC:
ZlibSnappyLZOLZ4ZSTD
הנתונים בקובצי ORC לא נשארים דחוסים אחרי שמעלים אותם ל-BigQuery. אחסון הנתונים מדווח בבייטים לוגיים או בבייטים פיזיים, בהתאם למודל החיוב על אחסון של מערך הנתונים.
כדי לקבל מידע על נפח אחסון נדרש, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.TABLE_STORAGE.
טעינת נתוני ORC לטבלה חדשה
אפשר לטעון נתוני ORC לטבלה חדשה באמצעות:
- באמצעות מסוף Google Cloud
- שימוש בפקודה
bq loadשל כלי שורת הפקודה של BigQuery - שליחת קריאה ל-method של ה-API
jobs.insertוהגדרת משימה ב-load - שימוש בספריות הלקוח
כדי לטעון נתוני ORC מ-Cloud Storage לטבלה חדשה ב-BigQuery:
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
- בחלונית הימנית, לוחצים על Explorer.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- בקטע Dataset info, לוחצים על Create table.
- בחלונית Create table, מציינים את הפרטים הבאים:
- בקטע Source, בוחרים באפשרות Google Cloud Storage ברשימה Create table from.
לאחר מכן, מבצעים את הפעולות הבאות:
- בוחרים קובץ מהקטגוריה של Cloud Storage או מזינים את ה-URI של Cloud Storage.
אי אפשר לכלול כמה מזהי URI במסוף Google Cloud , אבל יש תמיכה בתווים כלליים לחיפוש. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה.

- בשדה פורמט קובץ, בוחרים באפשרות ORC.
- בוחרים קובץ מהקטגוריה של Cloud Storage או מזינים את ה-URI של Cloud Storage.
אי אפשר לכלול כמה מזהי URI במסוף Google Cloud , אבל יש תמיכה בתווים כלליים לחיפוש. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה.
- בקטע Destination, מציינים את הפרטים הבאים:
- בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
- מוודאים שהשדה Table type מוגדר ל-Native table.
- בקטע Schema, לא צריך לעשות כלום. הסכימה מתוארת בקובצי ORC.
- אופציונלי: מציינים את הגדרות המחיצה והאשכול. מידע נוסף זמין במאמרים יצירת טבלאות מחולקות למחיצות ויצירה של טבלאות מסודרות באשכולות ושימוש בהן.
- לוחצים על אפשרויות מתקדמות ומבצעים את הפעולות הבאות:
- בשדה Write preference, משאירים את האפשרות Write if empty מסומנת. This option creates a new table and loads your data into it.
- אם רוצים להתעלם מערכים בשורה שלא קיימים בסכימה של הטבלה, בוחרים באפשרות Unknown values.
- בקטע Encryption, לוחצים על Customer-managed key כדי להשתמש במפתח של Cloud Key Management Service. אם משאירים את ההגדרה Google-managed key, הנתונים מוצפנים במצב מנוחה ב-BigQuery.
- לוחצים על Create table.
SQL
משתמשים בהצהרת ה-DDL LOAD DATA.
בדוגמה הבאה נטען קובץ ORC לטבלה החדשה mytable:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
LOAD DATA OVERWRITE mydataset.mytable FROM FILES ( format = 'ORC', uris = ['gs://bucket/path/file.orc']);
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
משתמשים בפקודה bq load, מציינים את ORC בתור source_format וכוללים URI של Cloud Storage.
אפשר לכלול URI אחד, רשימה מופרדת בפסיקים של מזהי URI או URI שמכיל תו כללי לחיפוש.
(אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום שלכם.
דגלים אופציונליים נוספים:
-
--time_partitioning_type: הפעלת חלוקה למחיצות לפי זמן בטבלה והגדרת סוג המחיצה. הערכים האפשריים הםHOUR,DAY,MONTHו-YEAR. הדגל הזה הוא אופציונלי כשיוצרים טבלה שמחולקת למחיצות לפי עמודה מסוגDATE,DATETIMEאוTIMESTAMP. סוג המחיצה שמוגדר כברירת מחדל לחלוקה למחיצות לפי זמן הואDAY. אי אפשר לשנות את מפרט החלוקה למחיצות בטבלה קיימת. -
--time_partitioning_expiration: מספר שלם שמציין (בשניות) מתי צריך למחוק מחיצה שמבוססת על זמן. זמן התפוגה מחושב לפי תאריך ה-UTC של המחיצה בתוספת ערך המספר השלם. -
--time_partitioning_field: העמודהDATEאוTIMESTAMPשמשמשת ליצירת טבלה מחולקת למחיצות. אם מפעילים חלוקה למחיצות לפי זמן בלי הערך הזה, נוצרת טבלה מחולקת למחיצות לפי זמני כתיבת הנתונים. -
--require_partition_filter: כשהאפשרות הזו מופעלת, המשתמשים צריכים לכלול משפטWHEREשמציין את המחיצות שרוצים לשלוח אליהן שאילתות. דרישה למסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. למידע נוסף, קראו את המאמר דרישה למסנן מחיצות בשאילתות. -
--clustering_fields: רשימה מופרדת בפסיקים של עד ארבעה שמות עמודות שמשמשים ליצירת טבלה מסודרת באשכולות.
--destination_kms_key: המפתח של Cloud KMS להצפנת נתוני הטבלה.מידע נוסף על טבלאות מחולקות למחיצות זמין במאמרים הבאים:
מידע נוסף על טבלאות מסודרות באשכולות:
מידע נוסף על הצפנת טבלאות זמין במאמרים הבאים:
כדי לטעון נתוני ORC ל-BigQuery, מזינים את הפקודה הבאה:
bq --location=location load \ --source_format=format \ dataset.table \ path_to_source
כאשר:
- location הוא המיקום שלך. הדגל
--locationהוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ bigqueryrc.. - format הוא
ORC. - dataset הוא מערך נתונים קיים.
- table הוא שם הטבלה שאליה טוענים את הנתונים.
- path_to_source הוא URI של Cloud Storage מלא או רשימה מופרדת בפסיקים של מזהי URI. יש גם תמיכה בתווים כלליים לחיפוש.
דוגמאות:
הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.orc לטבלה בשם mytable ב-mydataset.
bq load \
--source_format=ORC \
mydataset.mytable \
gs://mybucket/mydata.orc
הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.orc לטבלה חדשה מחולקת למחיצות (Partitions) לפי זמני כתיבת הנתונים בשם mytable ב-mydataset.
bq load \
--source_format=ORC \
--time_partitioning_type=DAY \
mydataset.mytable \
gs://mybucket/mydata.orc
הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.orc לטבלה מחולקת למחיצות בשם mytable ב-mydataset. הטבלה מחולקת למחיצות לפי העמודה mytimestamp.
bq load \
--source_format=ORC \
--time_partitioning_field mytimestamp \
mydataset.mytable \
gs://mybucket/mydata.orc
הפקודה הבאה טוענת נתונים מכמה קבצים ב-gs://mybucket/ לטבלה בשם mytable ב-mydataset. ה-URI של Cloud Storage כולל תו כללי לחיפוש.
bq load \
--source_format=ORC \
mydataset.mytable \
gs://mybucket/mydata*.orc
הפקודה הבאה טוענת נתונים מכמה קבצים ב-gs://mybucket/ לטבלה בשם mytable ב-mydataset. הפקודה כוללת רשימה מופרדת בפסיקים של מזהי URI של Cloud Storage עם תווים כלליים לחיפוש.
bq load --autodetect \
--source_format=ORC \
mydataset.mytable \
"gs://mybucket/00/*.orc","gs://mybucket/01/*.orc"
API
יוצרים משימת
loadשמפנה לנתוני המקור ב-Cloud Storage.(אופציונלי) מציינים את המיקום במאפיין
locationבקטעjobReferenceשל משאב המשימה.המאפיין
source URIsחייב להיות מלא, בפורמטgs://bucket/object. כל URI יכול להכיל תו כללי לחיפוש אחד מסוג "*".מציינים את פורמט הנתונים ORC על ידי הגדרת המאפיין
sourceFormatלערךORC.כדי לבדוק את סטטוס המשימה, מפעילים את
jobs.get(job_id*), כאשר 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. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Java
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
PHP
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery PHP API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Ruby
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Ruby API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
הוספה לטבלה או החלפה שלה עם נתוני ORC
אפשר לטעון נתונים נוספים לטבלה מקובצי מקור או על ידי הוספת תוצאות של שאילתות.
במסוף Google Cloud , משתמשים באפשרות Write preference כדי לציין איזו פעולה לבצע כשאתם טוענים נתונים מקובץ מקור או מתוצאת שאילתה.
כשאתם טוענים נתונים נוספים לטבלה, יש לכם את האפשרויות הבאות:
| אפשרות המסוף | דגל של הכלי bq | נכס BigQuery API | תיאור |
|---|---|---|---|
| כתיבה אם ריק | לא נתמך | WRITE_EMPTY |
הנתונים נכתבים רק אם הטבלה ריקה. |
| הוספה לטבלה | --noreplace או --replace=false; אם לא צוין --[no]replace, ברירת המחדל היא append |
WRITE_APPEND |
(ברירת המחדל) הוספת הנתונים לסוף הטבלה. |
| החלפת הטבלה | --replace או --replace=true |
WRITE_TRUNCATE |
מוחק את כל הנתונים הקיימים בטבלה לפני כתיבת הנתונים החדשים. הפעולה הזו גם מוחקת את סכימת הטבלה, את האבטחה ברמת השורה ואת כל מפתחות Cloud KMS. |
אם אתם טוענים נתונים לטבלה קיימת, משימת הטעינה יכולה להוסיף את הנתונים או להחליף את הטבלה.
כדי להוסיף נתונים לטבלה או להחליף אותם:
- באמצעות מסוף Google Cloud
- שימוש בפקודה
bq loadשל כלי שורת הפקודה של BigQuery - שליחת קריאה ל-method של ה-API
jobs.insertוהגדרת משימה ב-load - שימוש בספריות הלקוח
כדי להוסיף נתוני ORC לטבלה או להחליף את הנתונים בטבלה:
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
- בחלונית הימנית, לוחצים על Explorer.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- בקטע Dataset info, לוחצים על Create table.
- בחלונית Create table, מציינים את הפרטים הבאים:
- בקטע Source, בוחרים באפשרות Google Cloud Storage ברשימה Create table from.
לאחר מכן, מבצעים את הפעולות הבאות:
- בוחרים קובץ מהקטגוריה של Cloud Storage או מזינים את ה-URI של Cloud Storage.
אי אפשר לכלול כמה מזהי URI במסוף Google Cloud , אבל יש תמיכה בתווים כלליים לחיפוש. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה.

- בשדה פורמט קובץ, בוחרים באפשרות ORC.
- בוחרים קובץ מהקטגוריה של Cloud Storage או מזינים את ה-URI של Cloud Storage.
אי אפשר לכלול כמה מזהי URI במסוף Google Cloud , אבל יש תמיכה בתווים כלליים לחיפוש. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה.
- בקטע Destination, מציינים את הפרטים הבאים:
- בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
- מוודאים שהשדה Table type מוגדר ל-Native table.
- בקטע Schema, לא צריך לעשות כלום. הסכימה מתוארת בקובצי ORC.
- אופציונלי: מציינים את הגדרות המחיצה והאשכול. מידע נוסף זמין במאמרים יצירת טבלאות מחולקות למחיצות ויצירה של טבלאות מסודרות באשכולות ושימוש בהן. אי אפשר להמיר טבלה לטבלה מחולקת למחיצות או לטבלה מסודרת באשכולות על ידי הוספה או החלפה שלה. במסוף Google Cloud אי אפשר להוסיף נתונים לטבלאות מחולקות למחיצות או לטבלאות מסודרות באשכולות, או להחליף אותן, במסגרת משימת טעינה.
- לוחצים על אפשרויות מתקדמות ומבצעים את הפעולות הבאות:
- בקטע Write preference, בוחרים באפשרות Append to table או Overwrite table.
- אם רוצים להתעלם מערכים בשורה שלא קיימים בסכימה של הטבלה, בוחרים באפשרות Unknown values.
- בקטע Encryption, לוחצים על Customer-managed key כדי להשתמש במפתח של Cloud Key Management Service. אם משאירים את ההגדרה Google-managed key, הנתונים מוצפנים במצב מנוחה ב-BigQuery.
- לוחצים על Create table.
SQL
משתמשים בהצהרת ה-DDL LOAD DATA.
בדוגמה הבאה מוסיפים קובץ ORC לטבלה mytable:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
LOAD DATA INTO mydataset.mytable FROM FILES ( format = 'ORC', uris = ['gs://bucket/path/file.orc']);
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
מזינים את הפקודה bq load עם הדגל --replace כדי להחליף את הטבלה. משתמשים בדגל --noreplace כדי להוסיף נתונים לטבלה. אם לא מציינים דגל, ברירת המחדל היא להוסיף נתונים. מציינים את הדגל --source_format ומגדירים אותו לערך ORC. מכיוון שהסכימות של ORC מאוחזרות באופן אוטומטי מנתוני המקור שמתארים את עצמם, אין צורך לספק הגדרת סכימה.
(אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום שלכם.
דגלים אופציונליים נוספים:
-
--destination_kms_key: המפתח של Cloud KMS להצפנת נתוני הטבלה.
bq --location=location load \ --[no]replace \ --source_format=format \ dataset.table \ path_to_source
כאשר:
- location הוא המיקום שלך.
הדגל
--locationהוא אופציונלי. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ bigqueryrc.. - format הוא
ORC. - dataset הוא מערך נתונים קיים.
- table הוא שם הטבלה שאליה טוענים את הנתונים.
- path_to_source הוא URI של Cloud Storage מלא או רשימה מופרדת בפסיקים של מזהי URI. יש גם תמיכה בתווים כלליים לחיפוש.
דוגמאות:
הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.orc ומחליפה טבלה בשם mytable ב-mydataset.
bq load \
--replace \
--source_format=ORC \
mydataset.mytable \
gs://mybucket/mydata.orc
הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.orc ומוסיפה נתונים לטבלה בשם mytable ב-mydataset.
bq load \
--noreplace \
--source_format=ORC \
mydataset.mytable \
gs://mybucket/mydata.orc
במאמר הוספה ודריסה של נתונים בטבלה מחולקת למחיצות מוסבר איך מוסיפים ודורסים נתונים בטבלאות מחולקות למחיצות באמצעות כלי שורת הפקודה של BigQuery.
API
יוצרים משימת
loadשמפנה לנתוני המקור ב-Cloud Storage.(אופציונלי) מציינים את המיקום במאפיין
locationבקטעjobReferenceשל משאב המשימה.המאפיין
source URIsצריך להיות מלא, בפורמטgs://bucket/object. אפשר לכלול כמה מזהי URI ברשימה מופרדת בפסיקים. שימו לב שאפשר להשתמש גם בתווים כלליים לחיפוש.מציינים את פורמט הנתונים על ידי הגדרת המאפיין
configuration.load.sourceFormatלערךORC.מציינים את העדפת הכתיבה על ידי הגדרת המאפיין
configuration.load.writeDispositionלערךWRITE_TRUNCATEאוWRITE_APPEND.
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery C# API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
המשך
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Java
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
PHP
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery PHP API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי להחליף את השורות בטבלה קיימת, מגדירים את המאפיין LoadJobConfig.write_disposition לערך WRITE_TRUNCATE.Ruby
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Ruby API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
טעינת נתוני ORC שמחולקים למחיצות ב-Hive
ב-BigQuery אפשר לטעון נתוני ORC מחולקים למחיצות של Hive שמאוחסנים ב-Cloud Storage, ולאכלס את עמודות החלוקה למחיצות של Hive כעמודות בטבלה המנוהלת של BigQuery. מידע נוסף זמין במאמר טעינה של נתונים שחולקו למחיצות באופן חיצוני.
המרות מסוג ORC
BigQuery ממיר את סוגי הנתונים של ORC לסוגי הנתונים הבאים של BigQuery:
סוגים פרימיטיביים
| סוג הנתונים ב-BigQuery | הערות | |
|---|---|---|
| בוליאני | בוליאני | |
| בייט | מספר שלם | |
| קצר | מספר שלם | |
| int | מספר שלם | |
| ארוך | מספר שלם | |
| מספר ממשי (float) | FLOAT | |
| double | FLOAT | |
| מחרוזת | מחרוזת | רק UTF-8 |
| varchar | מחרוזת | רק UTF-8 |
| char | מחרוזת | רק UTF-8 |
| בינארית | BYTES | |
| תאריך | תאריך | ניסיון להמיר ערך כלשהו בנתוני ה-ORC שקטן מ-719,162- ימים או גדול מ-2,932,896 ימים מחזיר שגיאת invalid date
value. אם זה משפיע עליכם, פנו לתמיכה כדי להמיר ערכים לא נתמכים לערך המינימלי של BigQuery, שהוא 0001-01-01, או לערך המקסימלי, שהוא 9999-12-31, לפי הצורך. |
| חותמת זמן | TIMESTAMP |
ORC תומך בדיוק של ננו-שניות, אבל BigQuery ממיר ערכים של פחות ממיקרו-שנייה למיקרו-שניות כשהנתונים נקראים. ניסיון להמיר ערך כלשהו בנתוני ה-ORC שקטן מ--719162 ימים או גדול מ-2,932,896 ימים מחזיר שגיאת |
| עשרוני | NUMERIC, BIGNUMERIC או STRING | מידע נוסף זמין במאמר סוג עשרוני. |
סוג עשרוני
אפשר להמיר סוגים לוגיים של Decimal לסוגים של NUMERIC, BIGNUMERIC או STRING. הסוג שאליו מתבצעת ההמרה תלוי בפרמטרים של הדיוק והקנה מידה של הסוג הלוגי decimal ובסוגי היעד העשרוניים שצוינו. מציינים את סוג היעד העשרוני באופן הבא:
- במשימת טעינה באמצעות ה-API של
jobs.insert: משתמשים בשדהJobConfigurationLoad.decimalTargetTypes. - במשימת טעינה באמצעות הפקודה
bq loadבכלי שורת הפקודה של BigQuery: משתמשים בדגל--decimal_target_types. - לשאילתה על טבלה עם מקורות חיצוניים: משתמשים בשדה
ExternalDataConfiguration.decimalTargetTypes. - בטבלה חיצונית קבועה שנוצרה באמצעות DDL: משתמשים באפשרות
decimal_target_types.
סוגים מורכבים
| סוג הנתונים ב-BigQuery | הערות | |
|---|---|---|
| struct | רשומה |
|
| map<K,V> | רשומה | שדה map<K,V> של ORC מומר ל-RECORD חוזר שמכיל שני שדות: מפתח מאותו סוג נתונים כמו K, וערך מאותו סוג נתונים כמו V. שני השדות הם NULLABLE. |
| list | שדות חוזרים | אין תמיכה ברשימות מקוננות וברשימות של מפות. |
| union | רשומה |
|
שמות של עמודות
שם של עמודה יכול להכיל אותיות (a-z, A-Z), מספרים (0-9) או קווים תחתונים (_), והוא חייב להתחיל באות או בקו תחתון. אם אתם משתמשים בשמות גמישים של עמודות, BigQuery תומך בשמות עמודות שמתחילים במספר. צריך להיזהר כשמתחילים שמות של עמודות במספר, כי השימוש בשמות גמישים של עמודות ב-BigQuery Storage Read API או ב-BigQuery Storage Write API (gRPC) דורש טיפול מיוחד. מידע נוסף על תמיכה בשמות גמישים של עמודות זמין במאמר שמות גמישים של עמודות.
האורך המקסימלי של שמות העמודות הוא 300 תווים. שמות העמודות לא יכולים לכלול את התחיליות הבאות:
_TABLE__FILE__PARTITION_ROW_TIMESTAMP__ROOT___COLIDENTIFIER_CHANGE_SEQUENCE_NUMBER_CHANGE_TYPE_CHANGE_TIMESTAMP
אסור להשתמש בשמות עמודות כפולים, גם אם יש הבדל באותיות רישיות. לדוגמה, עמודה בשם Column1 נחשבת זהה לעמודה בשם column1. מידע נוסף על הכללים למתן שמות לעמודות זמין בקטע שמות עמודות במדריך העזר של GoogleSQL.
אם שם הטבלה (לדוגמה, test) זהה לאחד משמות העמודות (לדוגמה, test), הביטוי SELECT מפרש את העמודה test כ-STRUCT שמכיל את כל שאר העמודות בטבלה. כדי למנוע את ההתנגשות הזו, אפשר להשתמש באחת מהשיטות הבאות:
אל תשתמשו באותו שם לטבלה ולעמודות שלה.
אל תשתמשו ב-
_field_בתור תחילית לשם של עמודה. קידומות ששמורות למערכת גורמות לשינוי שם אוטומטי במהלך שאילתות. לדוגמה, השאילתהSELECT _field_ FROM project1.dataset.testמחזירה עמודה בשם_field_1. אם אתם צריכים לשלוח שאילתה לעמודה עם השם הזה, השתמשו בכינוי כדי לשלוט בפלט.מקצים לטבלה כינוי אחר. לדוגמה, השאילתה הבאה מקצה את כינוי הטבלה
tלטבלהproject1.dataset.test:SELECT test FROM project1.dataset.test AS t;כשמפנים לעמודה, צריך לכלול את שם הטבלה. לדוגמה:
SELECT test.test FROM project1.dataset.test;
שמות גמישים של עמודות
יש לכם יותר גמישות בבחירת שמות לעמודות, כולל גישה מורחבת לתווים בשפות שאינן אנגלית וגם לסמלים נוספים.
אם שמות העמודות הגמישות הם מזהים במירכאות, חשוב להשתמש בתווי גרש הפוך (`) כדי לתחום אותם.
שמות עמודות גמישים תומכים בתווים הבאים:
- כל אות בכל שפה, כפי שהיא מיוצגת על ידי הביטוי הרגולרי של Unicode
\p{L}. - כל תו מספרי בכל שפה, כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode
\p{N}. - כל תו פיסוק מקשר, כולל קווים תחתונים, כפי שמיוצג על ידי הביטוי הרגולרי של Unicode
\p{Pc}. - מקף או קו מפריד, כפי שהם מיוצגים על ידי הביטוי הרגולרי של Unicode
\p{Pd}. - כל סימן שנועד ללוות תו אחר, כפי שמיוצג על ידי הביטוי הרגולרי של Unicode
\p{M}. לדוגמה, סימני הטעמה, אומלאוטים או תיבות תוחמות. - התווים המיוחדים הבאים:
- אמפרסנד (
&) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0026. - סימן אחוז (
%) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0025. - סימן שוויון (
=) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u003D. - סימן פלוס (
+) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u002B. - נקודתיים (
:) כפי שהן מיוצגות על ידי הביטוי הרגולרי של Unicode\u003A. - גרש (
') כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0027. - סימן קטן מ- (
<) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u003C. - סימן גדול מ- (
>) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u003E. - סימן מספר (
#) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0023. - קו אנכי (
|) שמיוצג על ידי הביטוי הרגולרי של Unicode\u007c. - רווח לבן.
- אמפרסנד (
שמות גמישים של עמודות לא תומכים בתווים המיוחדים הבאים:
- סימן קריאה (
!) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0021. - מירכאות (
") כפי שהן מיוצגות על ידי הביטוי הרגולרי של Unicode\u0022. - סימן דולר (
$) שמיוצג על ידי הביטוי הרגולרי של Unicode\u0024. - סוגר שמאלי (
() כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0028. - סוגר ימני (
)) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0029. - כוכבית (
*) כפי שהיא מיוצגת על ידי הביטוי הרגולרי של Unicode\u002A. - פסיק (
,) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u002C. - נקודה (
.) כפי שהיא מיוצגת על ידי הביטוי הרגולרי של Unicode\u002E. נקודות לא מוחלפות בקו תחתון בשמות של עמודות בקובץ Parquet כשמשתמשים במפת תווים של שמות עמודות. מידע נוסף זמין במאמר בנושא מגבלות על עמודות גמישות. - לוכסן (
/) שמיוצג על ידי הביטוי הרגולרי של Unicode\u002F. - נקודה ופסיק (
;) כפי שהם מיוצגים על ידי הביטוי הרגולרי של Unicode\u003B. - סימן שאלה (
?) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u003F. - סימן כרוכית (
@) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0040. - סוגר מרובע שמאלי (
[) שמיוצג על ידי הביטוי הרגולרי של Unicode\u005B. - לוכסן הפוך (
\) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u005C. - סוגר מרובע ימני (
]) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u005D. - הטעמת גג (
^) שמיוצגת על ידי הביטוי הרגולרי של Unicode\u005E. - סימן הטעמה משני (
`) שמיוצג על ידי הביטוי הרגולרי של Unicode\u0060. - סוגר מסולסל שמאלי {
{) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u007B. - סוגר מסולסל ימני (
}) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u007D. - טילדה (
~) כפי שהיא מיוצגת על ידי הביטוי הרגולרי של Unicode\u007E.
הנחיות נוספות זמינות בקטע שמות של עמודות.
התווים המורחבים של העמודות נתמכים גם ב-BigQuery Storage Read API וגם ב-BigQuery Storage Write API (gRPC). כדי להשתמש ברשימה המורחבת של תווי Unicode עם BigQuery Storage Read API, צריך להגדיר דגל. אפשר להשתמש במאפיין displayName כדי לאחזר את שם העמודה. בדוגמה הבאה מוסבר איך להגדיר דגל באמצעות לקוח Python:
from google.cloud.bigquery_storage import types
requested_session = types.ReadSession()
#set avro serialization options for flexible column.
options = types.AvroSerializationOptions()
options.enable_display_name_attribute = True
requested_session.read_options.avro_serialization_options = options
כדי להשתמש ברשימה המורחבת של תווי Unicode עם BigQuery Storage Write API (gRPC), צריך לספק לסכימה את הסימון column_name, אלא אם משתמשים באובייקט הכתיבה JsonStreamWriter. בדוגמה הבאה אפשר לראות איך מספקים את הסכימה:
syntax = "proto2";
package mypackage;
// Source protos located in github.com/googleapis/googleapis
import "google/cloud/bigquery/storage/v1/annotations.proto";
message FlexibleSchema {
optional string item_name_column = 1
[(.google.cloud.bigquery.storage.v1.column_name) = "name-列"];
optional string item_description_column = 2
[(.google.cloud.bigquery.storage.v1.column_name) = "description-列"];
}
בדוגמה הזו, item_name_column ו-item_description_column הם שמות של פלייסהולדרים שצריכים לעמוד במוסכמות למתן שמות של מאגר אחסון לפרוטוקולים. חשוב לזכור שההערות של column_name תמיד מקבלות עדיפות על פני שמות של פלייסהולדרים.
מגבלות
- שמות גמישים של עמודות נתמכים כברירת מחדל בטבלאות מנוהלות של Iceberg, בטבלאות חיצוניות של Iceberg ובטבלאות של Apache Iceberg שמנוהלות על ידי קטלוג ייעודי לזמן ריצה של Lakehouse.
בטבלאות חיצוניות אחרות (כמו Parquet, ORC, Avro, CSV או Delta Lake), שמות גמישים של עמודות לא מופעלים כברירת מחדל. כדי לבקש הפעלה ברמת הפרויקט, פנו ל-Cloud Customer Care.
- בטבלאות Delta Lake, צריך גם להפעיל מיפוי עמודות במצב
idאוname.
- בטבלאות Delta Lake, צריך גם להפעיל מיפוי עמודות במצב
- כשמייצאים טבלאות חיצוניות עם שמות עמודות גמישים לפורמטים של קבצים פתוחים (כמו Parquet או Avro באמצעות
EXPORT DATAאו משימות חילוץ), שמות עמודות שלא נתמכים ממופים לשמות גיבוב (hash) פנימיים שנוצרו (col_...), כי פורמטים של צד שלישי לא כוללים מטא-נתונים של שמות תצוגה ב-BigQuery. - שמות גמישים של עמודות לא נתמכים ב-SQL מדור קודם. חובה להשתמש ב-GoogleSQL.
NULL ערכים
שימו לב שבמשימות טעינה, BigQuery מתעלם מרכיבי NULL של הסוג המורכב list, כי אחרת הם היו מתורגמים לרכיבי NULL ARRAY שלא יכולים להישמר בטבלה (לפרטים, ראו סוגי נתונים).
מידע נוסף על סוגי נתונים של ORC זמין במפרט Apache ORC™ גרסה 1.