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