טעינת נתוני Avro מ-Cloud Storage

Avro הוא פורמט נתונים בקוד פתוח שמאגד נתונים שעברו סריאליזציה עם הסכימה של הנתונים באותו קובץ.

כשאתם טוענים נתוני Avro מ-Cloud Storage, אתם יכולים לטעון את הנתונים לטבלה או למחיצה חדשות, או להוסיף אותם לטבלה או למחיצה קיימות או להחליף אותן. כשהנתונים נטענים ל-BigQuery, הם מומרים לפורמט עמודות עבור Capacitor (פורמט האחסון של BigQuery).

כשמעלים נתונים מ-Cloud Storage לטבלה ב-BigQuery, מערך הנתונים שמכיל את הטבלה צריך להיות באותו מיקום אזורי או רב-אזורי כמו קטגוריה של Cloud Storage.

למידע על טעינת נתוני Avro מקובץ מקומי, אפשר לעיין במאמר בנושא טעינת נתונים ל-BigQuery ממקור נתונים מקומי.

מגבלות

כשאתם טוענים נתונים ל-BigQuery מקטגוריה של Cloud Storage, אתם כפופים למגבלות הבאות:

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

ההגבלות הבאות חלות גם כשמעלים קובצי Avro ל-BigQuery:

  • ‫BigQuery לא תומך בטעינה של קובצי סכימת Avro עצמאיים (‎.avsc).
  • אין תמיכה בפורמט של מערך בתוך מערך ב-BigQuery. צריך להמיר קובצי Avro שמשתמשים בפורמט הזה לפני הייבוא.
  • בקובץ Avro, שמות ומרחבי שמות של שם מלא יכולים להכיל רק תווים אלפאנומריים ואת התו של הקו התחתון _. הביטוי הרגולרי הבא מציג את התווים המותרים: [A-Za-z_][A-Za-z0-9_]*.

מידע על מגבלות של משימות טעינה ב-BigQuery זמין במאמר בנושא משימות טעינה.

הדרישות לגבי קובץ הקלט

כדי להימנע משגיאות resourcesExceeded כשמעלים קובצי Avro ל-BigQuery, צריך לפעול לפי ההנחיות הבאות:

  • גודל השורה צריך להיות עד 50MB.
  • אם השורה מכילה הרבה שדות מערך, או שדות מערך ארוכים מאוד, צריך לפצל את ערכי המערך לשדות נפרדים.

לפני שמתחילים

הקצאת תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים למשתמשים את ההרשאות הנדרשות לביצוע כל משימה במסמך הזה, ויצירת מערך נתונים וטבלה לאחסון הנתונים.

ההרשאות הנדרשות

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

הרשאות לטעינת נתונים ל-BigQuery

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

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.tables.update
  • bigquery.jobs.create

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

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin (כולל את ההרשאה bigquery.jobs.create)
  • bigquery.user (כולל את ההרשאה bigquery.jobs.create)
  • bigquery.jobUser (כולל את ההרשאה bigquery.jobs.create)

בנוסף, אם יש לכם הרשאה של bigquery.datasets.create, אתם יכולים ליצור ולעדכן טבלאות באמצעות משימת טעינה במערכי הנתונים שאתם יוצרים.

במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.

הרשאות לטעינת נתונים מ-Cloud Storage

כדי לקבל את ההרשאות שנדרשות לטעינת נתונים מקטגוריה של Cloud Storage, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM אדמין לניהול אחסון (roles/storage.admin) בקטגוריה. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

התפקיד המוגדר מראש הזה כולל את ההרשאות שנדרשות לטעינת נתונים מקטגוריה של Cloud Storage. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

כדי לטעון נתונים מקטגוריה של Cloud Storage, נדרשות ההרשאות הבאות:

  • storage.buckets.get
  • storage.objects.get
  • storage.objects.list (required if you are using a URI wildcard)

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

יצירה של מערך נתונים וטבלה

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

היתרונות של Avro

פורמט Avro הוא הפורמט המועדף לטעינת נתונים ל-BigQuery. לטעינת קובצי Avro יש את היתרונות הבאים בהשוואה לקובצי CSV ו-JSON (עם תווי שורה חדשה):

  • הפורמט הבינארי של Avro:
    • הוא נטען מהר יותר. אפשר לקרוא את הנתונים במקביל, גם אם בלוקי הנתונים דחוסים.
    • לא צריך להקליד או לבצע סריאליזציה.
    • קל יותר לנתח אותו כי לא נמצאו בעיות קידוד בפורמטים אחרים כמו ASCII.
  • כשאתם טוענים קובצי Avro ל-BigQuery, סכימת הטבלה מאוחזרת באופן אוטומטי מנתוני המקור שמתארים את עצמם.

