טעינת נתונים באצווה באמצעות Storage Write API (gRPC)
במאמר הזה מוסבר איך להשתמש ב-BigQuery Storage Write API (gRPC) כדי לטעון נתונים ב-BigQuery.
בתרחישים של טעינת נתונים באצווה, אפליקציה כותבת נתונים ומבצעת פעולת אישור (commit) כעסקה אטומית יחידה. כשמשתמשים ב-Storage Write API (gRPC) כדי לטעון נתונים באצווה, צריך ליצור זרם אחד או יותר בסוג בהמתנה. סוג העסקה 'בהמתנה' תומך בעסקאות ברמת הזרם. הנתונים נשמרים במאגר זמני במצב 'בהמתנה' עד שמבצעים פעולת אישור של הנתונים.
במקרים של עומסי עבודה של אצווה, כדאי גם להשתמש ב-Storage Write API (gRPC) דרך המחבר של Apache Spark SQL ל-BigQuery באמצעות Managed Service for Apache Spark, במקום לכתוב קוד מותאם אישית של Storage Write API (gRPC).
Storage Write API (gRPC) מתאים לארכיטקטורה של צינור נתונים. תהליך ראשי יוצר מספר זרמים. לכל מקור נתונים, המערכת מקצה Thread עובד או תהליך נפרד כדי לכתוב חלק מנתוני האצווה. כל תהליך עובד יוצר חיבור למקור הנתונים שלו, כותב נתונים ומסיים את מקור הנתונים שלו כשהוא מסיים. אחרי שכל העובדים מסמנים שהם סיימו את העבודה בהצלחה, התהליך הראשי מבצע את הנתונים. אם עובד נכשל, החלק של הנתונים שהוקצה לו לא יופיע בתוצאות הסופיות, ואפשר לנסות שוב את כל העובד בבטחה. בצינור נתונים מורכב יותר, העובדים מסמנים את ההתקדמות שלהם על ידי דיווח על ההיסט האחרון שנכתב לתהליך הראשי. הגישה הזו יכולה להניב צינור חזק ועמיד בפני כשלים.
טעינת נתונים באצווה באמצעות סוג בהמתנה
כדי להשתמש בסוג 'בהמתנה', האפליקציה מבצעת את הפעולות הבאות:
- מתקשרים אל
CreateWriteStreamכדי ליצור זרם אחד או יותר מסוג 'בהמתנה'. - לכל זרם, קוראים ל-
AppendRowsבלולאה כדי לכתוב קבוצות של רשומות. - לכל מקור נתונים, קוראים ל-
FinalizeWriteStream. אחרי שמפעילים את השיטה הזו, אי אפשר לכתוב עוד שורות לזרם. אם קוראים לפונקציהAppendRowsאחרי שקוראים לפונקציהFinalizeWriteStream, היא מחזירה את השגיאהStorageErrorעםStorageErrorCode.STREAM_FINALIZEDבשגיאהgoogle.rpc.Status. מידע נוסף על מודל השגיאותgoogle.rpc.Statusזמין במאמר בנושא שגיאות. - מתקשרים אל
BatchCommitWriteStreamsכדי לבצע את הסטרימינג. אחרי שמפעילים את השיטה הזו, הנתונים זמינים לקריאה. אם יש שגיאה בהעברת אחד מהסטרימינגים, השגיאה מוחזרת בשדהstream_errorsשלBatchCommitWriteStreamsResponse.
הוספה היא פעולה אטומית, ואפשר להוסיף כמה זרמים בו-זמנית. אפשר לבצע פעולת 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.