在 BigQuery 中分析多模态数据
本文档介绍了可用于分析多模态数据的 BigQuery 功能。有些功能可在Google Cloud 控制台和 bq 命令行工具中使用,有些功能则需要在 Python 中使用 BigQuery DataFrames 才能使用。您可以将这些功能中的许多功能搭配使用,以便更轻松地针对多模态数据实现分析和转换工作流。
借助 BigQuery 的多模态数据功能,您可以执行以下任务:
- 使用
ObjectRef
值将非结构化数据集成到标准表中。 - 使用
ObjectRefRuntime
值在分析和转换工作流中处理非结构化数据。 - 将 BigQuery ML 生成式 AI 函数与 Gemini 模型搭配使用,从多模态数据生成文本、嵌入和标量值。
- 在 BigQuery DataFrames 中创建多模态 DataFrame。
- 使用 BigQuery DataFrames
Series.BlobAccessor
方法转换图片和分块处理 PDF 文件。 - 使用 BigQuery DataFrames 生成式 AI 方法根据多模态数据生成文本和嵌入。
如需查看使用 Google Cloud 控制台的分步教程,请参阅使用 SQL 分析多模态数据。如需了解有关如何在 Python 中使用 BigQuery DataFrames 的分步教程,请参阅使用 BigQuery DataFrames 在 Python 中分析多模态数据。
优势
BigQuery 的多模态数据功能具有以下优势:
- 可组合性:您可以使用
ObjectRef
值在同一标准表行中存储和管理结构化数据和非结构化数据。例如,您可以将商品的图片存储在与商品的其他信息在同一行中。您可以使用标准 SQL 函数创建和更新包含ObjectRef
值的列,还可以创建ObjectRef
值作为对对象执行转换操作的输出。 - 在生成式 AI 问题中使用对象数据:将
ObjectRefRuntime
值用作生成式 AI 函数的输入。例如,您可以针对同一表中的图片和文本数据生成嵌入。对于文本和标量值生成,您还可以在发送给模型的提示中引用多个对象。例如,您可以创建一个提示,要求模型比较两张动物图片,然后返回文本,指明这两张图片是否显示了同一类动物。 - 保留分块顺序:您可以将对象分块,然后将分块作为
ObjectRef
值数组存储在标准表列中,以保留其顺序。例如,您可以解析视频中的图片,然后将这些图片存储为ObjectRef
值的数组,以便图片保持与原始视频中显示的顺序相同。
ObjectRef
个值
ObjectRef
值是使用 ObjectRef
���式的 STRUCT
值。您可以创建使用此格式的 STRUCT
或 ARRAY<STRUCT>
列,以便在 BigQuery 标准表中存储 Cloud Storage 对象元数据和关联的授权者。授权者值用于标识 BigQuery 用于访问 Cloud Storage 对象的 Cloud 资源连接。
当您需要将非结构化数据集成到标准表中时,请使用 ObjectRef
值。例如,在产品表中,您可以通过添加包含 ObjectRef
值的列,将产品图片存储在与其他产品信息在同一行中。
使用以下 GoogleSQL 函数创建和更新 ObjectRef
值:
OBJ.MAKE_REF
:创建一个包含 Cloud Storage 对象元数据的ObjectRef
值。OBJ.FETCH_METADATA
:提取部分填充了uri
和authorizer
值的ObjectRef
值的 Cloud Storage 元数据。
如需了解详情,请参阅在表架构中指定 ObjectRef
列。
ObjectRefRuntime
个值
ObjectRefRuntime
值是使用 ObjectRefRuntime
架构的 JSON
值。ObjectRefRuntime
值包含用于创建对象的 ObjectRef
值中的 Cloud Storage 对象元数据、关联的授权者和访问网址。您可以使用访问网址在 Cloud Storage 中读取或修改对象。
使用 ObjectRefRuntime
值在分析和转换工作流中处理对象数据。ObjectRefRuntime
值中的访问网址最长会在 6 小时后过期,但您可以配置更短的过期时间。如果您在工作流程中将 ObjectRefRuntime
值保留在任何位置,则应定期刷新这些数据。如需保留对象元数据,请改为存储 ObjectRef
值,然后在需要时使用这些值生成 ObjectRefRuntime
值。除非修改 Cloud Storage 中的底层对象,否则无需刷新 ObjectRef
值。
使用 OBJ.GET_ACCESS_URL
函数创建 ObjectRefRuntime
值。
生成式 AI 函数
将以下生成式 AI 函数与 Gemini 模型结合使用,根据 ObjectRefRuntime
输入生成文本、嵌入和标量值:
ML.GENERATE_TEXT
AI.GENERATE_TABLE
AI.GENERATE
AI.GENERATE_BOOL
AI.GENERATE_DOUBLE
AI.GENERATE_INT
ML.GENERATE_EMBEDDING
对于除 ML.GENERATE_EMBEDDING
以外的所有函数,您可以将 ObjectRefRuntime
值作为单个值或数组提供。ML.GENERATE_EMBEDDING
仅接受单个值。
在 Python 中处理多模态数据
您可以使用 BigQuery DataFrames 类和方法在 Python 中分析多模态数据。
���模态 DataFrame
使用以下 Session
方法创建一个可集成结构化数据和非结构化数据的多模态 DataFrame:
from_glob_path
方法:从 Cloud Storage 存储桶创建多模态 DataFrame。read_gbq_object_table
方法:根据对象表创建多模态 DataFrame。
对象转换方法
使用以下 Series.BlobAccessor
方法转换对象数据:
pdf_chunk
方法:对多模态 DataFrame 中的 PDF 对象进行分块处理。以下方法可用于从多模态 DataFrame 转换图片对象:
生成式 AI 方法
您可以使用以下方法对多模态数据执行生成式 AI 任务:
GeminiTextGenerator
类的predict
方法:根据多模态数据生成文本。MultimodalEmbeddingGenerator
类的predict
方法:根据多模态数据生成嵌入。
对象表
如果您已列入多模态数据预览的许可名单,则您创建的任何新对象表都会有一个 ref
列,其中包含给定对象的 ObjectRef
值。用于创建对象表的连接用于在 ref
列中填充 authorizer
值。您可以使用 ref
列在标准表中填充和刷新 ObjectRef
值。
限制
BigQuery 多模态数据地图项存在以下限制:
- 您必须在包含
ObjectRef
值的表所在的项目中运行引用ObjectRef
值的任何查询。 - 在运行引用
ObjectRef
或ObjectRefRuntime
值的查询的项目和区域中,连接数量不得超过 20 个。例如,如果您在myproject
中的asia-east1
中运行查询,则myproject
中的asia-east1
中的连接数不得超过 20 个。
费用
使用多模态数据时,需要支付以下费用:
- 将对象元数据作为
ObjectRef
值存储在标准表中会增加该表的 BigQuery 存储费用。 - 对
ObjectRef
值运行的查询会产生 BigQuery 计算费用。 - 您通过对象转换创建的新对象会产生 Cloud Storage 费用。
- 您在 BigQuery 中创建并保留的新数据会产生 BigQuery 存储费用。
- 使用生成式 AI 函数会产生 Vertex AI 费用。
- 在 BigQuery DataFrames 中使用 BigQuery Python UDF 以及多模态 DataFrame 和对象转换方法会产生 Python UDF 费用。
如需了解详情,请参阅以下价格页面:
后续步骤
- 在表架构中指定
ObjectRef
列。 - 使用 SQL 分析多模态数据。
- 使用 BigQuery DataFrames 在 Python 中分析多模态数据。
- 详细了解 BigQuery ML 中的生成式 AI。
- 详细了解 BigQuery DataFrames。