טעינה של נתונים שחולקו למחיצות באופן חיצוני
ב-BigQuery אפשר לטעון נתונים מ-Cloud Storage שמשתמשים בפריסת חלוקה למחיצות של Apache Hive, ולכלול את מפתחות המחיצות כעמודות בטבלה. חלוקה למחיצות ב-Hive פירושה שהנתונים החיצוניים מאורגנים בכמה קבצים, עם מוסכמה למתן שמות שמפרידה בין הקבצים למחיצות שונות.
כברירת מחדל, הנתונים לא מחולקים למחיצות ב-BigQuery אחרי שטוענים אותם, אלא אם יוצרים באופן מפורש טבלה מחולקת למחיצות. מידע נוסף זמין במאמר פריסות נתונים נתמכות.
טעינת נתונים שחולקו למחיצות ב-Hive
כדי לטעון נתונים שמחולקים למחיצות ב-Hive, בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Cloud de Confiance , נכנסים ל-BigQuery.
- בחלונית הימנית, לוחצים על Explorer.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- לוחצים על Actions ואז על Create table. החלונית Create table תיפתח.
- בקטע מקור, מציינים את הפרטים הבאים:
- בקטע Create table from, בוחרים באפשרות Google Cloud Storage.
- בשדה Select file from Cloud Storage bucket, מזינים את הנתיב לתיקייה ב-Cloud Storage באמצעות תווים כלליים לחיפוש.
לדוגמה,
my_bucket/my_files*. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה. - ברשימה פורמט קובץ, בוחרים את סוג הקובץ.
- מסמנים את התיבה Source data partitioning, ובשדה Select Source URI Prefix מזינים את הקידומת של ה-URI של Cloud Storage. לדוגמה,
gs://my_bucket/my_files. - בקטע מצב היסק של מחיצה, בוחרים אחת מהאפשרויות הבאות:
- Automatically infer types: מגדירים את מצב הזיהוי של סכימת המחיצה ל-
AUTO. - כל העמודות הן מחרוזות: מגדירים את מצב הזיהוי של סכימת המחיצה לערך
STRINGS. - Provide my own: מגדירים את מצב הזיהוי של סכימת המחיצה לערך
CUSTOMומזינים באופן ידני את פרטי הסכימה של מפתחות המחיצה. מידע נוסף מופיע במאמר הגדרת סכימה מותאמת אישית למפתח המחיצה.
- Automatically infer types: מגדירים את מצב הזיהוי של סכימת המחיצה ל-
- אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות בטבלה הזו, מסמנים את התיבה Require partition filter. דרישה למסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר דרישה למסנני פרדיקטים במפתחות מחיצה בשאילתות.
- בקטע Destination, מציינים את הפרטים הבאים:
- בשדה Project, בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
- בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
- בקטע Table type, בוחרים באפשרות Native table .
- בקטע Schema, מזינים את הגדרת הסכימה.
- כדי להפעיל זיהוי אוטומטי של סכימה, בוחרים באפשרות Auto detect.
- כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע Advanced options ובוחרים באפשרות Unknown values.
- לוחצים על Create table.
SQL
כדי ליצור טבלה עם חלוקה למחיצות חיצוניות, משתמשים בסעיף WITH PARTITION COLUMNS של ההצהרה LOAD DATA כדי לציין את פרטי סכימת המחיצה.
דוגמה לכך מופיעה במאמר טעינת קובץ שמחולק למחיצות באופן חיצוני.
BQ
טעינת נתונים מחולקים למחיצות ב-Hive באמצעות זיהוי אוטומטי של סוג מפתח המחיצה:
bq load --source_format=ORC --hive_partitioning_mode=AUTO \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \ dataset.table gcs_uris
טעינת נתונים שחולקו למחיצות ב-Hive באמצעות זיהוי מפתח מחיצה מסוג מחרוזת:
bq load --source_format=CSV --autodetect \ --hive_partitioning_mode=STRINGS \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \ dataset.table gcs_uris
טעינת נתונים מחולקים למחיצות של Hive באמצעות סכימה מותאמת אישית של מפתחות מחיצה, שמקודדת באמצעות השדה source\_uri\_prefix:
bq load --source_format=JSON --hive_partitioning_mode=CUSTOM \ --hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/partition_key_schema \ dataset.table gcs_uris file_schema
הסכימה של מפתח המחיצה מקודדת מיד אחרי הקידומת של ה-URI של המקור. כדי לציין את --hive_partitioning_source_uri_prefix, משתמשים בפורמט הבא:
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3}
API
כדי להשתמש בחלוקה למחיצות של Hive, צריך להגדיר את HivePartitioningOptions ב-JobConfigurationLoad.
ביצוע טעינות מצטברות
נניח שיש לכם את פריסת הנתונים הבאה:
gs://my_bucket/my_table/dt=2019-10-31/val=1/file1
gs://my_bucket/my_table/dt=2018-10-31/val=2/file2
gs://my_bucket/my_table/dt=2017-10-31/val=3/file3
gs://my_bucket/my_table/dt=2016-10-31/val=4/file4
כדי לטעון רק נתונים מהתאריך 31-10-2019, מבצעים את הפעולות הבאות:
- מגדירים את מצב החלוקה למחיצות של Hive לערך
AUTO,STRINGSאוCUSTOM. - מגדירים את הקידומת של ה-URI של המקור ל-
gs://my_bucket/my_table/במצבי החלוקה למחיצותAUTOאוSTRINGSשל Hive. ב-CUSTOM, צריך לציין אתgs://my_bucket/my_table/{dt:DATE}/{val:INTEGER}. - משתמשים ב-URI
gs://my_bucket/my_table/dt=2019-10-31/*. - הנתונים נטענים עם העמודות
dtו-val, עם הערכים2019-10-31ו-1, בהתאמה.
כדי לטעון רק נתונים מקבצים ספציפיים:
- מגדירים את Hive partitioning mode לערך
AUTO,STRINGSאוCUSTOM. - מגדירים את הקידומת של ה-URI של המקור לערך
gs://my_bucket/my_table/במצבי החלוקה למחיצותAUTOאוSTRINGSשל Hive. בשבילCUSTOM, צריך לספקgs://my_bucket/my_table/{dt:DATE}/{val:INTEGER}. - משתמשים בכתובות ה-URI הבאות:
gs://my_bucket/my_table/dt=2017-10-31/val=3/file3,gs://my_bucket/my_table/dt=2016-10-31/val=4/file4. - הנתונים נטענים משני הקבצים, והעמודות
dtו-valמתמלאות.
סכימת המחיצה
בקטעים הבאים מוסבר על פריסת ברירת המחדל של חלוקה למחיצות ב-Hive ועל מצבי זיהוי הסכימה שנתמכים ב-BigQuery.
פריסות נתונים נתמכות
מפתחות המחיצות של Hive מופיעים כעמודות רגילות כששולחים שאילתות על נתונים מ-Cloud Storage. הנתונים צריכים להיות בפריסה של מחיצות Hive כברירת מחדל. לדוגמה, הקבצים הבאים תואמים לפריסה שמוגדרת כברירת מחדל – צמדי המפתח/ערך מוגדרים כספריות עם סימן שווה (=) כמפריד, ומפתחות המחיצה תמיד באותו סדר:
gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/dt=2018-10-31/lang=fr/my_filename
התחילית הנפוצה של ה-URI של המקור בדוגמה הזו היא gs://my_bucket/my_table.
פריסות נתונים לא נתמכות
אם השמות של מפתחות המחיצה לא מקודדים בנתיב הספרייה, זיהוי סכימת המחיצה נכשל. לדוגמה, בנתיב הבא שמות מפתחות המחיצה לא מקודדים:
gs://my_bucket/my_table/2019-10-31/en/my_filename
גם קבצים שבהם הסכימה לא בסדר עקבי לא יזוהו. לדוגמה, נניח שיש שני קבצים עם קידודים הפוכים של מפתחות מחיצה:
gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/lang=fr/dt=2018-10-31/my_filename
מצבי זיהוי
ב-BigQuery יש שלושה מצבים לזיהוי סכימת המחיצות של Hive:
AUTO: השמות והסוגים של המפתחות מזוהים באופן אוטומטי. אלה סוגי המזהים שאפשר לזהות:
STRINGS: שמות המפתחות מומרים באופן אוטומטי לסוגSTRING.
CUSTOM: הסכימה של מפתח המחיצה מקודדת כמו שצוין בתחילית של ה-URI של המקור.
סכימה של מפתח מחיצה בהתאמה אישית
כדי להשתמש בסכימה CUSTOM, צריך לציין את הסכימה בשדה של תחילית ה-URI של המקור. שימוש בסכימה CUSTOM מאפשר לציין את הסוג של כל מפתח מחיצה.
הערכים חייבים להיות מנותחים באופן תקין כסוג שצוין, אחרת השאילתה תיכשל.
לדוגמה, אם מגדירים את הדגל source_uri_prefix לערך gs://my_bucket/my_table/{dt:DATE}/{val:STRING}, BigQuery מתייחס ל-val כ-STRING, ל-dt כ-DATE, ומשתמש ב-gs://my_bucket/my_table כתחילית של ה-URI של המקור לקבצים התואמים.
מגבלות
- התמיכה בחלוקה למחיצות ב-Hive מבוססת על ההנחה שלכל ה-URIs יש קידומת URI משותפת של המקור, שמסתיימת מיד לפני קידוד המחיצה, באופן הבא:
gs://BUCKET/PATH_TO_TABLE/. - מבנה הספרייה של טבלה מחולקת למחיצות ב-Hive אמור להכיל את אותם מפתחות חלוקה למחיצות באותו סדר, עם עד עשרה מפתחות חלוקה למחיצות בכל טבלה.
- הנתונים צריכים להיות בפריסת ברירת מחדל של חלוקה למחיצות ב-Hive.
- מפתחות החלוקה למחיצות של Hive והעמודות בקבצים הבסיסיים לא יכולים להיות חופפים.
התמיכה היא רק ב-GoogleSQL.
כל המגבלות על טעינה מ-Cloud Storage חלות.