ניהול נתונים חיצוניים שחולקו למחיצות באמצעות Hive
אתם יכולים להשתמש בטבלאות חיצוניות של 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 כ-STRING, ל-dt כ-DATE, ומשתמש ב-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 מבוססת על ההנחה שלכל ה-URIs יש קידומת URI משותפת של המקור, שמסתיימת מיד לפני קידוד המחיצה, באופן הבא:
gs://BUCKET/PATH_TO_TABLE/. - מבנה הספרייה של טבלה מחולקת למחיצות ב-Hive אמור להכיל את אותם מפתחות חלוקה למחיצות באותו סדר, עם עד עשרה מפתחות חלוקה למחיצות בכל טבלה.
- הנתונים צריכים להיות בפריסת ברירת מחדל של חלוקה למחיצות ב-Hive.
- מפתחות החלוקה למחיצות של Hive והעמודות בקבצים הבסיסיים לא יכולים להיות חופפים.
התמיכה היא רק ב-GoogleSQL.
כל המגבלות על שליחת שאילתות למקורות נתונים חיצוניים שמאוחסנים ב-Cloud Storage חלות גם כאן.