BigQuery對象引用(ObjectRef)全面指南:一站式整合結構化與非結構化多模態數據分析

引言

企業需要同時管理有組織表格中的結構化數據,以及日益增長的非結構化數據(如圖片、音頻和文檔)。傳統上,聯合分析這些多樣化數據類型非常復雜,通常需要使用不同的工具。非結構化媒體通常需要導出到專門的服務進行處理(如圖片分析需計算機視覺服務,音頻需語音轉文本引擎),這會造成數據孤島,阻礙全局分析視角的建立。

以虛構的電商支持系統為例:結構化的工單信息存儲在BigQuery表中,而相關的支持通話錄音或損壞產品照片則存儲在云對象存儲中。如果沒有直接關聯,回答類似“找出所有指定筆記本型號的工單,其中通話音頻表現出高度客戶不滿且照片顯示屏幕破裂”這樣的情境性問題,將變得繁瑣且需多步操作。

本文是一份針對BigQuery中ObjectRef功能的實用技術指南,該功能旨在統一多模態數據分析。我們將探討如何構建、查詢和管理多模態數據集,使您能夠通過熟悉的SQL和Python接口獲得全面洞察。


第一部分:ObjectRef —— 統一多模態數據的關鍵

ObjectRef的結構與功能

為了解決數據孤島的問題,BigQuery引入了ObjectRef,這是一種專用的STRUCT數據類型。ObjectRef作為對存儲在Google Cloud Storage(GCS)中的非結構化數據對象的直接引用。它本身不包含非結構化數據(例如數據庫中的base64編碼圖片或轉錄音頻);而是指向數據位置,使BigQuery能夠訪問并在查詢分析時整合這些數據。

ObjectRef結構體包含以下關鍵字段:

  • uri(STRING):指向對象的GCS路徑
  • authorizer(STRING):使BigQuery能夠安全訪問GCS對象
  • version(STRING):存儲GCS對象的特定版本ID,綁定精確版本以實現可復現分析
  • details(JSON):通常包含GCS元數據,如contentType或size

以下是ObjectRef值的JSON表示示例:

{"uri": "gs://cymbal-support/calls/ticket-83729.mp3","version": 1742790939895861,"authorizer": "my-project.us-central1.conn","details": {"gcs_metadata": {"content_type": "audio/mp3","md5_hash": "a1b2c3d5g5f67890a1b2c3d4e5e47890","size": 5120000,"updated": 1742790939903000}}
}

通過封裝上述信息,ObjectRef為BigQuery提供了定位、訪問以及理解GCS非結構化文件基本屬性的全部必要細節。這為構建多模態表和數據幀奠定了基礎,使結構化數據與非結構化內容引用并存。


創建多模態表

多模態表是包含一個或多個ObjectRef列的標準BigQuery表。本節介紹如何使用SQL創建這些表及填充數據。

您可以在創建新表時定義ObjectRef列,也可以將其添加到現有表中。這種靈活性可讓您利用多模態能力調整當前數據模型。


使用對象表創建ObjectRef列

如果您有大量文件存儲在GCS存儲桶中,對象表是高效生成ObjectRef的方式。對象表是只讀表,顯示GCS目錄內容,并自動包含名為ref的ObjectRef類型列。

CREATE EXTERNAL TABLE `project_id.dataset_id.my_table`
WITH CONNECTION `project_id.region.connection_id`
OPTIONS(object_metadata = 'SIMPLE',uris = ['gs://bucket-name/path/*.jpg']
);

輸出結果為一個新表,包含ref列。您可以將ref列與如AI.GENERATE等函數一起使用,或與其它表連接查詢。


以編程方式構建ObjectRef

對于更動態的工作流,您可以使用OBJ.MAKE_REF()函數以編程方式創建ObjectRef。常見做法是結合OBJ.FETCH_METADATA()函數,自動填充details元素中的GCS元數據。如果將gs://路徑替換為現有表中的URI字段,以下代碼同樣適用。

SELECT OBJ.FETCH_METADATA(OBJ.MAKE_REF('gs://my-bucket/path/image.jpg', 'us-central1.conn')) AS customer_image_ref,OBJ.FETCH_METADATA(OBJ.MAKE_REF('gs://my-bucket/path/call.mp3', 'us-central1.conn')) AS support_call_ref

無論采用對象表還是OBJ.MAKE_REF,您均可構建和維護多模態表,為集成分析奠定基礎。


第二部分:用SQL管理與分析多模態表

安全與合規訪問

ObjectRef完美集成了BigQuery的原生安全特性,為多模態數據的治理提供了堅實基礎。用戶無法直接訪問底層GCS對象,訪問權限通過ObjectRef的authorizer字段指定的BigQuery連接資源來代理。這種模型實現了多層安全防護。

