טעינת נתונים מקובצי ייצוא של Firestore
ב-BigQuery אפשר לטעון נתונים מקובצי ייצוא של Firestore שנוצרו באמצעות שירות הייבוא והייצוא המנוהל של Firestore. שירות הייבוא והייצוא המנוהל מייצא מסמכי Firestore לקטגוריה של Cloud Storage. אחר כך אפשר לטעון את הנתונים שיוצאו לטבלה ב-BigQuery.
מגבלות
כשאתם טוענים נתונים ל-BigQuery מייצוא של Firestore, שימו לב למגבלות הבאות:
- קבוצת הנתונים צריכה להיות באותו מיקום של קטגוריה של Cloud Storage שמכילה את קובצי הייצוא.
- אפשר לציין רק URI אחד של Cloud Storage, ואי אפשר להשתמש בתו כללי לחיפוש ב-URI.
- כדי שייצוא של Firestore ייטען בצורה נכונה, המסמכים בנתוני הייצוא צריכים להיות בעלי סכימה עקבית עם פחות מ-10,000 שמות ייחודיים של שדות.
- אפשר ליצור טבלה חדשה לאחסון הנתונים, או להחליף טבלה קיימת. אי אפשר לצרף נתוני ייצוא של Firestore לטבלה קיימת.
- בפקודת הייצוא צריך לציין מסנן
collection-ids. אי אפשר לטעון ל-BigQuery נתונים שיוצאו בלי לציין מסנן של מזהה אוסף.
לפני שמתחילים
להקצות תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים למשתמשים את ההרשאות הנדרשות כדי לבצע כל משימה שמופיעה במסמך הזה.
ההרשאות הנדרשות
כדי לטעון נתונים ל-BigQuery, אתם צריכים הרשאות IAM להרצת משימת טעינה ולטעינת נתונים לטבלאות ב-BigQuery ולמחיצות. אם אתם טוענים נתונים מ-Cloud Storage, אתם צריכים גם הרשאות IAM כדי לגשת לקטגוריה שמכילה את הנתונים.
הרשאות לטעינת נתונים ל-BigQuery
כדי לטעון נתונים לטבלה או למחיצה חדשה ב-BigQuery, או כדי להוסיף או להחליף טבלה או מחיצה קיימת, צריך את הרשאות ה-IAM הבאות:
bigquery.tables.createbigquery.tables.updateDatabigquery.tables.updatebigquery.jobs.create
כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאות שצריך כדי לטעון נתונים לטבלה או למחיצה ב-BigQuery:
roles/bigquery.dataEditorroles/bigquery.dataOwner-
roles/bigquery.admin(כולל את ההרשאהbigquery.jobs.create) -
bigquery.user(כולל את ההרשאהbigquery.jobs.create) -
bigquery.jobUser(כולל את ההרשאהbigquery.jobs.create)
בנוסף, אם יש לכם את ההרשאה bigquery.datasets.create, אתם יכולים ליצור ולעדכן טבלאות באמצעות משימת טעינה בקבוצות הנתונים שאתם יוצרים.
למידע נוסף על תפקידים והרשאות של IAM ב-BigQuery, קראו את המאמר תפקידים והרשאות מוגדרים מראש.
הרשאות לטעינת נתונים מ-Cloud Storage
כדי לקבל את ההרשאות שנדרשות לטעינת נתונים מקטגוריה של Cloud Storage, בקשו מהאדמין לתת לכם את התפקיד אדמין של אחסון (roles/storage.admin) ב-IAM בקטגוריה.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות לטעינת נתונים מקטגוריה של Cloud Storage. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לטעון נתונים מקטגוריה של Cloud Storage, נדרשות ההרשאות הבאות:
-
storage.buckets.get -
storage.objects.get -
storage.objects.list (required if you are using a URI wildcard)
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
טעינת נתונים של שירות הייצוא של Firestore
אפשר לטעון נתונים מקובץ מטא-נתונים של ייצוא מ-Firestore באמצעות מסוף Google Cloud , כלי שורת הפקודה של BigQuery או API.
לפעמים משתמשים בטרמינולוגיה של Datastore במסוף Google Cloud ובכלי שורת הפקודה של BigQuery, אבל התהליכים הבאים תואמים לקובצי הייצוא של Firestore. ל-Firestore ול-Datastore יש פורמט ייצוא משותף.
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
- בחלונית הימנית, לוחצים על Explorer.
- בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
- בקטע Dataset info, לוחצים על Create table.
- בחלונית Create table, מציינים את הפרטים הבאים:
- בקטע Source, בוחרים באפשרות Google Cloud Storage ברשימה Create table from.
לאחר מכן, מבצעים את הפעולות הבאות:
- בוחרים קובץ מהקטגוריה של Cloud Storage או מזינים את ה-URI של Cloud Storage.
אי אפשר לכלול כמה מזהי URI במסוף Google Cloud , אבל יש תמיכה בתווים כלליים לחיפוש. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה.
ה-URI של קובץ הייצוא של Firestore צריך להסתיים ב-KIND_COLLECTION_ID.export_metadata. לדוגמה, בנתיבdefault_namespace_kind_Book.export_metadata, Bookהוא מזהה האוסף ו-default_namespace_kind_Bookהוא שם הקובץ שנוצר על ידי Firestore. אם ה-URI לא מסתיים ב-KIND_COLLECTION_ID.export_metadata, תופיע הודעת השגיאה הבאה: does not contain valid backup metadata. (קוד שגיאה: לא תקין).
- בשדה פורמט קובץ, בוחרים באפשרות Cloud Datastore Backup. Firestore ו-Datastore משתפים את פורמט הייצוא.
- בוחרים קובץ מהקטגוריה של Cloud Storage או מזינים את ה-URI של Cloud Storage.
אי אפשר לכלול כמה מזהי URI במסוף Google Cloud , אבל יש תמיכה בתווים כלליים לחיפוש. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה.
- בקטע Destination, מציינים את הפרטים הבאים:
- בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
- בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
- מוודאים שהשדה Table type מוגדר ל-Native table.
- בקטע Schema, לא צריך לעשות כלום. הסכימה נגזרת מייצוא מ-Firestore.
- אופציונלי: מציינים את הגדרות המחיצה והאשכול. מידע נוסף זמין במאמרים יצירת טבלאות מחולקות למחיצות ויצירה של טבלאות מסודרות באשכולות ושימוש בהן.
- לוחצים על אפשרויות מתקדמות ומבצעים את הפעולות הבאות:
- בשדה Write preference, משאירים את האפשרות Write if empty מסומנת. This option creates a new table and loads your data into it.
- אם רוצים להתעלם מערכים בשורה שלא קיימים בסכימה של הטבלה, בוחרים באפשרות Unknown values.
- בקטע Encryption, לוחצים על Customer-managed key כדי להשתמש במפתח של Cloud Key Management Service. אם משאירים את ההגדרה Google-managed key, הנתונים מוצפנים במצב מנוחה ב-BigQuery.
- לוחצים על Create table.
BQ
משתמשים בפקודה bq load עם הערך DATASTORE_BACKUP ב-source_format.
מציינים את הדגל --location ומגדירים את הערך למיקום שלכם. אם אתם מחליפים טבלה קיימת, הוסיפו את הדגל --replace.
כדי לטעון רק שדות ספציפיים, משתמשים בדגל --projection_fields.
bq --location=LOCATION load \
--source_format=FORMAT \
DATASET.TABLE \
PATH_TO_SOURCE
מחליפים את מה שכתוב בשדות הבאים:
-
LOCATION: המיקום שלכם. הדגל--locationהוא אופציונלי. FORMAT:DATASTORE_BACKUP. Datastore Backup היא האפשרות הנכונה ל-Firestore. ל-Firestore ול-Datastore יש פורמט ייצוא משותף.-
DATASET: קבוצת הנתונים שמכילה את הטבלה שאליה אתם טוענים נתונים. -
TABLE: הטבלה שאליה אתם טוענים נתונים. אם הטבלה לא קיימת, היא נוצרת. -
PATH_TO_SOURCE: ה-URI של Cloud Storage.
לדוגמה, הפקודה הבאה טוענת את קובץ הייצוא של Firestore gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata לטבלה בשם book_data.
mybucket ו-mydataset נוצרו במיקום US שכולל מספר אזורים.
bq --location=US load \
--source_format=DATASTORE_BACKUP \
mydataset.book_data \
gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata
API
כדי לטעון נתוני ייצוא של Firestore באמצעות ה-API, מגדירים את המאפיינים הבאים:
יוצרים הגדרת משימה ב-
loadשמפנה לנתוני המקור ב-Cloud Storage.מציינים את המיקום במאפיין
locationבקטעjobReferenceשל משאב המשימה.השדה
sourceUrisצריך להיות מלא, בפורמטgs://BUCKET/OBJECTבהגדרות של משימת הטעינה. שם הקובץ (האובייקט) חייב להסתיים ב-KIND_NAME.export_metadata. אפשר להשתמש רק ב-URI אחד לייצוא של Firestore, ואי אפשר להשתמש בתו כללי לחיפוש.מציינים את פורמט הנתונים על ידי הגדרת המאפיין
sourceFormatלערךDATASTORE_BACKUPבהגדרות האישיות של משימת הטעינה. Datastore Backup היא האפשרות הנכונה ל-Firestore. ל-Firestore ול-Datastore יש פורמט ייצוא משותף.כדי לטעון רק שדות ספציפיים, מגדירים את המאפיין
projectionFields.אם אתם מחליפים טבלה קיימת, ציינו את אופן הכתיבה על ידי הגדרת המאפיין
writeDispositionלערךWRITE_TRUNCATE.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
אפשרויות ב-Firestore
כדי לשנות את האופן שבו BigQuery מנתח את נתוני הייצוא של Firestore, צריך לציין את האפשרות הבאה:
| אפשרות מסוףGoogle Cloud | דגל `bq` | נכס BigQuery API | תיאור |
|---|---|---|---|
| לא זמין | --projection_fields |
projectionFields
(Java,
Python) |
(אופציונלי) רשימה מופרדת בפסיקים שמציינת אילו שדות של מסמכים לטעון מייצוא של Firestore. כברירת מחדל, BigQuery טוען את כל השדות. שמות השדות הם תלויי אותיות רישיות (case-sensitive) וחייבים להופיע בייצוא. אי אפשר לציין נתיבי שדות בתוך שדה מפה כמו map.foo.
|
המרת סוג נתונים
BigQuery ממיר נתונים מכל מסמך בקובצי הייצוא של Firestore לסוגי נתונים של BigQuery. בטבלה הבאה מתוארת ההמרה בין סוגי הנתונים הנתמכים.
| סוג הנתונים ב-Firestore | סוג הנתונים ב-BigQuery |
|---|---|
| מערך | רשומה |
| בוליאני | בוליאני |
| חומרי עזר | רשומה |
| תאריך ושעה | TIMESTAMP |
| מפה | רשומה |
| מספר בשיטת נקודה צפה | FLOAT |
| נקודה גיאוגרפית |
רשומה [{"lat","FLOAT"},
{"long","FLOAT"}]
|
| מספר שלם | מספר שלם |
| String | STRING (נחתך ל-64KB) |
מאפייני מפתח ב-Firestore
לכל מסמך ב-Firestore יש מפתח ייחודי שמכיל מידע כמו מזהה המסמך והנתיב שלו.
BigQuery יוצר סוג נתונים RECORD (שנקרא גם STRUCT) למפתח, עם שדות בתצוגת עץ לכל פריט מידע, כמו שמתואר בטבלה הבאה.
| מאפיין מפתח | תיאור | סוג הנתונים ב-BigQuery |
|---|---|---|
__key__.app |
שם האפליקציה ב-Firestore. | מחרוזת |
__key__.id |
מזהה המסמך, או null אם __key__.name
מוגדר. |
מספר שלם |
__key__.kind |
מזהה האוסף של המסמך. | מחרוזת |
__key__.name |
שם המסמך, או null אם מוגדר __key__.id. |
מחרוזת |
__key__.namespace |
ב-Firestore אין תמיכה במרחבי שמות בהתאמה אישית. מרחב השמות שמוגדר כברירת מחדל מיוצג על ידי מחרוזת ריקה. | מחרוזת |
__key__.path |
הנתיב של המסמך: רצף המסמכים וזוגות האוספים מאוסף הבסיס. לדוגמה: "Country",
"USA", "PostalCode", 10011, "Route", 1234. |
מחרוזת |