1. 简介
海量数据集中蕴含着宝贵的洞见,但提取有意义的理解可能是一项艰巨的任务。传统的分析工具往往无法提供细致入微、类似人类的解释,因此无法帮助我们真正了解数据中的故事。数据仓库中存储的非结构化数据越来越多,但这些数据并不总是可用于获取数据洞见。非结构化文本、图片和视频包含有助于您发展业务的宝贵信息。LLM 提供了一种强大的新方式来理解您的数据,可提供说明、情感分析、对象检测等功能。随着多模态模型的出现(以及通过对象表在 BigQuery 中存储图片和视频等对象数据的能力),将 Gemini 1.0 Pro(用于基于文本的分析)和 Gemini 1.0 Pro Vision(用于文本和图片/视频分析)等强大的 LLM 与 BigQuery 集成,可以改变您分析数据的方式。
在此 Codelab 中,我们将介绍以下两种方法,用于从企业数据中提取 LLM 洞见,并将这些洞见扩展到 BigQuery 中的数千行数据:
方法 1:远程模型调用
- 使用
SELECT查询中的ML.GENERATE_TEXT从 BigQuery 中调用 Gemini 1.0 Pro。 - 如果模型已作为 远程模型在 BigQuery 中提供,并且您想开箱即用,请使用此方法。在 BigQuery 文档中查看要使用的模型的状态。
方法 2:远程函数实现
- 调用实现了 Gemini 1.0 Pro Vision 调用的 Cloud Functions 函数,该函数以 BigQuery 中的远程函数的形式公开。
- 如果您想使用的模型无法直接作为远程模型使用,或者您希望在应用场景中获得更高的灵活性和自定义程度,请使用此方法。
构建内容
- 对于远程模型调用方法,您将在 BigQuery 中通过 ML.GENERATE_TEXT 构造调用 Gemini 1.0 Pro 的远程模型,为互联网归档图书数据集(在 BigQuery 中公开提供)构建位置总结器。

- 对于远程函数实现方法,您将构建一个映像验证器,用于根据基准映像验证测试映像。为此,您将创建一个包含外部表格中测试图片屏幕截图的数据集,并让 Gemini 1.0 Pro Vision 根据基准图片对其进行验证。然后,您将创建一个实现 Gemini Pro Vision 调用的 Java Cloud Functions 函数,并在 BigQuery 中将其作为远程函数进行调用。

注意:
可能还有更多 Vertex AI 生成式 AI 模型以远程模型的形式在 BigQuery 中提供。这意味着,您可以直接通过 BigQuery 中的 ML.GENERATE_TEXT 构造访问这些模型。不过,即使在远程模型可用的情况下,您始终可以选择使用 Cloud Functions 为自己的使用情形构建高级自定义模型,然后从 BigQuery 中以远程函数的形式访问这些模型。
为何选择 BigQuery?
BigQuery 是一个无服务器的多云数据仓库,可将数据规模从字节级扩展到 PB 级,且运营开销极低,因此非常适合用于存储机器学习训练数据。借助内置的 BigQuery Machine Learning (BQML) 和分析功能,您只需使用 SQL 查询即可创建无代码预测。此外,您还可以通过联合查询访问外部来源的数据,而无需复杂的 ETL 流水线。
BigQuery 是一种全托管式云数据仓库,可帮助用户分析结构化数据、半结构化数据和非结构化数据。
2. 要求
3. 准备工作
- 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
- 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
- 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq。点击 Google Cloud 控制台顶部的“激活 Cloud Shell”。

