物件資料表簡介
本文件說明物件資料表,這是位於 Cloud Storage 中的非結構化資料物件上的唯讀資料表。
物件資料表可讓您分析 Cloud Storage 中的非結構化資料。您可以使用遠端函式執行分析,或使用 BigQuery ML 執行推論,然後將這些作業的結果與 BigQuery 中的其他結構化資料彙整。
與 BigLake 資料表一樣,物件資料表會使用存取權委派功能,將物件資料表的存取權與 Cloud Storage 物件的存取權分開。與服務帳戶相關聯的外部連線會用來連線至 Cloud Storage,因此您只需授予使用者物件資料表的存取權。這樣一來,您就能強制執行資料列層級安全性,並管理使用者可存取的物件。
物件資料表結構定義
物件資料表會針對指定 Cloud Storage 值區中的非結構化資料物件提供中繼資料索引。表格的每個資料列都對應至一個物件,而表格欄則對應至 Cloud Storage 產生的物件中繼資料,包括任何自訂中繼資料。
物件表也包含 data
虛擬欄,用於以原始位元組表示檔案內容,並在建立物件表時自動填入。當您對圖像資料執行推論時,ML.DECODE_IMAGE
函式會使用這個偽欄。您無法在查詢中加入 data
虛擬資料欄,且該欄不會顯示在物件資料表結構定義中。
下表說明物件資料表使用的固定結構定義:
欄位名稱 | 類型 | 眾數 | 說明 |
---|---|---|---|
uri | STRING | NULLABLE | uri :物件的統一資源識別碼 (URI),格式為 gs://bucket_name/[folder_name/]object_name 。 |
generation | INTEGER | NULLABLE | 此物件的產生世代,用於識別物件版本。 |
content_type | STRING | NULLABLE | 物件資料的 Content-Type,用於識別媒體類型。如果物件儲存時沒有指定 Content-Type,系統會以 application/octet-stream 提供。 |
size | INTEGER | NULLABLE | 資料的 Content-Length (以位元組為單位)。 |
md5_hash | STRING | NULLABLE | 資料的 MD5 雜湊,使用 base64 編碼。如要進一步瞭解如何使用 MD5 雜湊,請參閱 Cloud Storage 物件中繼資料。 |
updated | TIMESTAMP | NULLABLE | 上次修改物件中繼資料的時間。 |
metadata | RECORD | REPEATED | 物件的自訂中繼資料。每個中繼資料都會以鍵值組合的形式,顯示在 metadata 欄位的子項 (metadata.)name 和 (metadata.)value 欄位中。 |
(metadata.)name | STRING | NULLABLE | 輸入個別中繼資料項目。 |
(metadata.)value | STRING | NULLABLE | 個別中繼資料項目中的值。 |
ref | STRUCT | NULLABLE | Google 管理的 Cloud Storage 中繼資料,以 ObjectRef 格式儲存。(預先發布版) 您可以使用這個資料欄在標準表格中維護 ObjectRef 值。ObjectRef 值可讓您將物件資料與結構化資料整合。只有在您加入多模資料預覽許可清單時,系統才會建立這個資料欄。 |
物件表中的資料列如下所示:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| uri | generation | content_type | size | md5_hash | updated | metadata...name | metadata...value | ref.uri | ref.version | ref.authorizer | ref.details |
—----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| gs://mybucket/a.jpeg | 165842… | image/jpeg | 26797 | 8c33be10f… | 2022-07-21 17:35:40.148000 UTC | null | null | gs://mybucket/a.jpeg | 12345678 | us.conn | {"gcs_metadata":{"content_type":"image/jpeg","md5_hash"… |
—----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| gs://mybucket/b.bmp | 305722… | image/bmp | 57932 | 44eb90cd1… | 2022-05-14 12:09:38.114000 UTC | null | null | gs://mybucket/b.bmp | 23456789 | us.conn | {"gcs_metadata":{"content_type":"image/bmp","md5_hash"… |
—----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
用途
您可以使用查詢其他 BigQuery 資料表的方式,查詢物件資料表中的中繼資料。不過,物件表的主要用途是讓非結構化資料可供分析。您可以使用 BigQuery ML 搭配 TensorFlow、TensorFlow Lite 和 PyTorch 模型,在圖像物件資料表上執行推論。您也可以使用遠端函式,以任何方式分析非結構化資料。舉例來說,您可以建立遠端函式,讓您使用 Cloud Vision 分析圖片,或是使用 Apache Tika 從 PDF 文件擷取中繼資料。
下表說明可用於針對物件資料表資料進行機器學習的整合點:
整合 | 說明 | 用途 | 教學課程 |
---|---|---|---|
ML.GENERATE_TEXT 函式 | 使用 Vertex AI、合作夥伴或開放原始碼模型產生文字。 | 您想根據物件資料產生文字。 | 使用 ML.GENERATE_TEXT 函式產生文字 |
ML.GENERATE_EMBEDDING 函式 | 使用 Vertex AI 多模態模型產生嵌入。 | 您想為影片或圖片資料產生嵌入項目,以便在向量搜尋、模型輸入或其他用途中使用。 | 使用 ML.GENERATE_EMBEDDING 函式產生圖片嵌入項目使用 ML.GENERATE_EMBEDDING 函式產生影片嵌入項目 |
匯入的 BigQuery ML 模型 | 將 TensorFlow、TensorFlow Lite 或 ONNX 模型匯入 BigQuery ML,即可在 BigQuery 中執行本機推論。 | 您使用的是符合支援限制的開放原始碼或自訂模型。 | 教學課程:使用特徵向量模型,針對物件資料表執行推論 |
Cloud Run functions | 使用 Cloud Run 函式呼叫服務或代管模型。這是最常見的整合方式。 | 您在 Compute Engine、Google Kubernetes Engine 或其他客戶擁有的基礎架構上自行代管模型。 | |
ML.ANNOTATE_IMAGE 函式 | 使用 Cloud Vision API 為圖片加上註解。 | 您想使用 Vision API 預先訓練模型為圖片加上註解。 | 使用 ML.ANNOTATE_IMAGE 函式為圖片加上註解 |
ML.PROCESS_DOCUMENT 函式 | 使用 Document AI API 擷取文件洞察資訊。 | 您想使用 Document AI 預先訓練或自訂的文件處理器。 | 使用 ML.PROCESS_DOCUMENT 函式處理文件 |
ML.TRANSCRIBE 函式 | 使用 Speech-to-Text API 轉錄音訊檔案。 | 您想使用 Speech-to-Text 預先訓練或自訂的語音辨識器。 | 使用 ML.TRANSCRIBE 函式轉錄音訊檔案 |
如果您想將結果與其他結構化資料彙整,可以根據分析結果建立檢視畫面或資料表。例如,以下陳述式會根據推論結果建立資料表:
CREATE TABLE my_dataset.my_inference_results AS SELECT uri, content_type, vision_feature FROM ML.PREDICT( MODEL my_dataset.vision_model, SELECT ML.DECODE_IMAGE(data) AS vision_input FROM my_dataset.object_table );
建立資料表後,您可以根據標準或自訂中繼資料欄位,將資料表與其他資料表彙整,如下所示:
SELECT a.vision_feature, a.uri, b.description FROM my_dataset.my_inference_results a JOIN my_dataset.image_description b ON a.uri = b.uri;
您也可以建立搜尋索引,以便在分析結果中進行搜尋。舉例來說,以下陳述式會針對從 PDF 檔案擷取的資料建立搜尋索引:
CREATE SEARCH INDEX my_index ON pdf_text_extract(ALL COLUMNS);
接著,您可以使用索引在這些結果中找出所需項目:
SELECT * FROM pdf_text_extract WHERE SEARCH(pdf_text, 'Google');
優點
在 BigQuery 中原生分析非結構化資料可享有以下優點:
- 這項工具可讓您自動執行預先處理步驟 (例如根據模型需求調整圖片大小),減少手動處理的負擔。
- 讓您使用熟悉的 SQL 介面處理非結構化資料。
- 您可以利用現有的 BigQuery 運算單元,而無須配置新的運算單元,這有助於節省成本。
經簽署的網址
如要存取物件所代表的資料,請產生已簽署的網址。您可以使用已簽署的網址直接查看物件資料,也可以將已簽署的網址傳遞至遠端函式,讓函式能夠處理物件資料表資料。
使用 EXTERNAL_OBJECT_TRANSFORM
函式產生已簽署的網址,如以下範例所示:
SELECT uri, signed_url FROM EXTERNAL_OBJECT_TRANSFORM(TABLE `mydataset.myobjecttable`, ['SIGNED_URL']);
這麼做會傳回類似以下的結果:
---------------------------------------------------------------------------------------------------
| uri | signed_url |
—--------------------------------------------------------------------------------------------------
| gs://mybucket/a.docx | https://storage.googleapis.com/mybucket/a.docx?X-Goog-Signature=abcd&... |
—-------------------------------------------------------------------------------------------------
| gs://mybucket/b.pdf | https://storage.googleapis.com/mybucket/b.pdf?X-Goog-Signature=wxyz&... |
—--------------------------------------------------------------------------------------------------
從物件資料表產生的已簽署網址可讓任何擁有這些網址的使用者或程序讀取相應物件。產生的已簽署網址會在 6 小時後失效。詳情請參閱「Cloud Storage 已簽署的網址」。
存取權控管
物件資料表是在 BigLake 上建構,因此會使用服務帳戶的外部連線存取 Cloud Storage 資料。這項功能會透過存取權委派,將資料表的存取權與基礎物件儲存空間的存取權分離開來。您可以授予服務帳戶權限,讓服務帳戶存取物件的資料和中繼資料,並在資料表中顯示這些資料。您只會授予使用者表格的權限,並透過身分與存取權管理 (IAM) 和資料列層級安全性來管理資料存取權。
物件資料表與其他使用存取權委派的資料表不同,因為物件資料表的資料列存取權可提供對基礎檔案內容的存取權。雖然使用者無法直接存取物件,但可以產生已簽署的網址,讓他們查看檔案內容。舉例來說,如果使用者有權存取代表 flower.jpg
圖片檔案的物件資料表資料列,就能產生已簽署網址來顯示該檔案,並查看該圖片是否為雛菊的圖片。
在物件資料表上設定資料列層級存取政策,可限制使用者或群組存取所選資料列中的物件中繼資料,以及這些資料列所代表的物件。舉例來說,下列陳述式會將存取權授予使用者 Alice,但僅限於代表 2022 年 6 月 25 日前建立的物件資料列:
CREATE ROW ACCESS POLICY before_20220625 ON my_dataset.my_object_table GRANT TO ("user:[email protected]") FILTER USING (updated < TIMESTAMP("2022-06-25"));
在設有這項資料列層級存取權政策後,Alice 會獲得下列結果:
- 執行查詢
SELECT * FROM my_dataset.my_object_table;
只會傳回 2022 年 6 月 25 日前具有updated
值的資料列。 - 對
my_dataset.my_object_table
執行推論時,只會針對 2022 年 6 月 25 日前具有updated
值的物件傳回預測結果。 - 為
my_dataset.my_object_table
產生已簽署網址時,只會為 2022 年 6 月 25 日前具有updated
值的物件建立網址。
您也可以使用自訂中繼資料,限制物件資料表列的存取權。例如,以下陳述式會限制 users
群組只存取物件已標記為不含任何個人識別資訊的資料列:
CREATE ROW ACCESS POLICY no_pii ON my_dataset.my_object_table GRANT TO ("group:[email protected]") FILTER USING (ARRAY_LENGTH(metadata)=1 AND metadata[OFFSET(0)].name="no_pii")
安全性模型
管理及使用物件資料表時,通常會涉及下列組織角色:
- 資料湖泊管理員:這些管理員通常會管理 Cloud Storage 值區和物件的身分與存取權管理 (IAM) 政策。
- 資料倉儲管理員。這些管理員通常會建立、刪除及更新資料表。
- 資料分析師。分析人員通常會讀取資料和執行查詢。
資料湖泊管理員負責建立連結,並與資料倉儲管理員分享連結。資料倉儲管理員則會建立資料表、設定適當的存取權控管機制,並與資料分析師分享資料表。
支援的物件檔案
您可以在任何類型和大小的非結構化資料檔案上建立物件資料表,也可以建立遠端函式來處理任何類型的非結構化資料。不過,如果要使用 BigQuery ML 執行推論,物件資料表只能套用於符合多種大小和類型要求的圖片檔案。詳情請參閱「限制」一節。
為提升效能而快取中繼資料
您可以使用快取的中繼資料,改善推論和其他類型的物件資料表分析效能。在物件資料表參照大量物件的情況下,中繼資料快取功能特別實用。BigQuery 會使用 CMETA 做為分散式中繼資料系統,有效率地處理大型資料表。CMETA 會在資料欄和區塊層級提供精細的中繼資料,可透過系統表存取。這套系統可改善資料存取和處理方式,進而提升查詢效能。為了進一步加快大型資料表的查詢效能,BigQuery 會維護中繼資料快取。CMETA 重新整理工作會讓這個快取保持最新狀態。
中繼資料包括檔案名稱、區隔資訊,以及檔案的實體中繼資料,例如資料列計數。您可以選擇是否在資料表上啟用中繼資料快取功能。含有大量檔案和 Apache Hive 分區篩選器的查詢,最能從中繼資料快取作業中受益。
如果您未啟用中繼資料快取功能,資料表上的查詢必須讀取外部資料來源,才能取得物件中繼資料。讀取這類資料會增加查詢延遲時間,從外部資料來源列出數百萬個檔案可能需要幾分鐘的時間。啟用中繼資料快取功能後,查詢作業就能避免列出外部資料來源中的檔案,並且能更快速地分割及刪除檔案。
有兩個屬性可控制這項功能:
- 最大過時時間:指定查詢使用快取中繼資料的時間。
- 「中繼資料快取模式」會指定中繼資料的收集方式。
啟用中繼資料快取功能後,您可以指定中繼資料過時的最大間隔,以便針對資料表執行作業。舉例來說,如果您指定 1 小時的間隔,則如果表格在過去 1 小時內已重新整理,針對該表格的作業會使用快取中繼資料。如果快取的中繼資料比這還舊,作業會改為從 Cloud Storage 擷取中繼資料。您可以指定 30 分鐘至 7 天的過時間隔。
為 BigLake 或物件資料表啟用中繼資料快取功能時,BigQuery 會觸發中繼資料產生重建工作。您可以選擇自動或手動重新整理快取:
- 自動重新整理功能會按照系統定義的間隔時間 (通常為 30 到 60 分鐘) 重新整理快取。如果 Cloud Storage 中的檔案會在隨機間隔下新增、刪除或修改,自動重新整理快取是一個不錯的做法。如果您需要控制重新整理的時間點 (例如在擷取-轉換-載入工作結束時觸發重新整理),請使用手動重新整理。
如要手動重新整理,您可以執行
BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序,按照符合需求的排程重新整理中繼資料快取。如果 Cloud Storage 中的檔案會在已知的間隔時間內新增、刪除或修改 (例如管道的輸出內容),手動重新整理快取是個不錯的做法。如果您同時發出多個手動重新整理要求,只有其中一個會成功。
如果未重新整理,中繼資料快取會在 7 天後過期。
手動和自動快取重新整理作業都會以 INTERACTIVE
查詢優先順序執行。
使用 BACKGROUND
保留項目
如果您選擇使用自動重新整理功能,建議您建立預留,然後為執行中繼資料快取重新整理工作的專案,建立使用 BACKGROUND
工作類型的指派。使用 BACKGROUND
保留功能時,重新整理工作會使用專用資源集區,避免重新整理工作與使用者查詢競爭,並避免在沒有足夠資源可供使用時,工作可能會失敗。
雖然使用共用運算單元集區不會產生額外費用,但使用 BACKGROUND
預留功能可分配專用資源集區,提供更穩定的效能,並提高 BigQuery 中重新整理作業的可靠性和整體查詢效率。
設定過時間隔和中繼資料快取模式值前,請先考量兩者之間的互動方式。請見以下範例:
- 如果您手動重新整理資料表的中繼資料快取,並將失效間隔設為 2 天,則必須每 2 天或更短時間執行
BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序,才能讓針對資料表的作業使用快取的中繼資料。 - 如果您會自動重新整理資料表的中繼資料快取,並將失效間隔設為 30 分鐘,如果中繼資料快取重新整理作業需要較長的時間 (通常為 30 到 60 分鐘),則針對資料表執行的部分作業可能會從 Cloud Storage 讀取資料。
如要查看中繼資料重新整理工作相關資訊,請查詢 INFORMATION_SCHEMA.JOBS
檢視區塊,如以下範例所示:
SELECT * FROM `region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT` WHERE job_id LIKE '%metadata_cache_refresh%' AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR) ORDER BY start_time DESC LIMIT 10;
詳情請參閱「中繼資料快取」。
如要進一步瞭解如何設定中繼資料快取選項,請參閱「建立物件資料表」一文。
限制
- 物件表是唯讀的,因為它會對應至 Cloud Storage 中的非結構化資料物件。您無法變更物件表或修改物件表資料。
- 舊版 SQL 或其他雲端環境 (例如 Amazon Web Services (AWS) 和 Microsoft Azure) 不支援物件資料表。
- 如果您想使用 BigQuery ML 執行推論作業,所使用的模型和物件資料表必須符合「限制」一節所述的條件。
- 包含物件資料表的查詢無法存取超過 10 GB 的物件中繼資料。舉例來說,如果查詢透過已簽署的網址,從物件資料表的中繼資料欄和物件資料組合中存取 100 TB,那麼這 100 TB 中只有 10 GB 可以來自中繼資料欄。
- 物件資料表的限制與所有其他 BigQuery 外部資料表相同。詳情請參閱「配額」。
- 針對物件資料表執行的查詢,會受到與其他 BigQuery 查詢相同的限制。詳情請參閱「配額」。
- 處理物件資料表中非結構化資料的遠端函式,必須遵守與所有其他遠端函式相同的限制。
- 為物件表中的物件產生的已簽署網址會在 6 小時後到期,這是查詢執行時間限制。
- 以量計價或標準版不支援 BigQuery ML 推論。
以下函式不支援隨選定價或 Standard 版本:
費用
費用與物件資料表的下列部分相關:
- 查詢資料表。
- 重新整理中繼資料快取。
如果您有運算單元預留,查詢外部資料表不會產生費用。而是會為這些查詢使用空格。
下表說明您的定價模式如何影響這些費用的計費方式:
以量計價 | Standard、Enterprise 和 Enterprise Plus 版本 | |
---|---|---|
查詢 | 系統會根據使用者查詢處理的位元組數量向您收費。 | 具有 QUERY 工作類型的保留指派中的運算單元,會在查詢期間耗用。 |
手動重新整理中繼資料快取。 | 您需要支付重新整理快取時處理的位元組數。 | 使用 QUERY 工作類型的保留指派中的運算單元,會在快取重新整理期間耗用。 |
自動重新整理中繼資料快取。 | 您需要支付重新整理快取時處理的位元組數。 | 使用 BACKGROUND 工作類型的保留指派中的運算單元,會在快取重新整理期間耗用。如果沒有可用於重新整理中繼資料快取的 BACKGROUND 預留資源,如果您使用 Enterprise 或 Enterprise Plus 版本,BigQuery 會自動使用 QUERY 預留資源中的運算單元。 |
您也必須依據各產品的價格指南,針對 Cloud Storage、Amazon S3 和 Azure Blob 儲存體的儲存空間和資料存取權付費。
使用物件資料表搭配 BigQuery 共用
物件資料表與 BigQuery sharing (舊稱 Analytics Hub) 相容。包含物件資料表的資料集可發布為共用資訊清單。共用訂閱者可以訂閱這些項目,這些項目會在專案中佈建唯讀資料集,稱為連結資料集。訂閱者可以查詢已連結資料集中的所有資料表,包括所有物件資料表。詳情請參閱「訂閱商家資訊」。
後續步驟
- 瞭解如何建立物件資料表。
- 瞭解如何使用物件表格在標準資料表中維護
ObjectRef
欄。 - 瞭解如何針對圖片物件資料表執行推論。
- 瞭解如何使用遠端函式分析物件資料表。