在資料表結構定義中指定 ObjectRef 欄

本文說明如何定義 BigQuery 標準資料表結構定義,並使用可儲存 ObjectRef 值的資料欄。

ObjectRef 值提供 Cloud Storage 中物件的中繼資料和連線資訊。如要將非結構化資料整合至標準資料表,請使用 ObjectRef 值。舉例來說,在產品資料表中,您可以新增包含 ObjectRef 值的資料欄,將產品圖片與其他產品資訊儲存在同一列。您可以在使用 ObjectRef 格式STRUCT 欄中儲存 ObjectRef 值,也就是 STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>

如要進一步瞭解如何使用多模態資料,請參閱「分析多模態資料」。 如需瞭解如何處理 ObjectRef 資料的教學課程,請參閱「使用 SQL 分析多模態資料」。

必要條件

如要在標準資料表中填入及更新 ObjectRef 值,資料表必須有 STRING 資料欄,其中包含相關 Cloud Storage 物件的 URI 資訊。

您必須擁有 Cloud Storage bucket,其中包含目標標準資料表 URI 資料中識別的相同物件。

維持 ObjectRef

您建立的任何物件資料表都有 ref 欄,其中包含指定物件的 ObjectRef 值。如果您有現有的物件資料表,可以透過物件 URI 資料欄與標準資料表聯結,填入及更新 ObjectRef 值。這樣做更有效率,因為可避免從 Cloud Storage 重新擷取中繼資料,以建立新的 ObjectRef 值。

同樣地,如果您已有物件中繼資料的儲存空間分析資料集,則可以使用 ref.uriselfLink 資料欄,將標準資料表與儲存空間分析資料集聯結,以填入及更新 ObjectRef 值。在儲存空間分析資料集中建立的任何 ObjectRef 值都沒有授權者。如要查詢這些物件,您必須直接存取物件,或在 ObjectRef 中新增授權者,以使用委派存取權

如果沒有現有的物件資料表或儲存空間分析資料集,可以使用 OBJ.MAKE_REF 函式,直接從 Cloud Storage 擷取物件中繼資料,以填入及更新 ObjectRef 值。這種做法可能較不具擴充性,因為需要從 Cloud Storage 擷取物件中繼資料。

建立 ObjectRef

如要在標準資料表中建立及填入 ObjectRef 資料欄,請選取下列其中一個選項:

SQL 函式

根據 OBJ.MAKE_REF 函式的輸出內容,建立並填入 ObjectRef 資料欄:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中輸入下列陳述式:

    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:專案 ID。如果您要在目前的專案中建立資料表,可以略過這個引數。
    • DATASET_ID:您要建立的資料集 ID。
    • TABLE_NAME:您要重建的標準資料表名稱。
    • CONNECTION_IDSTRING 值,其中包含服務可用來存取 Cloud Storage 中物件的 Cloud 資源連結,格式為 location.connection_id。例如:us-west1.myconnection。如要取得連線 ID,請在 Google Cloud 控制台中查看連線詳細資料,然後複製「連線 ID」中顯示的完整連線 ID 最後一個部分的值。例如:projects/myproject/locations/connection_location/connections/myconnection

      您必須在任何 Cloud Storage bucket 上,將「Storage 物件使用者」roles/storage.objectUser角色授予連線的服務帳戶,才能使用該帳戶存取物件。

      連線必須與您呼叫函式的查詢位於相同專案和區域。

  3. 按一下 執行

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。

物件資料表

根據物件資料表 ref 欄中的資料,建立並填入 ObjectRef 欄:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中輸入下列陳述式:

    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:專案 ID。如果您要在目前的專案中建立資料表,可以略過這個引數。
    • DATASET_ID:您要建立的資料集 ID。
    • TABLE_NAME:您要重建的標準資料表名稱。
    • OBJECT_TABLE:物件資料表名稱,內含要整合至標準資料表的物件資料。

  3. 按一下 執行

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。

建立 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 值。

如要查看如何處理 ObjectRef 值陣列的範例,請參閱「使用 SQL 分析多模態資料」教學課程的「使用 ARRAY<ObjectRef> 值處理排序的多模態資料」一節。

更新 ObjectRef

如要更新標準表格中的 ObjectRef 欄,請選取下列其中一個選項:

物件資料表

使用物件資料表 ref 欄中的資料更新 ObjectRef 欄:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中輸入下列陳述式:

    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:專案 ID。如果您要在目前的專案中建立資料表,可以略過這個引數。
    • DATASET_ID:您要建立的資料集 ID。
    • TABLE_NAME:您要重建的標準資料表名稱。
    • OBJECT_TABLE:物件資料表名稱,其中包含與標準資料表 ObjectRef 欄相同的物件資料。

  3. 按一下 執行

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。

SQL 函式

使用 OBJ.FETCH_METADATAOBJ.MAKE_REF 函式的輸出內容更新 ObjectRef 欄:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中輸入下列陳述式:

    UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME
    SET objectrefcolumn = (SELECT OBJ.MAKE_REF(uri, 'CONNECTION_ID'))
    WHERE uri != "";

    請替換下列項目:

    • PROJECT_ID:專案 ID。如果您要在目前的專案中建立資料表,可以略過這個引數。
    • DATASET_ID:您要建立的資料集 ID。
    • TABLE_NAME:您要重建的標準資料表名稱。
    • CONNECTION_IDSTRING 值,其中包含服務可用來存取 Cloud Storage 中物件的 Cloud 資源連結,格式為 location.connection_id。例如:us-west1.myconnection。如要取得連線 ID,請在 Google Cloud 控制台中查看連線詳細資料,然後複製「連線 ID」中顯示的完整連線 ID 最後一個部分的值。例如:projects/myproject/locations/connection_location/connections/myconnection

      您必須在任何 Cloud Storage bucket 上,將「Storage 物件使用者」roles/storage.objectUser角色授予連線的服務帳戶,才能使用該帳戶存取物件。

      連線必須與您呼叫函式的查詢位於相同專案和區域。

  3. 按一下 執行

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。

後續步驟