סכימות Avro

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

לדוגמה, יש לכם את קובצי Avro הבאים ב-Cloud Storage:

gs://mybucket/00/
  a.avro
  z.avro
gs://mybucket/01/
  b.avro

הפעלת הפקודה הזו בכלי שורת הפקודה של BigQuery טוענת את כל הקבצים (כמו רשימה מופרדת בפסיקים), והסכימה נגזרת מ-mybucket/01/b.avro:

bq load \
--source_format=AVRO \
dataset.table \
"gs://mybucket/00/*.avro","gs://mybucket/01/*.avro"

כשמייבאים כמה קובצי Avro עם סכימות Avro שונות, כל הסכימות צריכות להיות תואמות לפתרון הסכימות של Avro.

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

כדי לספק סכימת טבלה ליצירת טבלאות חיצוניות, צריך להגדיר את המאפיין referenceFileSchemaUri ב-BigQuery API או את הפרמטר
--reference_file_schema_uri בכלי שורת הפקודה של BigQuery לכתובת ה-URL של קובץ עזר.

לדוגמה, --reference_file_schema_uri="gs://mybucket/schema.avro".

אפשר גם לייבא סכימה ל-BigQuery על ידי ציון של קובץ סכימת JSON.

דחיסת Avro

‫BigQuery תומך בפורמטים הבאים של דחיסה לתוכן של קובצי Avro:‏

  • Snappy
  • DEFLATE
  • ZSTD

טעינת נתוני Avro לטבלה חדשה

כדי לטעון נתוני Avro מ-Cloud Storage לטבלה חדשה ב-BigQuery, בוחרים באחת מהאפשרויות הבאות:

המסוף

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

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז לוחצים על שם מערך הנתונים.

  4. בחלונית הפרטים, לוחצים על יצירת טבלה .

  5. בדף Create table, בקטע Source:

    • בקטע Create table from (יצירת טבלה מ), בוחרים באפשרות Google Cloud Storage.

    • בשדה המקור, עוברים אל URI של Cloud Storage או מזינים אותו. שימו לב, אי אפשר לכלול כמה מזהי URI בCloud de Confiance מסוף, אבל אפשר להשתמש בתווים כלליים. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו קבוצת הנתונים שמכילה את הטבלה שאתם יוצרים.

      בחירת קובץ

    • בקטע פורמט קובץ, בוחרים באפשרות Avro.

  6. בדף יצירת טבלה, בקטע יעד:

    • בשדה Dataset name (שם קבוצת הנתונים), בוחרים את קבוצת הנתונים המתאימה.
    • מוודאים שההגדרה של Table type היא Native table.
    • בשדה שם הטבלה, מזינים את השם של הטבלה שיוצרים ב-BigQuery.
  7. בקטע Schema (סכימה), לא נדרשת פעולה. הסכימה מתוארת בעצמה בקובצי Avro.

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

  9. (אופציונלי) במסנן חלוקה, מסמנים את התיבה דרישת מסנן חלוקה כדי לדרוש מהמשתמשים לכלול תנאי WHERE שמציין את המחיצות שרוצים לשלוח להן שאילתה. דרישה של מסנן מחיצה עשויה להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר בנושא דרישת מסנן מחיצות בשאילתות. האפשרות הזו לא זמינה אם בוחרים באפשרות ללא חלוקה למחיצות.

  10. (אופציונלי) כדי לצבור את הטבלה, בתיבה סדר הצבירה מזינים בין שם שדה אחד לארבעה שמות שדות.

  11. (אופציונלי) לוחצים על אפשרויות מתקדמות.

    • בקטע העדפות כתיבה, משאירים את האפשרות כתיבה אם ריק מסומנת. האפשרות הזו יוצרת טבלה חדשה וטוענת לתוכה את הנתונים.
    • כדי להגדיר ערכים לא ידועים, משאירים את התיבה התעלמות מערכים לא ידועים לא מסומנת. האפשרות הזו רלוונטית רק לקובצי CSV ו-JSON.
    • בקטע הצפנה, לוחצים על מפתח בניהול הלקוח כדי להשתמש במפתח של Cloud Key Management Service. אם לא משנים את ההגדרה Google Cloud-powered key,‏ BigQuery יצפין את הנתונים במנוחה.
  12. לוחצים על יצירת טבלה.