假設我們有一個電商產品圖片多模態表,表中含有名為image的ObjectRef列。

列級安全控制
  • 列級安全:可對整列進行訪問限制。例如,對于只需分析產品名稱和評分的用戶,管理員可以對image列施加列級安全策略,使這些分析師無法查詢圖片數據,但可分析其它結構化字段。
行級安全控制
  • 行級安全:BigQuery允許根據規則過濾用戶可見的行。例如,可設定“禁止用戶查詢與狗相關產品”的策略,被過濾的行對指定用戶完全不可見。
多重授權者管理
  • 多授權者機制:同一表的image.authorizer字段可以指定不同連接資源(如conn1conn2),實現細粒度權限管理。比如,conn1可訪問公共圖片桶,conn2則訪問新產品設計的受限桶。即使用戶能查看所有行,是否能查詢“Bird Seed”等產品的底層文件,完全取決于其對更高權限連接的授權情況。

用SQL實現AI驅動的生成式分析

AI.GENERATE_TABLE函數可對多模態數據應用生成式AI模型,生成新的結構化表,非常適合大規模數據豐富任務。以下示例基于電商場景,利用產品名稱和圖片,為每個產品自動生成SEO關鍵詞和市場描述。

SELECTproduct_id,seo_keywords,product_description
FROM AI.GENERATE_TABLE(MODEL `dataset_id.gemini`, (SELECT ('For the image of a pet product, generate:''1) 5 SEO search keywords and' '2) A one sentence product description', product_name, image_ref) AS prompt,product_idFROM `dataset_id.products_multimodal_table`),STRUCT("seo_keywords ARRAY, product_description STRING" AS output_schema)
);

運行結果是一個包含product_idseo_keywordsproduct_description的新結構化表。這一自動化流程極大提升了內容運營效率,生成的數據可直接用于內容管理系統或進一步分析。


第三部分:用Python和BigQuery DataFrames處理多模態數據

跨越Python與BigQuery,實現多模態智能推理

Python是數據科學家和分析師的首選語言,但面對超出本地內存的數據集時常遇到瓶頸。BigQuery DataFrames提供了解決方案——它通過pandas風格API,讓你無需下載數據即可操作BigQuery中的大規模數據,并自動將Python代碼轉為SQL,在BigQuery引擎上執行。

這種方式自然支持多模態分析。你可以在一個DataFrame中同時表示結構化數據和非結構化文件引用,實現一體化加載、轉換和分析。


創建多模態DataFrame

安裝bigframes庫后,可用以下三種常見方式創建/指定blob列(即GCS文件引用列,Python端的ObjectRef):

import bigframes
import bigframes.pandas as bpd# 1. 從GCS路徑直接創建blob列
df = bpd.from_glob_path("gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/images/*", name="image")# 2. 從已存在的Object Table加載
df = bpd.read_gbq_object_table("", name="blob_col")# 3. 從DataFrame的URI字段生成blob列
df["blob_col"] = df["uri"].str.to_blob()

解釋:

  • GCS位置掃描from_glob_path會掃描GCS目錄,自動創建臨時BigQuery對象表,并呈現為含blob列的DataFrame。
  • 已存在對象表:如果已有對象表,直接用read_gbq_object_table加載,避免重復掃描。
  • 已有DataFrame升級:如DataFrame中含GCS URI字符串列,可用.str.to_blob()方法“升級”為blob列。

AI驅動的Python多模態推理

創建多模態DataFrame的主要意義在于,可以直接在大規模非結構化數據上進行AI分析。BigQuery DataFrames支持在含有blob列的數據上調用大語言模型(LLM)等AI能力。

通用的多模態AI分析流程包含三步:

  1. 創建一個含有blob列(指向非結構化文件)的多模態DataFrame;
  2. 加載一個已訓練好的BigQuery ML模型為BigFrames模型對象;
  3. 在模型對象上調用.predict()方法,將多模態DataFrame作為輸入。

還是以電商場景為例,使用gemini-2.5-flash模型為每個寵物產品圖片生成一句簡短描述:

import bigframes.pandas as bpd# 1. 從GCS位置創建多模態DataFrame
df_image = bpd.from_glob_path("gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/images/*", name="image_blob"
)# 簡化起見,僅取前2張圖片
df_image = df_image.head(2)# 2. 指定大語言模型
from bigframes.ml import llmmodel = llm.GeminiTextGenerator(model_name="gemini-2.5-flash-preview-05-20")# 3. 讓LLM為每張圖片生成一句產品描述
answer = model.predict(df_image,prompt=["Write a 1 sentence product description for the image.", df_image["image_blob"]]
)answer[["ml_generate_text_llm_result", "image_blob"]]

