ציון עמודות ObjectRef בסכימות של טבלאות
עמודות ObjectRef מאפשרות לשלב נתונים לא מובְנים בטבלה רגילה של BigQuery, על ידי אחסון מטא-נתונים ופרטי חיבור של אובייקטים ב-Cloud Storage. לדוגמה, בטבלת מוצרים, אפשר לאחסן כל תמונת מוצר באותה שורה שבה נמצאים שאר פרטי המוצר.
במאמר הזה מוסבר איך להגדיר סכימת טבלה עם עמודות STRUCT שמשתמשות בפורמט ObjectRef. למידע נוסף על עבודה עם נתונים מולטי-מודאליים, ראו ניתוח נתונים מולטי-מודאליים והמדריך ניתוח נתונים מולטי-מודאליים באמצעות SQL.
דרישות מוקדמות
כדי לאכלס ולעדכן את הערכים של ObjectRef בטבלה רגילה, הטבלה צריכה להכיל עמודה של STRING עם פרטי ה-URI של האובייקטים הקשורים ב-Cloud Storage.
צריכה להיות לכם קטגוריה של Cloud Storage שמכילה את אותם אובייקטים שמזוהים בנתוני ה-URI של טבלת היעד הרגילה.
שמירה על ערכי ObjectRef
בכל טבלת אובייקטים שיוצרים יש עמודה ref שמכילה ערך ObjectRef לאובייקט הנתון. אם יש לכם טבלת אובייקטים קיימת, אתם יכולים לאחד אותה עם הטבלה הרגילה בעמודה של ה-URI של האובייקט כדי לאכלס ולעדכן את הערכים של ObjectRef. השיטה הזו יעילה יותר כי היא מונעת אחזור מחדש של מטא-נתונים מ-Cloud Storage כדי ליצור ערך ObjectRef חדש.
באופן דומה, אם כבר יש לכם מערך נתונים של Storage Insights למטא-נתונים של אובייקטים, אתם יכולים להשתמש בעמודה ref.uri או selfLink כדי לאחד את הטבלה הרגילה עם מערך הנתונים של Storage Insights, כדי לאכלס ולעדכן את הערכים של ObjectRef.
לערכי ObjectRef שנוצרו במערכי הנתונים של Storage Insights אין גורם מאשר. כדי לשלוח שאילתות לאובייקטים האלה, צריך גישה ישירה לאובייקט או להוסיף גורם מאשר ל-ObjectRef כדי להשתמש בגישה שהוקצתה.
אם אין לכם טבלת אובייקטים או מערך נתונים של Storage Insights, אתם יכולים להשתמש בפונקציה OBJ.MAKE_REF כדי לאכלס ולעדכן את הערכים של ObjectRef על ידי אחזור המטא-נתונים של האובייקטים ישירות מ-Cloud Storage. יכול להיות שהגישה הזו פחות ניתנת להתאמה לעומס, כי היא דורשת אחזור של מטא-נתונים של אובייקטים מ-Cloud Storage.
יצירת עמודה של ObjectRef
אפשר לאחסן ערכי ObjectRef בעמודות STRUCT שמשתמשות בפורמט ObjectRef, שהוא STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>.
כדי ליצור עמודת ObjectRef ולאכלס אותה בטבלה רגילה, בוחרים באחת מהאפשרויות הבאות:
פונקציות SQL
יוצרים עמודה של ObjectRef ומאכלסים אותה על סמך הפלט של הפונקציה OBJ.MAKE_REF:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME AS SELECT TABLE_NAME.*, OBJ.MAKE_REF(uri, 'CONNECTION_ID') AS objectrefcolumn FROM DATASET_ID.TABLE_NAME;
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט. אפשר לדלג על הארגומנט הזה אם יוצרים את הטבלה בפרויקט הנוכחי.-
DATASET_ID: המזהה של מערך הנתונים שאתם יוצרים. -
TABLE_NAME: שם הטבלה הרגילה שיוצרים מחדש. -
CONNECTION_ID: ערךSTRINGשמכיל קישור למשאבים ב-Cloud, שהשירות יכול להשתמש בו כדי לגשת לאובייקטים ב-Cloud Storage, בפורמטlocation.connection_id. לדוגמה,us-west1.myconnection. כדי לקבל את מזהה החיבור, מציגים את פרטי החיבור במסוף Google Cloud ומעתיקים את הערך בקטע האחרון של מזהה החיבור המלא שמוצג ב-Connection ID. לדוגמה,projects/myproject/locations/connection_location/connections/myconnection.אתם צריכים להקצות את התפקיד Storage Object User (
roles/storage.objectUser) לחשבון השירות של החיבור בכל קטגוריה של Cloud Storage שבה אתם משתמשים כדי לגשת לאובייקטים.החיבור צריך להיות באותו פרויקט ובאותו אזור כמו השאילתה שבה אתם קוראים לפונקציה.
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
טבלת אובייקטים
יוצרים עמודה מסוג ObjectRef ומאכלסים אותה בנתונים מעמודה ref בטבלת אובייקטים:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME AS SELECT TABLE_NAME.*, OBJECT_TABLE.ref AS objectrefcolumn FROM DATASET_ID.TABLE_NAME INNER JOIN DATASET_ID.OBJECT_TABLE ON OBJECT_TABLE.uri = TABLE_NAME.uri;
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט. אפשר לדלג על הארגומנט הזה אם יוצרים את הטבלה בפרויקט הנוכחי.-
DATASET_ID: המזהה של מערך הנתונים שאתם יוצרים. -
TABLE_NAME: שם הטבלה הרגילה שיוצרים מחדש. -
OBJECT_TABLE: השם של טבלת האובייקטים שמכילה את נתוני האובייקטים שרוצים לשלב בטבלה הרגילה.
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
יצירת עמודה של ARRAY<ObjectRef>
אפשר ליצור עמודת ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>> שתכיל מערכים של ערכי ObjectRef. לדוגמה, אפשר לחלק סרטון לתמונות נפרדות, ואז לאחסן את התמונות האלה כמערך של ערכי ObjectRef.
אפשר להשתמש בפונקציה ARRAY_AGG כדי לצבור מערכים של ערכי ObjectRef, כולל שימוש בסעיף ORDER BY כדי לשמור על סדר האובייקטים במקרה הצורך. אפשר להשתמש באופרטור UNNEST כדי לנתח מערך של ערכי ObjectRef לערכי ObjectRef נפרדים, כולל שימוש בסעיף WITH OFFSET כדי לשמור על סדר האובייקטים במקרה הצורך.
אתם יכולים להשתמש במטא-נתונים של אובייקטים, כמו נתיב ה-URI ושם הקובץ של האובייקט, כדי למפות ערכי ObjectRef שמייצגים מקטעי אובייקטים לערך ObjectRef שמייצג את האובייקט המקורי.
בקטע עיבוד נתונים מולטי-מודאליים מסודרים באמצעות ערכי ARRAY<ObjectRef> במדריך ניתוח נתונים מולטי-מודאליים באמצעות SQL מוסבר איך לעבוד עם מערכים של ערכי ObjectRef.
עדכון עמודה מסוג ObjectRef
כדי לעדכן עמודה של ObjectRef בטבלה רגילה, בוחרים אחת מהאפשרויות הבאות:
טבלת אובייקטים
עדכון עמודה ב-ObjectRef באמצעות נתונים מעמודה בטבלת אובייקטים ב-ref:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME SET objectrefcolumn = (SELECT ref FROM DATASET_ID.OBJECT_TABLE WHERE OBJECT_TABLE.uri = TABLE_NAME.uri) WHERE uri != "";
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט. אפשר לדלג על הארגומנט הזה אם יוצרים את הטבלה בפרויקט הנוכחי.-
DATASET_ID: המזהה של מערך הנתונים שאתם יוצרים. -
TABLE_NAME: שם הטבלה הרגילה שיוצרים מחדש. -
OBJECT_TABLE: השם של טבלת האובייקטים שמכילה את אותם נתוני אובייקטים כמו העמודהObjectRefבטבלה הרגילה.
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
פונקציות SQL
עדכון עמודה מסוג ObjectRef באמצעות פלט מהפונקציות OBJ.FETCH_METADATA ו-OBJ.MAKE_REF:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME SET objectrefcolumn = (SELECT OBJ.MAKE_REF(uri, 'CONNECTION_ID')) WHERE uri != "";
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט. אפשר לדלג על הארגומנט הזה אם יוצרים את הטבלה בפרויקט הנוכחי.-
DATASET_ID: המזהה של מערך הנתונים שאתם יוצרים. -
TABLE_NAME: שם הטבלה הרגילה שיוצרים מחדש. -
CONNECTION_ID: ערךSTRINGשמכיל קישור למשאבים ב-Cloud, שהשירות יכול להשתמש בו כדי לגשת לאובייקטים ב-Cloud Storage, בפורמטlocation.connection_id. לדוגמה,us-west1.myconnection. כדי לקבל את מזהה החיבור, מציגים את פרטי החיבור במסוף Google Cloud ומעתיקים את הערך בקטע האחרון של מזהה החיבור המלא שמוצג ב-Connection ID. לדוגמה,projects/myproject/locations/connection_location/connections/myconnection.אתם צריכים להקצות את התפקיד Storage Object User (
roles/storage.objectUser) לחשבון השירות של החיבור בכל קטגוריה של Cloud Storage שבה אתם משתמשים כדי לגשת לאובייקטים.החיבור צריך להיות באותו פרויקט ובאותו אזור כמו השאילתה שבה אתם קוראים לפונקציה.
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.