SQL

משתמשים בהצהרת DDL‏ LOAD DATA. בדוגמה הבאה נטען קובץ Avro לטבלה החדשה mytable:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    LOAD DATA OVERWRITE mydataset.mytable
    FROM FILES (
      format = 'avro',
      uris = ['gs://bucket/path/file.avro']);

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

משתמשים בפקודה bq load, מציינים את AVRO באמצעות הדגל --source_format וכוללים URI של Cloud Storage. אפשר לכלול URI יחיד, רשימה מופרדת בפסיקים של מזהי URI או URI שמכיל תו כללי.

(אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום.

דגלים אופציונליים אחרים:

  • --time_partitioning_type: הפעלת חלוקה למחיצות לפי זמן בטבלה והגדרת סוג המחיצה. הערכים האפשריים הם HOUR,‏ DAY,‏ MONTH ו-YEAR. הדגל הזה הוא אופציונלי כשיוצרים טבלה עם חלוקה למחיצות בעמודה DATE, DATETIME או TIMESTAMP. סוג ברירת המחדל של חלוקה למחיצות (partitioning) לפי זמן הוא DAY. אי אפשר לשנות את מפרט החלוקה למחיצות בטבלה קיימת.
  • --time_partitioning_expiration: מספר שלם שמציין (בשניות) מתי צריך למחוק מחיצה מבוססת-זמן. זמן התפוגה מחושב לפי התאריך ב-UTC של המחיצה בתוספת ערך המספר השלם.
  • --time_partitioning_field: העמודה DATE או TIMESTAMP שמשמשת ליצירת טבלה מחולקת למחיצות. אם מפעילים חלוקה למחיצות לפי זמן בלי הערך הזה, נוצרת טבלה מחולקת למחיצות לפי זמני כתיבת הנתונים.
  • --require_partition_filter: כשהאפשרות הזו מופעלת, המשתמשים צריכים לכלול פסקה של WHERE שמציינת את המחיצות שרוצים לשלוח להן שאילתה. הוספה של מסנן מחיצות עשויה להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר בנושא דרישת מסנן מחיצות בשאילתות.
  • --clustering_fields: רשימה מופרדת בפסיקים של עד ארבעה שמות עמודות שמשמשים ליצירת טבלה מסודרת באשכולות.
  • --destination_kms_key: מפתח Cloud KMS להצפנה של נתוני הטבלה.

    מידע נוסף על טבלאות מחולקות למחיצות זמין במאמרים הבאים:

    מידע נוסף על טבלאות מקובצות זמין במאמרים הבאים:

    מידע נוסף על הצפנת טבלאות

כדי לטעון נתוני Avro ל-BigQuery, מזינים את הפקודה הבאה:

bq --location=location load \
--source_format=format \
dataset.table \
path_to_source

מחליפים את מה שכתוב בשדות הבאים:

  • location הוא המיקום שלכם. הדגל --location הוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ ‎.bigqueryrc.
  • format הוא AVRO.
  • dataset הוא מערך נתונים קיים.
  • table הוא שם הטבלה שאליה טוענים את הנתונים.
  • path_to_source הוא URI של Cloud Storage מוגדר במלואו או רשימה מופרדת בפסיקים של מזהי URI. יש תמיכה גם בתווים כלליים לחיפוש.

דוגמאות:

הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.avro לטבלה בשם mytable ב-mydataset.

    bq load \
    --source_format=AVRO \
    mydataset.mytable \
    gs://mybucket/mydata.avro

הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.avro לטבלה מחולקת למחיצות (Partitions) לפי זמני כתיבת הנתונים בשם mytable ב-mydataset.

    bq load \
    --source_format=AVRO \
    --time_partitioning_type=DAY \
    mydataset.mytable \
    gs://mybucket/mydata.avro

הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.avro לטבלת מחיצות חדשה בשם mytable ב-mydataset. הטבלה מחולקת למחיצות (Partitions) לפי העמודה mytimestamp.

    bq load \
    --source_format=AVRO \
    --time_partitioning_field mytimestamp \
    mydataset.mytable \
    gs://mybucket/mydata.avro

הפקודה הבאה טוענת נתונים מכמה קבצים ב-gs://mybucket/ לטבלה בשם mytable ב-mydataset. ה-URI של Cloud Storage משתמש בתו כללי.

    bq load \
    --source_format=AVRO \
    mydataset.mytable \
    gs://mybucket/mydata*.avro

הפקודה הבאה טוענת נתונים מכמה קבצים ב-gs://mybucket/ לטבלה בשם mytable ב-mydataset. הפקודה כוללת רשימה מופרדת בפסיקים של מזהי URI של Cloud Storage עם תווים כלליים.

    bq load \
    --source_format=AVRO \
    mydataset.mytable \
    "gs://mybucket/00/*.avro","gs://mybucket/01/*.avro"

API

  1. יוצרים משימת load שמפנה לנתוני המקור ב-Cloud Storage.

  2. (אופציונלי) מציינים את המיקום במאפיין location בקטע jobReference של משאב המשרה.

  3. המאפיין source URIs צריך להיות מוגדר באופן מלא, בפורמט gs://bucket/object. כל URI יכול להכיל תו כללי אחד לחיפוש '*' .

  4. מגדירים את מאפיין sourceFormat לערך AVRO כדי לציין את פורמט הנתונים של Avro.

  5. כדי לבדוק את סטטוס העבודה, מתקשרים אל jobs.get(job_id), כאשר job_id הוא מזהה העבודה שמוחזר על ידי הבקשה הראשונית.

    • אם התוצאה היא status.state = DONE, העבודה הושלמה בהצלחה.
    • אם מאפיין status.errorResult קיים, הבקשה נכשלה והאובייקט יכלול מידע שמתאר מה השתבש. אם הבקשה נכשלת, לא נוצרת טבלה ולא נטענים נתונים.
    • אם status.errorResult לא מופיע, סימן שהעבודה הסתיימה בהצלחה, למרות שאולי היו כמה שגיאות לא קריטיות, כמו בעיות בייבוא של כמה שורות. שגיאות לא קריטיות מפורטות במאפיין status.errors של אובייקט המשימה שמוחזר.

הערות לגבי ה-API:

  • משימות טעינה הן אטומיות ועקביות. אם משימת טעינה נכשלת, אף אחד מהנתונים לא זמין. אם משימת טעינה מצליחה, כל הנתונים זמינים.

  • מומלץ ליצור מזהה ייחודי ולהעביר אותו כ-jobReference.jobId כשמתקשרים אל jobs.insert כדי ליצור עבודת טעינה. הגישה הזו עמידה יותר בפני כשלים ברשת, כי הלקוח יכול לבצע בדיקה חוזרת או לנסות שוב באמצעות מזהה המשימה הידוע.

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

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// importAvro demonstrates loading Apache Avro data from Cloud Storage into a table.
func importAvro(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.avro")
	gcsRef.SourceFormat = bigquery.Avro
	loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)

	job, err := loader.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}

	if status.Err() != nil {
		return fmt.Errorf("job completed with error: %v", status.Err())
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FormatOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.LoadJobConfiguration;
import com.google.cloud.bigquery.TableId;

// Sample to load Avro data from Cloud Storage into a new BigQuery table
public class LoadAvroFromGCS {

  public static void runLoadAvroFromGCS() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.avro";
    loadAvroFromGCS(datasetName, tableName, sourceUri);
  }

  public static void loadAvroFromGCS(String datasetName, String tableName, String sourceUri) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);
      LoadJobConfiguration loadConfig =
          LoadJobConfiguration.of(tableId, sourceUri, FormatOptions.avro());

      // Load data from a GCS Avro file into the table
      Job job = bigquery.create(JobInfo.of(loadConfig));
      // Blocks until this load table job completes its execution, either failing or succeeding.
      job = job.waitFor();
      if (job.isDone()) {
        System.out.println("Avro from GCS successfully loaded in a table");
      } else {
        System.out.println(
            "BigQuery was unable to load into the table due to an error:"
                + job.getStatus().getError());
      }
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Column not added during load append \n" + e.toString());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the Avro file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.avro
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.avro';

