物件資料表簡介
本文說明物件資料表,這類資料表是 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 | 以 ObjectRef 格式儲存的 Google 管理 Cloud Storage 中繼資料。(預覽) 您可以使用這個資料欄在標準表格中維持 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 functions 呼叫服務或代管模型。這是最泛用的整合方式。 | 您在 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:alice@example.com") 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:users@example.com") 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 分區篩選器,中繼資料快取功能就能發揮最大效益。
如果未啟用中繼資料快取,查詢資料表時必須讀取外部資料來源,才能取得物件中繼資料。讀取這項資料會增加查詢延遲時間;列出外部資料來源中的數百萬個檔案可能需要幾分鐘。啟用中繼資料快取功能後,查詢作業就能避免列出外部資料來源中的檔案,並更快地分割及修剪檔案。
中繼資料快取也會與 Cloud Storage 物件版本管理功能整合。快取填入或重新整理時,會根據當時 Cloud Storage 物件的即時版本擷取中繼資料。因此,即使 Cloud Storage 中出現較新版本,啟用中繼資料快取功能的查詢也會讀取特定快取物件版本對應的資料。如要存取 Cloud Storage 中任何後續更新的物件版本資料,必須重新整理中繼資料快取。
有兩個屬性可控制這項功能:
- 最大過時程度:指定查詢何時使用快取中繼資料。
- 「中繼資料快取模式」會指定中繼資料的收集方式。
啟用中繼資料快取功能後,您可以指定可接受的資料表作業中繼資料過時間隔上限。舉例來說,如果您指定 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 的物件中繼資料。舉例來說,如果查詢透過簽署的 URL 從物件資料表中的中繼資料欄和物件資料存取 100 TB,則這 100 TB 中只有 10 GB 可能來自中繼資料欄。
- 物件資料表與所有其他 BigQuery 外部資料表一樣,都受到相同限制。詳情請參閱「配額」。
- 物件資料表的查詢限制與所有其他 BigQuery 查詢相同。詳情請參閱「配額」。
- 處理物件資料表非結構化資料的遠端函式,與所有其他遠端函式一樣,都受到相同的限制。
- 為物件資料表中的物件產生的已簽署網址,會在 6 小時後過期,這是查詢執行時間限制。
- 以量計價或 Standard 版不支援使用 BigQuery ML 進行推論。
隨選價格或標準版不支援下列函式:
費用
物件資料表的下列方面會產生費用:
- 查詢資料表。
- 重新整理中繼資料快取。
如果您有運算單元預留,查詢外部資料表時不會產生費用。而是會耗用這些查詢的配額。
下表說明定價模式如何影響這些費用的適用方式:
以量計價 |
Standard、Enterprise 和 Enterprise Plus 版本 |
|
---|---|---|
查詢 |
系統會根據使用者查詢處理的位元組數向您收費。 |
運算單元會在查詢期間,用於指派給 QUERY 工作類型的保留項目。 |
手動重新整理中繼資料快取。 |
系統會針對重新整理快取所處理的位元組向您收費。 |
快取重新整理期間會耗用指派給 QUERY 工作類型的運算單元。 |
自動重新整理中繼資料快取。 |
系統會針對重新整理快取所處理的位元組向您收費。 |
快取重新整理期間會耗用指派給 BACKGROUND 工作類型的運算單元。如果沒有可用的 BACKGROUND 預留資源來重新整理中繼資料快取,且您使用的是 Enterprise 或 Enterprise Plus 版本,BigQuery 會自動改用 QUERY 預留資源中的運算單元。 |
系統也會依據各產品的價格規定,針對 Cloud Storage、Amazon S3 和 Azure Blob Storage 的儲存空間和資料存取權向您收費。
搭配 BigQuery 共用功能使用物件資料表
物件資料表與 BigQuery sharing (舊稱 Analytics Hub) 相容。 含有物件資料表的資料集可以發布為共用資訊。共用訂閱者可以訂閱這些項目,在專案中佈建唯讀資料集 (稱為連結資料集)。訂閱者可以查詢連結資料集中的所有資料表,包括所有物件資料表。詳情請參閱「訂閱房源」。
後續步驟
- 瞭解如何建立物件資料表。
- 瞭解如何使用物件資料表,在標準資料表中維護
ObjectRef
資料欄。 - 瞭解如何對圖片物件資料表執行推論。
- 瞭解如何使用遠端函式分析物件資料表。