טעינה של נתונים שחולקו למחיצות באופן חיצוני
אפשר לטעון ל-BigQuery נתונים שמאוחסנים ב-Cloud Storage באמצעות פריסת חלוקה למחיצות של Hive. חלוקה למחיצות ב-Hive פירושה שהנתונים החיצוניים מאורגנים בכמה קבצים, עם מוסכמת שמות להפרדה בין הקבצים למחיצות שונות. מידע נוסף זמין במאמר בנושא פריסות נתונים נתמכות.
כברירת מחדל, הנתונים לא מחולקים למחיצות ב-BigQuery אחרי הטעינה, אלא אם יוצרים במפורש טבלה מחולקת למחיצות.
טעינה של נתונים שחולקו למחיצות ב-Hive
כדי לטעון נתונים עם חלוקה למחיצות ב-Hive, בוחרים אחת מהאפשרויות הבאות:
המסוף
במסוף Google Cloud , עוברים אל BigQuery.
- בחלונית הימנית, לוחצים על כלי הניתוחים.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- לוחצים על פעולות ואז על יצירת טבלה. תיפתח החלונית Create table.
- בקטע מקור, מציינים את הפרטים הבאים:
- בקטע Create table from (יצירת טבלה מתוך), בוחרים באפשרות Google Cloud Storage.
- בקטע Select file from Cloud Storage bucket (בחירת קובץ מקטגוריה של Cloud Storage), מזינים את הנתיב לתיקייה ב-Cloud Storage באמצעות wildcards.
לדוגמה,
my_bucket/my_files*. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה נתונים או להחליף אותה. - מהרשימה פורמט קובץ בוחרים את סוג הקובץ.
- מסמנים את תיבת הסימון חלוקת נתוני המקור למחיצות, ובשדה בחירת קידומת URI של המקור מזינים את קידומת ה-URI של Cloud Storage. לדוגמה,
gs://my_bucket/my_files. - בקטע Partition inference mode (מצב הסקה של מחיצות), בוחרים באחת מהאפשרויות הבאות:
- הסקת סוגים באופן אוטומטי: הגדרת מצב הזיהוי של סכימת החלוקה למחיצות לערך
AUTO. - כל העמודות הן מחרוזות: מגדירים את מצב זיהוי הסכימה של המחיצה ל-
STRINGS. - אני רוצה לספק משלי: מגדירים את מצב הזיהוי של סכימת המחיצה ל-
CUSTOMומזינים באופן ידני את פרטי הסכימה של מפתחות המחיצה. מידע נוסף מופיע במאמר בנושא הגדרת סכימת מפתח מחיצה בהתאמה אישית.
- הסקת סוגים באופן אוטומטי: הגדרת מצב הזיהוי של סכימת החלוקה למחיצות לערך
- אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות של הטבלה הזו, מסמנים את תיבת הסימון דרישת מסנן מחיצה. הוספת מסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. מידע נוסף מופיע במאמר בנושא הוספת מסנני פרדיקט למפתחות של מחיצות בשאילתות.
- בקטע יעד, מציינים את הפרטים הבאים:
- בקטע Project (פרויקט), בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
- בקטע Dataset (מערך נתונים), בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table (טבלה), מזינים את שם הטבלה שרוצים ליצור.
- בקטע סוג הטבלה, בוחרים באפשרות טבלה מקורית .
- בקטע Schema (סכימה), מזינים את הגדרת הסכימה.
- כדי להפעיל את הזיהוי האוטומטי של סכימה, בוחרים באפשרות זיהוי אוטומטי.
- כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע אפשרויות מתקדמות ובוחרים באפשרות ערכים לא ידועים.
- לוחצים על יצירת טבלה.
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
כדי לטעון רק נתונים מ-2019-10-31, פועלים לפי השלבים הבאים:
- מגדירים את מצב החלוקה למחיצות של 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 לערך
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 כמחרוזת, ל-dt כתאריך ומשתמש ב-gs://my_bucket/my_table כקידומת של ה-URI של המקור עבור הקבצים התואמים.
מגבלות
- התמיכה בחלוקה למחיצות ב-Hive מובנית בהנחה שלכל ה-URI יש קידומת URI משותפת שמסתיימת מיד לפני קידוד המחיצה, באופן הבא:
gs://BUCKET/PATH_TO_TABLE/. - מניחים שמבנה הספריות של טבלה מחולקת למחיצות (Partitions) ב-Hive כולל את אותם מפתחות חלוקה למחיצות באותו סדר, עם עד עשרה מפתחות חלוקה למחיצות לכל טבלה.
- הנתונים צריכים להיות בפורמט של פריסת מחיצות של Hive כברירת מחדל.
- מפתחות החלוקה למחיצות ב-Hive והעמודות בקבצים הבסיסיים לא יכולים להיות חופפים.
התמיכה מיועדת ל-GoogleSQL בלבד.
כל המגבלות לגבי טעינה מ-Cloud Storage חלות.