async function loadTableGCSAvro() {
  // Imports a GCS file into a table with Avro source format.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';
  // const tableId = 'us_states';

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const jobConfigurationLoad = {
    load: {sourceFormat: 'AVRO'},
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), jobConfigurationLoad);

  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name

job_config = bigquery.LoadJobConfig(source_format=bigquery.SourceFormat.AVRO)
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.avro"

load_job = client.load_table_from_uri(
    uri, table_id, job_config=job_config
)  # Make an API request.

load_job.result()  # Waits for the job to complete.

destination_table = client.get_table(table_id)
print("Loaded {} rows.".format(destination_table.num_rows))

חילוץ נתוני JSON מנתוני Avro

יש שתי דרכים לוודא שנתוני Avro נטענים ל-BigQuery כנתוני JSON:

  1. מוסיפים הערה לסכימת Avro עם sqlType שמוגדר ל-JSON. לדוגמה, אם טוענים נתונים עם סכימת Avro הבאה, העמודה json_field נקראת כסוג JSON:

    {
        "type": {"type": "string", "sqlType": "JSON"},
        "name": "json_field"
    }
  2. מגדירים במפורש את הסכימה של טבלת היעד ב-BigQuery ומגדירים את סוג העמודה ל-JSON. מידע נוסף זמין במאמר בנושא ציון סכימה.

