טעינת נתונים באצווה באמצעות Storage Write API
במאמר הזה מוסבר איך להשתמש ב-BigQuery Storage Write API כדי לטעון נתונים ל-BigQuery באצווה.
בתרחישים של טעינת נתונים באצווה, אפליקציה כותבת נתונים ומבצעת פעולת אישור (commit) כטרנזקציה אטומית אחת. כשמשתמשים ב-Storage Write API כדי לטעון נתונים באצווה, צריך ליצור זרם אחד או יותר בסוג pending. סוג ההמתנה תומך בעסקאות ברמת הזרם. הנתונים נשמרים בזיכרון הזמני במצב 'בהמתנה' עד שמבצעים פעולת אישור של הזרם.
במקרה של עומסי עבודה של אצווה, כדאי גם להשתמש ב-Storage Write API דרך מחבר Apache Spark SQL ל-BigQuery באמצעות Dataproc, במקום לכתוב קוד מותאם אישית של 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 לזרם רק פעם אחת, ולכן אם הפעולה נכשלת, אפשר לנסות אותה שוב. עד שמבצעים פעולת קומיט לזרם, הנתונים נמצאים בהמתנה ולא מוצגים בפעולות קריאה.
אחרי שהזרם מסתיים ולפני שהוא נשמר, הנתונים יכולים להישאר במאגר הזמני עד 4 שעות. צריך לאשר את הזרמים בהמתנה תוך 24 שעות. יש מכסת הגבלה על הגודל הכולל של מאגר הנתונים הזמני של הסטרימינג בהמתנה.
בדוגמת הקוד הבאה אפשר לראות איך לכתוב נתונים בסוג 'בהמתנה':
C#
מידע על התקנת ספריית הלקוח של BigQuery ושימוש בה מופיע במאמר ספריות הלקוח של BigQuery. מידע נוסף מופיע במאמרי העזרה של BigQuery C# API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Go
מידע על התקנת ספריית הלקוח של 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.