當你調用model.predict(df_image)時,BigQuery DataFrames會自動構建并執行一條SQL,調用ML.GENERATE_TEXT函數,將blob列中的文件引用與文本提示作為輸入傳遞給Gemini模型。BigQuery引擎處理請求,將生成的文本描述返回到結果DataFrame的新列中。

這種強大的集成方式,讓你可以用極少的Python代碼,實現數千乃至數百萬份文件的多模態AI分析。


深入多模態DataFrame:更多處理能力

除了LLM生成外,bigframes庫還為blob列及相關方法提供了一系列非結構化數據處理與分析工具:

  • 內置變換:支持常見圖像操作(如模糊、歸一化、縮放等),可大規模預處理圖片,為建模做準備。
  • 嵌入生成:通過Vertex AI托管模型等,一步生成多模態數據的embedding,便于后續語義檢索等應用。
  • PDF切分:自動將文檔內容拆分為更小的有意義片段,簡化RAG(檢索增強生成)等場景的預處理。

這些特性讓BigQuery DataFrames正不斷發展為Python語境下端到端的多模態分析與AI平臺。未來還會有更多傳統上需獨立庫實現的功能,直接集成進bigframes。


結論

多模態表與數據幀代表了組織進行數據分析方式的轉變。通過在BigQuery中建立結構化表數據與GCS中非結構化文件的直接、安全連接,徹底打破了長期困擾多模態分析的數據孤島。

本指南展示了:無論你是寫SQL的數據分析師,還是用Python的數據科學家,都可以優雅地將任意多模態文件與關系數據并行分析。

想要開啟自己的多模態分析之旅,可參考以下資源:

  • 官方文檔:了解BigQuery多模態數據分析的概覽
  • Python Notebook:動手體驗BigQuery DataFrames多模態分析的樣例notebook
  • 分步教程
    • 按照Multimodal SQL Tutorial學習SQL多模態分析
    • 按照Multimodal DataFrames Tutorial體驗Python多模態數據幀分析

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87953.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【開源品鑒】FRP源碼閱讀

frp 是一款高性能的反向代理應用,專注于內網穿透,支持多種協議和 P2P 通信功能,目前在 GitHub 上已有 80k 的 star。本文將深入探討其源碼,揭示其背后的實現原理。1. 前言 frp 是一款高性能的反向代理應用,專注于內網…

day048-系統負載高排查流程與前后端分離項目

文章目錄 0. 老男孩思想1. 系統負載高排查流程1.1 進程/線程相關命令1.1.1 jps1.1.2 jstack1.1.3 jmap1.1.4 top -Hp pid 1.2 排查流程圖 2. 前后端分離項目2.1 項目說明2.2 負載均衡2.3 數據庫配置2.3.1 安裝數據庫服務2.3.2 配置數據庫環境 2.4 后端配置2.5 四層負載均衡配置…

Spring Boot 牽手EasyExcel:解鎖高效數據處理姿勢

引言 在日常的 Java 開發中,處理 Excel 文件是一個極為常見的需求。無論是數據的導入導出,還是報表的生成,Excel 都扮演著重要的角色。例如,在企業的財務管理系統中,需要將每月的財務數據導出為 Excel 報表&#xff0…

【ARM AMBA AXI 入門 21 -- AXI partial 訪問和 narrow 訪問的區別】

文章目錄 Overview一、定義區別二、AXI 信號層面對比三、舉例說明示例一:Partial Access示例二:Narrow Access四、硬件/系統處理角度五、AXI 總線接口信號舉例對比Partial Write 事務:Narrow Write 事務(32-bit Master on 64-bit Bus):六、總結對比表七,軟件判斷判斷 Pa…

使用Ideal創建一個spring boot的helloWorld項目

說明:本篇將介紹如何使用Ideal2024.2.1去創建一個spring boot的helloWorld項目,本篇將包含創建的詳細步驟以及spring boot項目的目錄結構說明,創建過程中的選項說明等。詳細步驟如下:第一步:點擊文件——新建——項目&…

國內Ubuntu訪問不了github等外網

各位小伙伴們,大家好呀。 大家是不是經常遇到訪問不了外網的情況呀。 在Ubuntu中可以這樣做。 訪問這個網站網站測速-Ping檢測-Trace查詢-Dig查詢-路由跟蹤查詢-tools.ipip.net, 對于github.com,在這個網站輸入github.com,會返…

PDF轉換工具,即開即用

在辦公室里,這句話被反復驗證。每天面對成堆的Word和Excel文件,將它們轉換成PDF格式是常有的事。可之前用過的工具,不是一次只能轉一個,就是操作繁瑣得讓人頭疼。記得有次趕項目,需要把二十多個文檔轉成PDF&#xff0c…

2. 你可以說一下 http 版本的發展過程嗎

你可以說一下 http 版本的發展過程嗎 總結:0.9:只能發送 get,無狀態。1.0:新增 post,請求頭,狀態碼,cookie。1.1:新增 put/delete/options/patch,keep-alive&#xff0c…

