טעינה של נתונים שחולקו למחיצות באופן חיצוני

ב-BigQuery אפשר לטעון נתונים מ-Cloud Storage שמשתמשים בפריסת חלוקה למחיצות של Apache Hive, ולכלול את מפתחות המחיצות כעמודות בטבלה. חלוקה למחיצות ב-Hive פירושה שהנתונים החיצוניים מאורגנים בכמה קבצים, עם מוסכמה למתן שמות שמפרידה בין הקבצים למחיצות שונות.

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

טעינת נתונים שחולקו למחיצות ב-Hive

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

המסוף

  1. במסוף Cloud de Confiance , נכנסים ל-BigQuery.

    כניסה לדף BigQuery

  2. בחלונית הימנית, לוחצים על Explorer.
  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
  4. לוחצים על Actions ואז על Create table. החלונית Create table תיפתח.
  5. בקטע מקור, מציינים את הפרטים הבאים:
    1. בקטע Create table from, בוחרים באפשרות Google Cloud Storage.
    2. בשדה Select file from Cloud Storage bucket, מזינים את הנתיב לתיקייה ב-Cloud Storage באמצעות תווים כלליים לחיפוש. לדוגמה, my_bucket/my_files*. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה.
    3. ברשימה פורמט קובץ, בוחרים את סוג הקובץ.
    4. מסמנים את התיבה Source data partitioning, ובשדה Select Source URI Prefix מזינים את הקידומת של ה-URI של Cloud Storage. לדוגמה, gs://my_bucket/my_files.
    5. בקטע מצב היסק של מחיצה, בוחרים אחת מהאפשרויות הבאות:
      • Automatically infer types: מגדירים את מצב הזיהוי של סכימת המחיצה ל-AUTO.
      • כל העמודות הן מחרוזות: מגדירים את מצב הזיהוי של סכימת המחיצה לערך STRINGS.
      • Provide my own: מגדירים את מצב הזיהוי של סכימת המחיצה לערך CUSTOM ומזינים באופן ידני את פרטי הסכימה של מפתחות המחיצה. מידע נוסף מופיע במאמר הגדרת סכימה מותאמת אישית למפתח המחיצה.
    6. אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות בטבלה הזו, מסמנים את התיבה Require partition filter. דרישה למסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר דרישה למסנני פרדיקטים במפתחות מחיצה בשאילתות.
  6. בקטע Destination, מציינים את הפרטים הבאים:
    1. בשדה Project, בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
    2. בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
    3. בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
    4. בקטע Table type, בוחרים באפשרות Native table .
  7. בקטע Schema, מזינים את הגדרת הסכימה.
  8. כדי להפעיל זיהוי אוטומטי של סכימה, בוחרים באפשרות Auto detect.
  9. כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע Advanced options ובוחרים באפשרות Unknown values.
  10. לוחצים על 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 חלות.

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