טעינת נתונים באצווה באמצעות Storage Write API
במאמר הזה מוסבר איך להשתמש ב-BigQuery Storage Write API כדי לטעון נתונים ל-BigQuery באצוות.
בתרחישים של טעינת נתונים באצווה, אפליקציה כותבת נתונים ומבצעת פעולת אישור (commit) כטרנזקציה אטומית אחת. כשמשתמשים ב-Storage Write API כדי לטעון נתונים באצווה, צריך ליצור זרם אחד או יותר בסוג בהמתנה. סוג העסקה 'בהמתנה' תומך בעסקאות ברמת הזרם. הנתונים נשמרים במאגר זמני במצב 'בהמתנה' עד שמבצעים פעולת אישור של הזרם.
במקרים של עומסי עבודה של אצווה, כדאי גם להשתמש ב-Storage Write API באמצעות המחבר של Apache Spark SQL ל-BigQuery באמצעות Managed Service for Apache Spark, במקום לכתוב קוד מותאם אישית של Storage Write API.
Storage Write API מתאים לארכיטקטורה של צינור נתונים. תהליך ראשי יוצר מספר זרמים. לכל מקור נתונים, המערכת מקצה Thread עובד או תהליך נפרד כדי לכתוב חלק מנתוני האצווה. כל תהליך עובד יוצר חיבור למקור הנתונים שלו, כותב נתונים ומסיים את מקור הנתונים שלו כשהוא מסיים. אחרי שכל העובדים מסמנים שהם סיימו את העבודה בהצלחה, התהליך הראשי מבצע את הנתונים. אם עובד נכשל, החלק של הנתונים שהוקצה לו לא יופיע בתוצאות הסופיות, ואפשר לנסות שוב את כל העובד בבטחה. בצינור נתונים מורכב יותר, העובדים מסמנים את ההתקדמות שלהם על ידי דיווח על ההיסט האחרון שנכתב לתהליך הראשי. הגישה הזו יכולה להוביל לצינור חזק ועמיד בפני כשלים.
טעינת נתונים באצווה באמצעות סוג בהמתנה
כדי להשתמש בסוג 'בהמתנה', האפליקציה מבצעת את הפעולות הבאות:
- מתקשרים למספר
CreateWriteStreamכדי ליצור ערוץ אחד או יותר מסוג 'בהמתנה'. - לכל זרם, קוראים ל-
AppendRowsבלולאה כדי לכתוב קבוצות של רשומות. - לכל מקור נתונים, קוראים ל-
FinalizeWriteStream. אחרי שמפעילים את השיטה הזו, אי אפשר לכתוב עוד שורות לזרם. אם קוראים לפונקציהAppendRowsאחרי שקוראים לפונקציהFinalizeWriteStream, היא מחזירה את השגיאהStorageErrorעםStorageErrorCode.STREAM_FINALIZEDבשגיאהgoogle.rpc.Status. מידע נוסף על מודל השגיאותgoogle.rpc.Statusזמין במאמר בנושא שגיאות. - מתקשרים אל
BatchCommitWriteStreamsכדי לבצע את הסטרימינג. אחרי שמפעילים את השיטה הזו, הנתונים זמינים לקריאה. אם יש שגיאה בהעברת אחד מהסטרימינגים, השגיאה מוחזרת בשדהstream_errorsשלBatchCommitWriteStreamsResponse.
הפעולה commit היא פעולה אטומית, ואפשר לבצע commit לכמה זרמים בו-זמנית. אפשר לבצע פעולת Commit לזרם רק פעם אחת, ולכן אם הפעולה נכשלת, אפשר לנסות אותה שוב. עד שמבצעים פעולת קומיט לזרם, הנתונים נמצאים בהמתנה ולא מוצגים בפעולות קריאה.
אחרי שהסטרימינג מסתיים ולפני שהנתונים נשמרים, הם יכולים להישאר במאגר הזמני עד 4 שעות. צריך לאשר את הזרמים בהמתנה תוך 24 שעות. יש מכסת הגבלה על הגודל הכולל של מאגר הנתונים הזמני של הסטרימינג בהמתנה.
בדוגמת הקוד הבאה אפשר לראות איך לכתוב נתונים בסוג 'בהמתנה':
C#
מידע על התקנת ספריית הלקוח של BigQuery ושימוש בה מופיע במאמר ספריות הלקוח של BigQuery. מידע נוסף מופיע במאמרי העזרה של BigQuery C# API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
המשך
מידע על התקנת ספריית הלקוח של BigQuery ושימוש בה מופיע במאמר ספריות הלקוח של BigQuery. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Java
מידע על התקנת ספריית הלקוח של BigQuery ושימוש בה מופיע במאמר ספריות הלקוח של BigQuery. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Node.js
מידע על התקנת ספריית הלקוח של BigQuery ושימוש בה מופיע במאמר ספריות הלקוח של BigQuery. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Python
בדוגמה הזו מוצגת רשומה פשוטה עם שני שדות. דוגמה ארוכה יותר שבה מוצג איך לשלוח סוגים שונים של נתונים, כולל סוגים של STRUCT, אפשר לראות בדוגמה append_rows_proto2 ב-GitHub.
מידע על התקנת ספריית הלקוח של BigQuery ושימוש בה מופיע במאמר ספריות הלקוח של BigQuery. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
דוגמת הקוד הזו תלויה במודול פרוטוקול שעבר קומפילציה, customer_record_pb2.py. כדי ליצור את המודול שעבר קומפילציה, מריצים את הפקודה protoc --python_out=. customer_record.proto, כאשר protoc הוא קומפיילר של מאגר אחסון לפרוטוקולים. קובץ customer_record.proto מגדיר את הפורמט של ההודעות שמשמשות בדוגמה של Python.