אם לא מציינים JSON כסוג בסכימת Avro או בסכימת הטבלה ב-BigQuery, הנתונים ייקראו כ-STRING.

הוספת נתונים לטבלה או החלפת הנתונים בטבלה באמצעות נתוני Avro

אפשר לטעון נתונים נוספים לטבלה מקובצי מקור או על ידי הוספת תוצאות של שאילתות.

במסוף Cloud de Confiance , משתמשים באפשרות Write preference כדי לציין איזו פעולה לבצע כשמעלים נתונים מקובץ מקור או מתוצאה של שאילתה.

כשמעלים נתונים נוספים לטבלה, יש לכם את האפשרויות הבאות:

אפשרות מסוף דגל של כלי bq מאפיין BigQuery API תיאור
כתיבה אם התא ריק לא נתמך WRITE_EMPTY הנתונים ייכתבו רק אם הטבלה ריקה.
הוספה לטבלה --noreplace או --replace=false; אם לא מצוין --[no]replace, ברירת המחדל היא append WRITE_APPEND ‫(Default) הנתונים מתווספים לסוף הטבלה.
החלפת הטבלה --replace או --replace=true WRITE_TRUNCATE מוחק את כל הנתונים הקיימים בטבלה לפני כתיבת הנתונים החדשים. הפעולה הזו מוחקת גם את סכימת הטבלה, את האבטחה ברמת השורה ומסירה כל מפתח Cloud KMS.

אם טוענים נתונים לטבלה קיימת, עבודת הטעינה יכולה לצרף את הנתונים או להחליף את הטבלה.

כדי לצרף נתונים בפורמט Avro לטבלה או להחליף את הנתונים בטבלה בנתונים בפורמט Avro:

המסוף

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

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז לוחצים על שם מערך הנתונים.

  4. בחלונית הפרטים, לוחצים על יצירת טבלה .

  5. בדף Create table, בקטע Source:

    • בקטע יצירת טבלה מ, בוחרים באפשרות Cloud Storage.
    • בשדה המקור, מעיינים או מזינים את URI של Cloud Storage. שימו לב: אי אפשר לכלול כמה מזהי URI במסוף Cloud de Confiance , אבל יש תמיכה בתווים כלליים. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שאתם מוסיפים או מחליפים.

      בחירת קובץ

    • בקטע פורמט קובץ, בוחרים באפשרות Avro.

  6. בדף יצירת טבלה, בקטע יעד:

    • בשדה Dataset name (שם קבוצת הנתונים), בוחרים את קבוצת הנתונים המתאימה.

      בחירת מערך נתונים

    • בשדה Table name [שם הטבלה], מזינים את שם הטבלה שרוצים להוסיף לה נתונים או להחליף אותה ב-BigQuery.

    • מוודאים שההגדרה של Table type היא Native table.

  7. בקטע Schema (סכימה), לא נדרשת פעולה. הסכימה מתוארת בעצמה בקובצי Avro.

  8. בקטע הגדרות של מחיצה ושל אשכול, משאירים את ערכי ברירת המחדל. אי אפשר להמיר טבלה לטבלה מחולקת או לטבלה מסודרת באשכולות על ידי הוספה או החלפה שלה, והמסוף Cloud de Confiance לא תומך בהוספה או בהחלפה של טבלאות מחולקות או טבלאות מסודרות באשכולות בעבודת טעינה.

  9. לוחצים על אפשרויות מתקדמות.

    • בקטע העדפת כתיבה, בוחרים באפשרות הוספה לטבלה או החלפת הטבלה.
    • כדי להגדיר ערכים לא ידועים, משאירים את התיבה התעלמות מערכים לא ידועים לא מסומנת. האפשרות הזו רלוונטית רק לקובצי CSV ו-JSON.
    • בקטע הצפנה, לוחצים על מפתח בניהול הלקוח כדי להשתמש במפתח של Cloud Key Management Service. אם לא משנים את ההגדרה Google Cloud-powered key,‏ BigQuery יצפין את הנתונים במנוחה.
  10. לוחצים על יצירת טבלה.