- 连接到 Cloud Shell 后,您可以使用以下命令检查自己是否已通过身份验证,以及项目是否已设置为您的项目 ID:
gcloud auth list
- 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目。
gcloud config list project
- 如果项目未设置,请使用以下命令进行设置:
gcloud config set project <YOUR_PROJECT_ID>
- 前往 Gemini for Google Cloud Marketplace 启用该 API。您还可以在 Cloud Shell 终端中使用以下命令:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- 确保已启用以下 API:
- BigQuery
- BigQuery 连接
- Cloud Functions 函数
- Cloud Run
- Vertex AI
- Cloud Build
- Cloud Storage API
除了使用 gcloud 命令之外,您还可以通过此链接在控制台中完成操作。
如需了解 gcloud 命令和用法,请参阅文档。
4. 创建 BigQuery 数据集和外部连接
我们先来创建数据集和 Cloud 资源连接。
BigQuery 中的数据集是用于存放应用的所有表和对象的容器。
如需创建数据集,请执行以下操作:
- 在 Google Cloud 控制台中前往 BigQuery 页面。
- 在探索器面板中,选择您要在其中创建数据集的项目。
- 展开操作选项(垂直省略号图标),然后点击创建数据集。

- 点击创建数据集。
- 在数据集 ID 字段中,输入
gemini_bq_fn。 - 将位置类型设置为
Multi-region,并接受默认值US(multiple regions in United States. - 点击创建数据集。
- 检查该数据集是否已创建并列在探索器窗格中的项目 ID 下。
您需要建立 BigQuery 连接才能与 Cloud Functions 函数进行交互。如需创建远程函数,您必须创建 BigQuery 连接。在此 Codelab 中,我们将使用 BigLake 连接通过 Cloud Functions 从 BigQuery 访问模型。借助 BigLake 连接,我们可以连接外部数据源,同时保留精细的 BigQuery 访问权限控制和安全性(在本例中为 Vertex AI Gemini Pro API)。
如需创建 BigLake 连接,请执行以下操作:
- 在 BigQuery 页面的探索器窗格中,点击添加。

- 点击与外部数据源的连接。
- 在“连接类型”菜单中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)。
- 在连接 ID 字段中,输入连接名称
gemini-bq-conn。 - 将位置类型设置为
Multi-region,并接受默认值US(multiple regions in United States. - 点击创建连接。
- 点击前往连接,然后复制连接信息窗格中的服务账号 ID。

- 前往 IAM 和管理页面,然后点击授予访问权限。
- 将服务账号 ID 粘贴到新的主账号字段中。
- 从角色列表中选择
Vertex AI user角色,然后点击保存。

您现已成功创建数据集和 BigQuery 连接。接下来,您将完成远程模型调用所需的步骤。
5. 用例 1:远程模型调用 - 设置远程模型调用
现在,您已创建数据集和连接,接下来我们将在 BigQuery 中基于 Vertex AI Gemini Pro 基础模型创建模型。完成本练习后,您将能够仅使用 SQL 查询来运行 LLM 应用。
第 1 步:创建包含远程模型输入数据的 BigQuery 表
在您的数据集中创建一个名为 books 的表,该表可以容纳来自 Internet Archive Books 数据集(由 BigQuery 提供的可供公开使用的数据集)中 bigquery-public-data.gdelt_internetarchivebooks.1905 表的大约 50 条记录。
为此,请在 BigQuery SQL 编辑器窗格中执行以下 DDL(数据定义语言)语句:
create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)
第 2 步:创建 BigQuery 模型
在数据集中创建模型。为此,请在 BigQuery SQL 编辑器窗格中运行以下 DDL:
CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');
请注意,系统会创建模型,并提供用于查看模型的选项。
第 3 步:测试新的生成式 AI 应用
在 SELECT 查询中使用 ML.GENERATE_TEXT 函数向远程模型发送请求。
SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
(select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
TRUE AS flatten_json_output));
您应该会看到以下结果:

恭喜!您已成功演示如何将远程模型(基于 gemini-pro 模型)与 ML.GENERATE_TEXT 函数搭配使用,以分析 BigQuery 表中的文本数据。
现在,我们来尝试使用 BigQuery 远程函数调用另一个 Vertex AI 模型。假设您想在 BigQuery 中远程使用模型时,添加更多自定义选项并提高灵活性。如需查看支持的模型的列表,请参阅 BigQuery 文档。
6. 用例 2:远程函数实现 - 设置远程函数实现
在此练习中,您将基于实现 Gemini 1.0 Pro Vision 基础模型的 Java Cloud Functions 函数,在 BigQuery 中创建一个函数。首先,您将创建并部署 Java Cloud Functions 函数,以使用 Gemini 1.0 Pro Vision 模型比较图片;然后,您将在 BigQuery 中创建远程函数,以调用已部署的 Cloud Functions 函数。请注意,对于 BigQuery 中的任何远程函数执行,都可以遵循相同的过程。
那么,让我们开始吧!
第 1 步:创建 Java Cloud Functions 函数
您将构建一个第 2 代 Java Cloud Function,用于根据基准映像验证测试映像。基准图片存储在 BigQuery 中外部表内包含测试图片屏幕截图的数据集中。您将使用 Gemini Pro Vision 模型 (Java SDK) 验证图片。然后,您将 Java Cloud Functions 函数部署到 REST 端点。
请按照以下步骤操作:
- 启动 Cloud Shell Editor。
- 如果您使用的是旧版编辑器,请点击试用新编辑器。
- 在状态栏中,点击 Cloud Code - Sign In(Cloud Code - 登录)。
- 如果系统提示您授权 Cloud Shell 编辑器进行 Google Cloud API 调用,请点击授权。按照提示登录您的 Google 账号。您现已连接到 Google Cloud。
- 如果您在 Cloud Code 状态栏中没有看到自己的云项目,请依次点击 Cloud Code - 登录 > 选择 Google Cloud 项目。选择要在其中创建 Cloud Functions 函数的 Google Cloud 项目。该项目会加载并变为 Cloud Shell Editor 中的活跃项目。
- 在 Cloud Code 状态栏中,点击有效项目名称。在显示的快速选择菜单中,选择新应用。
- 在 Create New Application 对话框中,选择 Cloud Functions application。

- 在系统提示您选择模板时,选择 Java:Hello World。

- 在项目路径中输入
Gemini-BQ-Function作为项目名称。项目结构会显示在新的 Cloud Shell 编辑器视图中。

- 在
<dependencies>... </dependencies>标记内添加必要的依赖项,或从示例 pom.xml中复制依赖项。 - 将类的名称从
HelloWorld.java更改为更有意义的名称。假设为GeminiBigQueryFunction.java。相应地重命名软件包。 - 将 GeminiBigQueryFunction.Java 文件中的占位代码替换为 GitHub 代码库中提供的示例代码。请务必将示例代码中的变量 <YOUR_PROJECT_ID> 替换为您的项目 ID。
- 前往 Cloud Shell 终端。检查您是否位于项目目录中。如果不是,请执行以下命令,前往项目目录:
cd Gemini-BQ-Function
- 执行以下语句以构建和部署 Cloud Functions 函数:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .
将命令中的入口点替换为函数的入口点。输出是一个 REST 网址,格式如下:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
- 在终端中运行以下命令,测试此 Cloud Functions 函数:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'
针对随机抽样提示的回答:

