在 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 函数
使用 Gemini 模型和以下生成式 AI 函数,根据 ObjectRefRuntime 输入生成文本、嵌入和标量值:
ML.GENERATE_TEXTAI.GENERATE_TABLEAI.GENERATEAI.GENERATE_BOOLAI.GENERATE_DOUBLEAI.GENERATE_INTML.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中不能有超过 20 个asia-east1连接。
费用
使用多模态数据时,会产生以下费用:
- 在标准表中将对象元数据存储为
ObjectRef值会增加相应表的 BigQuery 存储费用。 - 对
ObjectRef值运行的查询会产生 BigQuery 计算费用。 - 通过对象转换创建的新对象会产生 Cloud Storage 费用。
- 您在 BigQuery 中创建并保留的新数据会产生 BigQuery 存储费用。
- 使用生成式 AI 功能会产生 Vertex AI 费用。
- 使用 BigQuery Python UDF 以及 BigQuery DataFrames 中的多模态 DataFrame 和对象转换方法会产生 Python UDF 费用。
如需了解详情,请参阅以下价格页面:
后续步骤
- 在表架构中指定
ObjectRef列。 - 使用 SQL 分析多模态数据。
- 使用 BigQuery DataFrames 在 Python 中分析多模态数据。
- 详细了解 BigQuery ML 中的生成式 AI。
- 详细了解 BigQuery DataFrames。