SQL

משתמשים בהצהרת DDL‏ LOAD DATA. בדוגמה הבאה, קובץ Avro מצורף לטבלה mytable:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    LOAD DATA INTO mydataset.mytable
    FROM FILES (
      format = 'avro',
      uris = ['gs://bucket/path/file.avro']);

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

מזינים את הפקודה bq load עם הדגל --replace כדי להחליף את הטבלה. משתמשים בדגל --noreplace כדי לצרף נתונים לטבלה. אם לא מציינים דגל, ברירת המחדל היא הוספת נתונים. מציינים את הדגל --source_format ומגדירים אותו לערך AVRO. סכימות Avro מאוחזרות אוטומטית מנתוני המקור שמתארים את עצמם, ולכן לא צריך לספק הגדרת סכימה.

(אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום.

דגלים אופציונליים אחרים:

  • --destination_kms_key: מפתח Cloud KMS להצפנה של נתוני הטבלה.
bq --location=location load \
--[no]replace \
--source_format=format \
dataset.table \
path_to_source

מחליפים את מה שכתוב בשדות הבאים:

דוגמאות:

הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.avro ומחליפה טבלה בשם mytable ב-mydataset.

    bq load \
    --replace \
    --source_format=AVRO \
    mydataset.mytable \
    gs://mybucket/mydata.avro

הפקודה הבאה טוענת נתונים מ-gs://mybucket/mydata.avro ומצרפת נתונים לטבלה בשם mytable ב-mydataset.

    bq load \
    --noreplace \
    --source_format=AVRO \
    mydataset.mytable \
    gs://mybucket/mydata.avro

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

API

  1. יוצרים משימת load שמפנה לנתוני המקור ב-Cloud Storage.

  2. (אופציונלי) מציינים את המיקום במאפיין location בקטע jobReference של משאב המשרה.

  3. המאפיין source URIs צריך להיות מוגדר באופן מלא, בפורמט gs://bucket/object. אפשר לכלול כמה כתובות URI כרשימה מופרדת בפסיקים. שימו לב: יש גם תמיכה בתווים כלליים לחיפוש.

  4. מגדירים את פורמט הנתונים באמצעות הנכס configuration.load.sourceFormat עם הערך AVRO.

  5. מגדירים את מאפיין configuration.load.writeDisposition לערך WRITE_TRUNCATE או WRITE_APPEND כדי לציין את העדפת הכתיבה.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// importAvroTruncate demonstrates loading Apache Avro data from Cloud Storage into a table
// and overwriting/truncating existing data in the table.
func importAvroTruncate(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.avro")
	gcsRef.SourceFormat = bigquery.Avro
	loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
	// Default for import jobs is to append data to a table.  WriteTruncate
	// specifies that existing data should instead be replaced/overwritten.
	loader.WriteDisposition = bigquery.WriteTruncate

	job, err := loader.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}

	if status.Err() != nil {
		return fmt.Errorf("job completed with error: %v", status.Err())
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FormatOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.LoadJobConfiguration;
import com.google.cloud.bigquery.TableId;

// Sample to overwrite the BigQuery table data by loading a AVRO file from GCS
public class LoadAvroFromGCSTruncate {

  public static void runLoadAvroFromGCSTruncate() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.avro";
    loadAvroFromGCSTruncate(datasetName, tableName, sourceUri);
  }

  public static void loadAvroFromGCSTruncate(
      String datasetName, String tableName, String sourceUri) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);
      LoadJobConfiguration loadConfig =
          LoadJobConfiguration.newBuilder(tableId, sourceUri)
              .setFormatOptions(FormatOptions.avro())
              // Set the write disposition to overwrite existing table data
              .setWriteDisposition(JobInfo.WriteDisposition.WRITE_TRUNCATE)
              .build();

      // Load data from a GCS Avro file into the table
      Job job = bigquery.create(JobInfo.of(loadConfig));
      // Blocks until this load table job completes its execution, either failing or succeeding.
      job = job.waitFor();
      if (job.isDone()) {
        System.out.println("Table is successfully overwritten by AVRO file loaded from GCS");
      } else {
        System.out.println(
            "BigQuery was unable to load into the table due to an error:"
                + job.getStatus().getError());
      }
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Column not added during load append \n" + e.toString());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the Avro file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.avro
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.avro';

async function loadTableGCSAvroTruncate() {
  /**
   * Imports a GCS file into a table and overwrites
   * table data if table already exists.
   */

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';
  // const tableId = 'us_states';

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const jobConfigurationLoad = {
    load: {
      sourceFormat: 'AVRO',
      writeDisposition: 'WRITE_TRUNCATE',
    },
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), jobConfigurationLoad);

  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import io

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name

job_config = bigquery.LoadJobConfig(
    schema=[
        bigquery.SchemaField("name", "STRING"),
        bigquery.SchemaField("post_abbr", "STRING"),
    ],
)

body = io.BytesIO(b"Washington,WA")
client.load_table_from_file(body, table_id, job_config=job_config).result()
previous_rows = client.get_table(table_id).num_rows
assert previous_rows > 0

job_config = bigquery.LoadJobConfig(
    write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE,
    source_format=bigquery.SourceFormat.AVRO,
)

uri = "gs://cloud-samples-data/bigquery/us-states/us-states.avro"
load_job = client.load_table_from_uri(
    uri, table_id, job_config=job_config
)  # Make an API request.

load_job.result()  # Waits for the job to complete.

destination_table = client.get_table(table_id)
print("Loaded {} rows.".format(destination_table.num_rows))

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

‫BigQuery תומך בטעינת נתוני Avro עם חלוקה למחיצות ב-Hive שמאוחסנים ב-Cloud Storage, ומאכלס את העמודות של החלוקה למחיצות ב-Hive כעמודות בטבלה המנוהלת של BigQuery ביעד. מידע נוסף זמין במאמר בנושא טעינת נתונים עם חלוקה חיצונית למחיצות מ-Cloud Storage.

המרות של Avro

‫BigQuery ממיר סוגי נתונים של Avro לסוגי הנתונים הבאים של BigQuery:

סוגים פרימיטיביים

סוג נתונים של Avro ללא מאפיין logicalType סוג נתונים ב-BigQuery הערות
null מערכת BigQuery מתעלמת מהערכים האלה
בוליאני בוליאני
int מספר שלם
ארוך מספר שלם
מספר ממשי (float) FLOAT
double FLOAT
בייטים BYTES
מחרוזת מחרוזת UTF-8 בלבד

סוגים לוגיים

כברירת מחדל, BigQuery מתעלם מהמאפיין logicalType ברוב הסוגים ומשתמש במקום זאת בסוג Avro הבסיסי. כדי להמיר סוגים לוגיים של Avro לסוגי הנתונים התואמים ב-BigQuery, צריך להגדיר את הדגל --use_avro_logical_types לערך true באמצעות כלי שורת הפקודה bq, או להגדיר את המאפיין useAvroLogicalTypes במשאב העבודה כשקוראים לשיטה jobs.insert כדי ליצור עבודת טעינה.

בטבלה הבאה מוצגת ההמרה של סוגים לוגיים של Avro לסוגי נתונים של BigQuery.

סוג לוגי של Avro סוג הנתונים ב-BigQuery: סוג לוגי מושבת סוג הנתונים ב-BigQuery: סוג לוגי מופעל
תאריך מספר שלם תאריך
time-millis מספר שלם שעות
time-micros מספר שלם (הומר מ-LONG) שעות
timestamp-millis מספר שלם (הומר מ-LONG) TIMESTAMP
timestamp-micros מספר שלם (הומר מ-LONG) TIMESTAMP
local-timestamp-millis מספר שלם (הומר מ-LONG) DATETIME
local-timestamp-micros מספר שלם (הומר מ-LONG) DATETIME
משך בייטים (הומרו מסוג fixed של מידה 12) בייטים (הומרו מסוג fixed של מידה 12)
עשרוני מספרי, מספרי גדול או מחרוזת (ראו סוג לוגי עשרוני) מספרי, מספרי גדול או מחרוזת (ראו סוג לוגי עשרוני)

מידע נוסף על סוגי נתונים של Avro זמין במפרט Apache Avro™ 1.8.2.

סוג לוגי של תאריך

בכל קובץ Avro שרוצים לטעון, צריך לציין את סוגי התאריכים הלוגיים בפורמט הבא:

{
       "type": {"logicalType": "date", "type": "int"},
       "name": "date_field"
}

סוג לוגי עשרוני

אפשר להמיר סוגים לוגיים Decimal לסוגים NUMERIC,‏ BIGNUMERIC או STRING. סוג ההמרה תלוי בפרמטרים של הדיוק והקנה מידה של הסוג הלוגי decimal ובסוגי היעד העשרוניים שצוינו. מציינים את סוג היעד העשרוני באופן הבא:

לצורך תאימות לאחור, אם לא מציינים את סוגי היעד העשרוניים, אפשר לטעון קובץ Avro שמכיל עמודה bytes עם הסוג הלוגי decimal לעמודה BYTES בטבלה קיימת. במקרה הזה, המערכת מתעלמת מהסוג הלוגי decimal בעמודה בקובץ Avro. מצב ההמרה הזה הוצא משימוש ויכול להיות שנסיר אותו בעתיד.

מידע נוסף על הסוג הלוגי Avro decimal זמין במפרט Apache Avro™ 1.8.2.

סוג לוגי של זמן

בכל קובץ Avro שרוצים לטעון, צריך לציין סוגים לוגיים של זמן באחד מהפורמטים הבאים.

לדיוק של אלפית השנייה:

{
       "type": {"logicalType": "time-millis", "type": "int"},
       "name": "time_millis_field"
}

לדיוק של מיקרו-שנייה:

{
       "type": {"logicalType": "time-micros", "type": "int"},
       "name": "time_micros_field"
}

סוג לוגי של חותמת זמן

בכל קובץ Avro שרוצים לטעון, צריך לציין סוגים לוגיים של חותמות זמן באחד מהפורמטים הבאים.

לדיוק של אלפית השנייה:

{
       "type": {"logicalType": "timestamp-millis", "type": "long"},
       "name": "timestamp_millis_field"
}

לדיוק של מיקרו-שנייה:

{
       "type": {"logicalType": "timestamp-micros", "type": "long"},
       "name": "timestamp_micros_field"
}

סוג לוגי Local-Timestamp

בכל קובץ Avro שרוצים לטעון, צריך לציין סוג לוגי של חותמת זמן מקומית באחד מהפורמטים הבאים.

לדיוק של אלפית השנייה:

{
       "type": {"logicalType": "local-timestamp-millis", "type": "long"},
       "name": "local_timestamp_millis_field"
}

לדיוק של מיקרו-שנייה:

{
       "type": {"logicalType": "local-timestamp-micros", "type": "long"},
       "name": "local_timestamp_micros_field"
}

סוגים מורכבים

סוג הנתונים Avro סוג נתונים ב-BigQuery הערות
להקליט רשומה
  • המערכת מתעלמת מכינויים
  • מסמך שהומר לתיאור שדה
  • ערכי ברירת המחדל מוגדרים בזמן הקריאה
  • המערכת מתעלמת מההזמנה
  • שדות רקורסיביים מושמטים – רק הרמה הראשונה של הקינון נשמרת בשדות רקורסיביים
enum מחרוזת
  • המחרוזת היא הערך הסימבולי של ה-enum
  • המערכת מתעלמת מכינויים
  • מסמך שהומר לתיאור שדה
מערך שדות חוזרים אין תמיכה במערכים של מערכים. המערכת מתעלמת ממערכים שמכילים רק סוגי NULL.
map<T> רשומה ‫BigQuery ממיר שדה של מפה<T> ב-Avro ל-RECORD חוזר שמכיל שני שדות: מפתח וערך. ‫BigQuery מאחסן את המפתח כ-STRING, וממיר את הערך לסוג הנתונים התואם שלו ב-BigQuery.
union
  • שדה שניתן להגדיר בו ערך null
  • RECORD עם רשימה של שדות שניתן להגדיר כ-nullable
  • אם באיחוד יש רק סוג אחד שאינו null, הוא מומר לשדה nullable.
  • אחרת, היא מומרת ל-RECORD עם רשימה של שדות שניתן להגדיר בהם ערך null. רק אחד מהשדות האלה יוגדר בזמן הקריאה.
קבוע BYTES
  • המערכת מתעלמת מכינויים
  • המערכת מתעלמת מהגודל