在 BigQuery 中分析多模态数据

本文档介绍了可用于分析多模态数据的 BigQuery 功能。有些功能可在Trusted Cloud 控制台和 bq 命令行工具中使用,而另一些功能则可通过在 Python 中使用 BigQuery DataFrames 来使用。您可以将这些功能中的许多功能结合使用,以便更轻松地分析和转换多模态数据。

借助 BigQuery 的多模态数据功能,您可以执行以下任务:

如需查看使用 Trusted Cloud 控制台的分步教程,请参阅使用 SQL 分析多模态数据。如需查看有关如何在 Python 中使用 BigQuery DataFrames 的分步教程,请参阅使用 BigQuery DataFrames 在 Python 中分析多模态数据

优势

BigQuery 的多模态数据功能具有以下优势:

  • 可组合性:您可以使用 ObjectRef 值在同一标准表行中存储和管理结构化数据和非结构化数据。例如,您可以将商品的图片与其余商品信息存储在同一行中。您可以使用标准 SQL 函数来创建和更新包含 ObjectRef 值的列,还可以创建 ObjectRef 值作为对对象执行转换操作的输出。
  • 在生成式 AI 提示中使用对象数据:使用 ObjectRefRuntime 值作为生成式 AI 函数的输入。例如,您可以针对同一表中的图片和文本数据生成嵌入。对于文本和标量值生成,您还可以在发送给模型的提示中引用多个对象。例如,您可以创建一个提示,让模型比较两张动物图片,然后返回文本,指明这两张图片是否显示了同一种动物。
  • 保留块顺序:您可以将对象分块,然后将这些块作为 ObjectRef 值的数组存储在标准表列中,以便保留它们的顺序。例如,您可以解析视频中的图片,然后将这些图片存储为 ObjectRef 值的数组,这样图片就会保持与原始视频中相同的显示顺序。

ObjectRef 个值

ObjectRef 值是使用 ObjectRef 格式STRUCT 值。您可以创建一个使用此格式的 STRUCTARRAY<STRUCT> 列,从而在 BigQuery 标准表中存储 Cloud Storage 对象元数据和关联的授权方。授权方值用于标识 BigQuery 用来访问 Cloud Storage 对象的 Cloud 资源连接

当您需要将非结构化数据集成到标准表中时,请使用 ObjectRef 值。例如,在产品表中,您可以通过添加包含 ObjectRef 值的列,将产品图片与其余产品信息存储在同一行中。

使用以下 GoogleSQL 函数创建和更新 ObjectRef 值:

  • OBJ.MAKE_REF:创建包含 Cloud Storage 对象元数据的 ObjectRef 值。
  • OBJ.FETCH_METADATA:针对部分填充了 uriauthorizer 值的 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_EMBEDDING 以外的所有函数,您可以将 ObjectRefRuntime 值作为单个值或数组提供。ML.GENERATE_EMBEDDING 仅接受单个值。

在 Python 中处理多模态数据

您可以使用 BigQuery DataFrames 类和方法在 Python 中分析多模态数据。

多模态 DataFrame

使用以下 Session 方法创建集成结构化数据和非结构化数据的多模态 DataFrame:

对象转换方法

使用以下 Series.BlobAccessor 方法转换对象数据:

生成式 AI 方法

使用以下方法对多模态数据执行生成式 AI 任务:

对象表

如果您在多模数据预览的许可名单中,那么您创建的任何新对象表都会包含一个 ref 列,其中包含相应对象的 ObjectRef 值。用于创建对象表的连接用于填充 ref 列中的 authorizer 值。您可以使用 ref 列在标准表中填充和刷新 ObjectRef 值。

限制

以下限制适用于 BigQuery 多模态数据功能:

  • 您必须在包含 ObjectRef 值的表的同一项目中运行引用 ObjectRef 值的任何查询。
  • 在运行引用 ObjectRefObjectRefRuntime 值的查询的项目和区域中,连接数不得超过 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 费用。

如需了解详情,请参阅以下价格页面:

后续步骤