שימוש בנתונים שחולקו למחיצות באופן חיצוני
אתם יכולים להשתמש בטבלאות חיצוניות ב-BigQuery כדי להריץ שאילתות על נתונים מחולקים במאגרי הנתונים הבאים:
הנתונים שחולקו למחיצות באופן חיצוני צריכים להיות בפריסת חלוקה למחיצות של Hive כברירת מחדל ובאחד מהפורמטים הבאים:
- Avro
- CSV
- JSON
- ORC
- Parquet
כדי להריץ שאילתות על נתונים עם חלוקה למחיצות חיצוניות, צריך ליצור טבלת BigLake או טבלה חיצונית. מומלץ להשתמש בטבלאות BigLake כי הן מאפשרות לאכוף אבטחה ברמה גבוהה ברמת הטבלה. מידע על BigLake ועל טבלאות חיצוניות זמין במאמרים מבוא לטבלאות BigLake ומבוא לטבלאות חיצוניות.
כדי להפעיל את התמיכה בחלוקה למחיצות ב-Hive, צריך להגדיר את האפשרויות המתאימות בקובץ הגדרת הטבלה. הוראות לשליחת שאילתות לטבלאות מנוהלות מחולקות למחיצות מפורטות במאמר מבוא לטבלאות מחולקות למחיצות.
סכימת חלוקה למחיצות
בקטעים הבאים מוסבר על פריסת ברירת המחדל של 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 של המקור עבור הקבצים התואמים.
הסרת מחיצות
המערכת של BigQuery מבצעת קיצוץ של מחיצות כשהדבר אפשרי, באמצעות פרדיקטים של שאילתות במפתחות המחיצות. כך BigQuery לא יצטרך לקרוא קבצים מיותרים, והביצועים ישתפרו.
מסנני פרדיקטים במפתחות של מחיצות בשאילתות
כשיוצרים טבלה עם מחיצות חיצוניות, אפשר לדרוש שימוש במסנני פרדיקטים במפתחות מחיצות על ידי הפעלת האפשרות requirePartitionFilter
בקטע HivePartitioningOptions.
כשהאפשרות הזו מופעלת, ניסיונות לשלוח שאילתה לטבלה עם חלוקה חיצונית ללא ציון של פסקה WHERE יגרמו לשגיאה הבאה:
Cannot query over table <table_name> without a filter over column(s)
<partition key names> that can be used for partition elimination.
מגבלות
- התמיכה בחלוקה למחיצות ב-Hive מובנית בהנחה שלכל ה-URI יש קידומת URI משותפת שמסתיימת מיד לפני קידוד המחיצה, באופן הבא:
gs://BUCKET/PATH_TO_TABLE/. - מניחים שמבנה הספריות של טבלה מחולקת למחיצות (Partitions) ב-Hive כולל את אותם מפתחות חלוקה למחיצות באותו סדר, עם עד עשרה מפתחות חלוקה למחיצות לכל טבלה.
- הנתונים צריכים להיות בפורמט של פריסת מחיצות של Hive כברירת מחדל.
- מפתחות החלוקה למחיצות ב-Hive והעמודות בקבצים הבסיסיים לא יכולים להיות חופפים.
התמיכה מיועדת ל-GoogleSQL בלבד.
כל המגבלות שחלות על שאילתות של מקורות נתונים חיצוניים שמאוחסנים ב-Cloud Storage חלות גם כאן.