04-Linux驅動模塊的自動加載

概述 上一節,我們講述了Linux驅動開發的基本的模塊代碼編寫和手動執行模塊加載的操作, 這一節,我們講述嵌入式設備上使用Sysvint引導方式下如何開機自動加載模塊的步驟。感興趣的同學看下使用systemd引導方式的開啟自動加載模塊的步驟 操作…

【牛客算法】游游的整數切割

文章目錄 一、題目介紹1.1 題目鏈接1.2 題目描述1.3 輸入描述1.4 輸出描述1.5 示例二、解題思路2.1 核心算法設計2.2 性能優化關鍵2.3 算法流程圖三、解法實現3.1 解法一:基礎遍歷法3.1.1 初級版本分析3.2 解法二:奇偶預統計法(推薦)3.2.1 優化版本分析四、總結與拓展4.1 關…

筆記本電腦忽亮忽暗問題

關于筆記本電腦忽亮忽暗的問題這個問題困擾了我大半年,最后忽然找到解決方法了---主要的話有三種可能性1.關閉顯示器自動調亮的功能2.關閉節能模式自動調亮功能3.調整顯卡的功率,關閉自動調亮功能一開始一直都是嘗試的第一種方法,沒解決。。。…

Qt的頂部工具欄在多個界面使用

Qt的工具欄在多個界面使用1、前言2、創建一個工具欄類2.1 新建一個工具欄類3、提升工具欄類3.1登錄界面添加工具欄3.2 創建工具欄對象4、總結1、前言 今天遇到了個問題,頂部的工具欄,像軟鍵盤,時間顯示和退出按鈕那些,想在多個界…

C#和SQL Server連接常用通訊方式

C#和SQL Server連接通訊 在 C# 中與 SQL Server 建立數據庫連接,主要通過 ADO.NET 技術實現。以下是幾種常見的連接方式及相關實踐: ADO.NET 全面指南:C# 數據庫訪問核心技術 ADO.NET 是 .NET Framework 中用于數據訪問的核心組件&#xf…

安卓10.0系統修改定制化____實現自動開啟 USB 調試?的步驟解析 列舉常用的幾種修改方法

對于安卓開發者、測試人員,甚至是喜歡折騰手機的數碼愛好者來說,USB 調試是一個非常重要的功能。它能讓手機與電腦相連,實現應用安裝、系統調試、數據傳輸等操作。但每次連接手機都要手動去設置里開啟 USB 調試,實在麻煩。其實,通過修改安卓 10.0 的 ROM,就能讓手機自動開…

Redisson詳細教程 - 從入門到精通

目錄 1. 什么是Redisson 2. 為什么要用Redisson 3. 環境準備和配置 4. 基礎使用方法 5. 分布式數據結構 6. 分布式鎖詳解 7. 分布式服務 8. 實際應用場景 9. 最佳實踐 10. 常見問題解答 總結 1. 什么是Redisson 簡單理解 想象一下,Redis就像一個超級強大的"內…

動態規劃VS記憶化搜索(2)

luoguP1434滑雪 題目描述 Michael 喜歡滑雪。這并不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael 想知道在一個區域中最長的滑坡。區域由…

如何將服務守護進程化

進程組 什么是進程組 之前我們提到了進程的概念, 其實每一個進程除了有一個進程 ID(PID)之外 還屬于一個進程組。進程組是一個或者多個進程的集合, 一個進程組可以包含多個進程。 每一個進程組也有一個唯一的進程組 ID(PGID), 并且這個 PGID …

【跟著PMP學習項目管理】項目管理 之 范圍管理知識點

目錄 一、收集需求 1、知識點匯總 2、輸入 3、工具 4、輸出 二、定義范圍 1、知識點匯總 2、輸入 3、工具 4、輸出 三、創作工作分解結構 1、知識點匯總 2、輸入 3、工具 4、輸出 四、核實范圍 1、知識點匯總 2、輸入 3、工具 4、輸出 五、控制范圍 1、知…

AIX 環境磁盤空間管理指南

AIX 環境磁盤空間管理指南 在AIX環境中,磁盤空間的監控、管理與擴展是運維人員必備的技能。本文通過實際案例,系統地介紹如何查詢磁盤信息、卷組(VG)、邏輯卷(LV)信息,以及在磁盤空間不足時的擴容方案,幫助讀者掌握磁盤空間管理的…

k8s將service的IP對應的不同端口分配到不同的pod上

在Kubernetes中,Service是一種抽象層,它將請求路由到一組Pod。當你需要將Service的不同端口映射到不同的Pod時,可以通過以下兩種主要方式實現: 方法一:使用單個Service的多端口配置 如果不同的Pod提供不同的服務&…