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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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提供不同的服务&…