在 BigQuery 中分析多模态数据
本文档介绍了可用于分析多模态数据的 BigQuery 功能。有些功能可在Trusted Cloud 控制台和 bq 命令行工具中使用,而另一些功能则可通过在 Python 中使用 BigQuery DataFrames 来使用。您可以将这些功能中的许多功能结合使用,以便更轻松地分析和转换多模态数据。
借助 BigQuery 的多模态数据功能,您可以执行以下任务:
- 使用
ObjectRef
值将非结构化数据集成到标准表中。 - 通过使用
ObjectRefRuntime
值,在分析和转换工作流中使用非结构化数据。 - 使用 BigQuery ML 生成式 AI 函数和 Gemini 模型,从多模态数据生成文本、嵌入和标量值。
- 在 BigQuery DataFrames 中创建多模态 DataFrame。
- 使用 BigQuery DataFrames
Series.BlobAccessor
方法转换图片和分块 PDF 文件。 - 使用 BigQuery DataFrames 生成式 AI 方法根据多模态数据生成文本和嵌入。
如需查看使用 Trusted 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_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
方法:根据多模态数据生成文本。GeminiTextGenerator
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。