太棒了!用于 Gemini Pro Vision 模型实现的通用 Cloud Functions 已准备就绪。我们来直接在 BigQuery 远程函数中使用此端点来处理 BigQuery 数据。
第 2 步:创建 BigQuery 对象表和远程函数
前提条件
您需要一个 Cloud Storage 存储分区才能完成本练习。请按照以下步骤创建 Cloud Storage 存储分区:
- 如需创建存储分区,请前往 Cloud Storage 控制台,然后点击创建。
- 输入
demo-bq-gemini-public-image作为存储分区名称,然后点击创建。 - 取消选中
Enforce public access prevention on this bucket选项。虽然您在本练习中创建此存储分区是为了公开访问,但我们建议您阻止公开访问,并根据企业使用情形的需要向特定服务账号授予权限。 - 创建存储分区后,前往权限标签页即可查看和更改权限。
- 如需添加正文,请点击授予访问权限。指定服务账号 ID 以向特定账号授予权限,或指定
allUsers以向您的存储分区授予公开访问权限。 - 选择
Storage Object Viewer角色,然后点击保存。如果系统提示,请选择允许公开访问。 - 前往对象标签页,然后上传要比较的基准图片和测试图片。在此 Codelab 中,您可以上传以下公开提供的对象:baseline.JPG、TEST1.JPG 和 TEST2.JPG。
创建 BigQuery 对象表
通过 BigQuery 创建外部对象表,以使用您之前创建的连接和数据集访问存储分区中的非结构化数据。为此,请在 BigQuery 查询编辑器窗格中执行以下 DDL(数据定义语言)语句:
CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);
检查您的数据集中是否已创建名为 image_validation 的新对象表。
创建 BigQuery 远程函数
在 BigQuery 中创建一个远程函数,以调用实现 Gemini Pro Vision 模型的 Java Cloud Functions 函数。在同一数据集中创建此视图。为此,请在 BigQuery 控制台的 SQL 编辑器窗格中运行以下 DDL:
CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
max_batching_rows = 1
);
端点网址是本练习前面返回的 REST 网址。这会在 BigQuery 中创建远程函数。上述 DDL 中有三个参数。前两个形参是存储在在上一步中创建的对象表中的图片的网址。最后一个参数是向模型 (Gemini Pro Vision) 发出的提示。您可以参考用于解析此签名的 Java Cloud Functions 函数代码:
Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();
从 BigQuery 调用 Gemini
在 SELECT 查询中使用远程函数,以测试该函数是否能根据提示验证图片。
select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image. Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';
尝试使用 TEST1 和 TEST2 对象文件运行上述查询。您会看到类似如下所示的结果:

以下图片供您参考:
基准图片

测试图片

请注意,这两张图片都显示了 Duet AI Cloud 控制台视图,但其中的文字不同,这是由模型以 JSON 格式生成的。
至此,您已成功测试远程函数实现。
7. 优势和使用场景
下面我们来看看将 BigQuery 和 Gemini 集成在一起以分析结构化和非结构化数据有哪些好处。
- 将生成式 AI 引入数据:无需再移动数据、复制数据,也无需再增加复杂性。您可以在同一 BigQuery 环境中分析数据并生成数据分析。
- 增强型分析:Gemini 的自然语言说明可让您更深入地了解数据,而您只需使用 SQL 查询即可实现这一点。
- 可伸缩性:此解决方案可轻松处理大型数据集和复杂分析,且只需少量代码。
这种方法有很多应用场景。考虑金融(市场趋势分析)、零售(客户情绪)、医疗保健(医疗报告摘要)等场景,在这些场景中,您的分析和业务团队可以相对轻松地使用熟悉的语言和工具来实现这些功能,而无需投入大量资源。
8. 清理
为避免系统因本博文中使用的资源向您的 Google Cloud 账号收取费用,请按照以下步骤操作:
- 在 Google Cloud 控制台中,前往管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关停以删除项目。
- 如果您想保留项目,请跳过上述步骤,然后前往 Cloud Functions,从函数列表中选中要删除的 Cloud Function,然后点击删除,即可删除该函数。
9. 恭喜
恭喜!借助集成到 BigQuery 中的 Gemini 模型,您不再只是分析数据,而是数据故事讲述者。您可以发掘数据集中的隐藏叙事,并转变您理解数据洞见的方式。开始实验!将此技术应用于您自己的数据集,发掘数据中的故事。由于 BigQuery 支持对象表(外部表)中的非结构化数据,因此您可以尝试使用 Gemini Pro Vision 基于图片数据生成生成式洞见。如需更深入的指导,请参阅 Vertex AI、BigQuery 远程函数和 Cloud Functions 的文档。以下是此项目的 GitHub 代码库。欢迎告诉我们您通过学习本课程开发了哪些内容!