ניהול נתונים חיצוניים שחולקו למחיצות באמצעות Hive

התמיכה בחלוקה למחיצות ב-Hive מאפשרת לשלוח שאילתות לנתונים שמחולקים למחיצות באופן חיצוני ב-Cloud Storage, ב-Amazon Simple Storage Service (Amazon S3) וב-Azure Blob Storage, באמצעות טבלאות BigLake או טבלאות חיצוניות של BigQuery. כשמסננים שאילתות לפי מפתחות של מחיצות, BigQuery יכול לצמצם את המחיצות ולקרוא פחות נתונים.

במאמר הזה מוסבר על הפורמטים והפריסות הנתמכים של חלוקה למחיצות ב-Hive, על גיזום מחיצות ועל המגבלות. אנחנו ממליצים על טבלאות BigLake כי הן מאפשרות לאכוף אבטחה ברמת פירוט גבוהה ברמת הטבלה.

מאגרי נתונים ופורמטים נתמכים

אתם יכולים להשתמש בטבלאות חיצוניות של BigQuery כדי לשלוח שאילתות לנתונים מחולקים למחיצות במאגרי הנתונים הבאים:

הנתונים שחולקו למחיצות באופן חיצוני צריכים להשתמש בפריסת ברירת המחדל של חלוקה למחיצות ב-Hive, ולהיות באחד מהפורמטים הבאים:

  • Avro
  • CSV
  • JSON
  • ORC
  • Parquet

כדי לשלוח שאילתות לנתונים שמחולקים למחיצות באופן חיצוני, צריך ליצור טבלת 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 חלות גם כאן.

המאמרים הבאים