טעינת נתונים באצווה באמצעות Storage Write API (gRPC)
במאמר הזה מוסבר איך להשתמש ב-BigQuery Storage Write API (gRPC) כדי לטעון נתונים ב-BigQuery.
בתרחישים של טעינת נתונים באצווה, אפליקציה כותבת נתונים ומבצעת commit שלהם כטרנזקציה אטומית אחת. כשמשתמשים ב-Storage Write API (gRPC) כדי לטעון נתונים באצווה, צריך ליצור זרם אחד או יותר בסוג בהמתנה. סוג הסטטוס 'בהמתנה' תומך בעסקאות ברמת הסטרימינג. הרשומות נשמרות בזיכרון המטמון במצב 'בהמתנה' עד שמבצעים פעולת אישור (commit) של הזרם.
במקרים של עומסי עבודה באצווה, כדאי גם להשתמש ב-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 היא פעולה אטומית, ואפשר לבצע 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.