1. Введение
Огромные массивы данных содержат ценную информацию, но извлечение из них осмысленных данных может быть сложной задачей. Традиционные аналитические инструменты часто не справляются с предоставлением подробных, понятных человеку объяснений, которые помогли бы нам по-настоящему понять суть наших данных. Хранилища данных содержат все больше неструктурированных данных, но эти данные не всегда были доступны для получения ценных выводов. Неструктурированный текст, изображения и видео содержат ценную информацию для развития вашего бизнеса. Модели LLM предлагают новый мощный способ понимания ваших данных, предоставляя объяснения, анализ настроений, обнаружение объектов и многое другое. С появлением мультимодальных моделей (и возможностью хранения объектных данных, таких как изображения и видео, в BigQuery через объектные таблицы) интеграция мощных моделей LLM, таких как Gemini 1.0 Pro (для анализа текста) и Gemini 1.0 Pro Vision (для анализа текста и изображений/видео), с BigQuery может кардинально изменить подход к анализу данных.
В этом практическом занятии мы рассмотрим два метода извлечения аналитических данных LLM из корпоративных данных и масштабирования этих данных до тысяч строк в BigQuery:
Метод 1: Удаленный вызов модели
- Вызовите Gemini 1.0 Pro из BigQuery, используя
ML.GENERATE_TEXTв запросеSELECT. - Этот подход следует использовать, если модель уже доступна в качестве удаленной модели в BigQuery, и вы хотите использовать ее без дополнительных настроек. Проверьте статус модели, которую вы хотите использовать, в документации BigQuery.
Метод 2: Реализация удаленной функции
- Вызовите облачную функцию, реализующую вызов Gemini 1.0 Pro Vision, доступную в качестве удаленной функции в BigQuery .
- Этот подход следует использовать, если нужная вам модель либо недоступна по умолчанию в качестве удаленной модели , либо вам требуется большая гибкость и возможность индивидуальной настройки в вашем конкретном случае.
Что вы построите
- Для метода удаленного вызова модели вам потребуется создать сводку местоположений для набора данных книг интернет-архива (который находится в открытом доступе в BigQuery), вызвав удаленную модель для Gemini 1.0 Pro в конструкции ML.GENERATE_TEXT в BigQuery.

- Для метода удаленной реализации функции вам потребуется создать валидатор изображений для проверки тестовых изображений на соответствие базовому изображению. Для этого вы создадите набор данных, содержащий скриншоты тестовых изображений, во внешней таблице и попросите Gemini 1.0 Pro Vision проверить их на соответствие базовому изображению. Затем вы создадите облачную функцию Java, реализующую вызов Gemini Pro Vision, и вызовете её как удаленную функцию в BigQuery.

Примечание:
Возможно, в BigQuery доступно больше моделей генеративного ИИ Vertex AI в качестве удаленных моделей. Это означает, что вы можете получить доступ к этим моделям с помощью конструкции ML.GENERATE_TEXT из BigQuery без дополнительных настроек. Однако, даже в случае доступности удаленных моделей, у вас всегда есть возможность создать расширенные настройки для вашего варианта использования с помощью Cloud Functions, а затем получить доступ к этим моделям как к удаленным функциям из BigQuery.
Почему именно BigQuery?
BigQuery — это бессерверное многооблачное хранилище данных, масштабируемое от байтов до петабайтов с минимальными эксплуатационными затратами, и поэтому является отличным выбором для хранения обучающих данных машинного обучения. Используя встроенные возможности BigQuery Machine Learning (BQML) и аналитики, вы можете создавать прогнозы без написания кода, используя только SQL-запросы. Кроме того, вы можете получать доступ к данным из внешних источников с помощью федеративных запросов, что исключает необходимость в сложных конвейерах ETL.
BigQuery — это полностью управляемое облачное хранилище данных, которое помогает пользователям анализировать структурированные, полуструктурированные и неструктурированные данные.
2. Требования
3. Прежде чем начать
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
- Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и поставляемую с предустановленным bq. Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud.

- После подключения к Cloud Shell необходимо проверить, прошли ли вы аутентификацию и установлен ли идентификатор вашего проекта, используя следующую команду:
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 Run
- Vertex AI
- Cloud Build
- API облачного хранилища
Альтернативой использованию команды gcloud является работа через консоль, перейдя по этой ссылке .
Для получения информации о командах gcloud и их использовании обратитесь к документации .
4. Создайте набор данных BigQuery и внешнее подключение.
Начнём с создания набора данных и подключения к облачному ресурсу.
В BigQuery набор данных — это контейнер для всех таблиц и объектов вашего приложения.
Для создания набора данных выполните следующие действия:
- Перейдите на страницу BigQuery в консоли Google Cloud.
- На панели «Проводник» выберите проект, в котором вы хотите создать набор данных.
- Разверните раздел «Действия» (значок вертикального многоточия) и нажмите «Создать набор данных» .

- Нажмите «Создать набор данных» .
- Введите
gemini_bq_fnв поле "Идентификатор набора данных" . - Укажите тип местоположения как
Multi-regionи примите значение по умолчанию —US(multiple regions in United States. - Нажмите «Создать набор данных» .
- Убедитесь, что набор данных создан и отображается в панели «Проводник» под идентификатором вашего проекта.
Для взаимодействия с вашей облачной функцией требуется подключение к BigQuery. Чтобы создать удаленную функцию, необходимо создать подключение к BigQuery. В этом практическом занятии мы будем использовать подключение BigLake для доступа к модели из BigQuery через облачную функцию. Подключения BigLake помогают подключаться к внешнему источнику данных, сохраняя при этом детальный контроль доступа и безопасность BigQuery, в нашем случае это API Vertex AI Gemini Pro.
Для создания подключения к BigLake выполните следующие действия:
- В панели «Проводник» на странице BigQuery нажмите кнопку «Добавить» .

- Нажмите «Подключения к внешним источникам данных» .
- В меню «Тип подключения» выберите удаленные модели Vertex AI, удаленные функции и BigLake (облачный ресурс).
- В поле «Идентификатор подключения» введите имя подключения в формате
gemini-bq-conn. - Укажите тип местоположения как
Multi-regionи примите значение по умолчанию —US(multiple regions in United States. - Нажмите «Создать соединение» .
- Нажмите «Перейти к подключению», а затем скопируйте идентификатор учетной записи службы в области «Информация о подключении» .

- Перейдите на страницу IAM и администрирование и нажмите «Предоставить доступ» .
- Вставьте идентификатор учетной записи службы в поле «Новые принципы» .
- Выберите роль
Vertex AI userиз списка ролей, а затем нажмите «Сохранить» .

Вы успешно создали набор данных и подключились к BigQuery. Далее вам предстоит выполнить шаги, необходимые для удаленного вызова модели.
5. Вариант использования №1. Удаленный вызов модели: Настройка удаленного вызова модели.
Теперь, когда вы создали свой набор данных и подключились к нему, давайте создадим модель в BigQuery на основе базовой модели Vertex AI Gemini Pro. В конце этого упражнения ваше приложение LLM будет запущено и работать, используя только SQL-запросы.
Шаг 1: Создайте таблицу BigQuery , содержащую входные данные для удаленной модели.
Создайте в своем наборе данных таблицу с именем books , которая сможет вместить около 50 записей из таблицы bigquery-public-data.gdelt_internetarchivebooks.1905 в наборе данных Internet Archive Books, предназначенном для публичного использования BigQuery.
Для этого выполните следующее выражение DDL (язык определения данных) в панели редактора SQL BigQuery:
create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)
Шаг 2: Создайте модель BigQuery.
Создайте модель в своем наборе данных. Для этого выполните следующий DDL-скрипт в панели редактора SQL BigQuery:
CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');
Обратите внимание, что модель создана с возможностью просмотра.
Шаг 3: Протестируйте ваше новое приложение на основе генеративного ИИ.
Используйте функцию ML.GENERATE_TEXT в запросе SELECT , чтобы отправить запрос удаленной модели.
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.
Теперь давайте попробуем другую модель Vertex AI, использующую удаленные функции BigQuery. Допустим, вы хотите добавить больше возможностей для настройки и гибкости в способ удаленного использования модели в BigQuery. Список поддерживаемых моделей приведен в документации BigQuery.
6. Вариант использования №2. Реализация удаленной функции: Настройка реализации удаленной функции.
В этом упражнении вы создадите функцию в BigQuery на основе Java Cloud Function, реализующую базовую модель Gemini 1.0 Pro Vision. Сначала вы создадите и развернете Java Cloud Function для сравнения изображений с использованием модели Gemini 1.0 Pro Vision, а затем создадите удаленную функцию в BigQuery, которая будет вызывать развернутую Cloud Function. Помните, что ту же процедуру можно выполнить для любого удаленного выполнения функции в BigQuery.
Итак, начнём!
Шаг 1: Создайте облачную функцию Java.
Вам предстоит создать облачную функцию второго поколения на Java для проверки тестовых изображений по сравнению с базовым изображением. Базовое изображение хранится во внешней таблице BigQuery, содержащей скриншоты тестовых изображений. Вы будете проверять изображения с помощью модели Gemini Pro Vision (Java SDK). Затем вы развернете облачную функцию Java на REST-сервере.
Выполните следующие шаги:
- Запустите редактор Cloud Shell .
- Если вы используете устаревший редактор, нажмите « Попробовать новый редактор» .
- В строке состояния нажмите «Cloud Code — Войти» .
- Если появится запрос на авторизацию Cloud Shell Editor для выполнения вызовов Google Cloud API, нажмите «Авторизовать» . Следуйте инструкциям, чтобы войти в свою учетную запись Google. Теперь вы подключены к Google Cloud.
- Если вы не видите свой проект в строке состояния Cloud Code, нажмите Cloud Code - Войти > Выберите проект Google Cloud. Выберите проект Google Cloud, в котором вы хотите создать свои облачные функции. Проект загрузится и станет активным проектом в редакторе Cloud Shell.
- В строке состояния Cloud Code щелкните имя активного проекта. В появившемся меню быстрого выбора выберите «Новое приложение» .
- В диалоговом окне «Создать новое приложение» выберите приложение «Облачные функции».

- При выборе шаблона выберите Java: Hello World .

- Введите
Gemini-BQ-Functionв качестве имени проекта в поле «Путь к проекту». Структура проекта отобразится в новом окне редактора Cloud Shell.

- Добавьте необходимые зависимости внутри тега
<dependencies>... </dependencies>или скопируйте зависимости из примера файла pom.xml . - Измените имя вашего класса с
HelloWorld.javaна что-нибудь более осмысленное. Например, наGeminiBigQueryFunction.java. Переименуйте пакет соответствующим образом. - Замените код-заполнитель в файле GeminiBigQueryFunction.Java примером кода, предоставленным в репозитории GitHub . Убедитесь, что переменная <YOUR_PROJECT_ID> в примере кода заменена на идентификатор вашего проекта.
- Перейдите в терминал Cloud Shell. Убедитесь, что вы находитесь в каталоге вашего проекта. Если нет, перейдите в каталог проекта, выполнив следующую команду:
cd Gemini-BQ-Function
- Выполните следующую команду для создания и развертывания облачной функции:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .
Замените точку входа в команде на точку входа вашей функции. В результате будет получен REST-URL в следующем формате:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
- Протестируйте эту облачную функцию, выполнив следующую команду в терминале:
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 готова. Давайте использовать эту конечную точку напрямую для работы с данными BigQuery из удаленной функции BigQuery.
Шаг 2: Создайте объектную таблицу BigQuery и удаленную функцию.
Предварительное условие
Для этой части задания вам понадобится хранилище Cloud Storage. Выполните следующие шаги, чтобы создать хранилище Cloud Storage:
- Чтобы создать корзину, перейдите в консоль Cloud Storage и нажмите «Создать» .
- Введите
demo-bq-gemini-public-imageв качестве имени вашего хранилища и нажмите «Создать» . - Снимите флажок
Enforce public access prevention on this bucket. Хотя в этом упражнении вы создаете это хранилище для публичного доступа, мы рекомендуем запретить публичный доступ и предоставить разрешения определенным учетным записям служб в соответствии с требованиями вашей корпоративной среды. - После создания корзины перейдите на вкладку «Разрешения» , чтобы просмотреть и изменить разрешения.
- Чтобы добавить субъекты, нажмите «Предоставить доступ». Укажите идентификатор учетной записи службы, чтобы предоставить разрешения определенной учетной записи, или укажите
allUsers, чтобы предоставить публичный доступ к вашему хранилищу. - Выберите роль «
Storage Object Viewerи нажмите «Сохранить» . При появлении запроса разрешите публичный доступ. - Перейдите на вкладку «Объекты» и загрузите базовые изображения и тестовые изображения для сравнения. Для этого практического занятия вы можете загрузить следующие общедоступные объекты: baseline.JPG , TEST1.JPG и TEST2.JPG .
Создайте объектную таблицу BigQuery.
Создайте внешнюю объектную таблицу в BigQuery для доступа к неструктурированным данным в хранилище, используя созданное ранее соединение и набор данных. Для этого выполните следующее оператор DDL (язык определения данных) в панели редактора запросов BigQuery:
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 для вызова облачной функции Java, реализующей модель Gemini Pro Vision. Создайте её в том же наборе данных. Для этого выполните следующий DDL-скрипт из панели редактора SQL в консоли BigQuery:
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
);
URL-адрес конечной точки — это REST-адрес, полученный ранее в этом упражнении. Это создает удаленную функцию в BigQuery. В приведенном выше DDL-коде три параметра. Первые два параметра — это URL-адреса изображений, хранящихся в таблице объектов, созданной на предыдущем шаге. Последний параметр — это запрос к модели (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();
Вызов Gemini из BigQuery
Используйте удаленную функцию в запросе 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, но текст на них отличается, что обусловлено форматом модели в формате JSON.
Таким образом, вы успешно протестировали реализацию удаленной функции.
7. Преимущества и варианты использования
Рассмотрим некоторые преимущества интеграции BigQuery и Gemini для анализа структурированных и неструктурированных данных.
- Внедрение GenAI в ваши данные: больше никаких перемещений данных, дублирования и дополнительной сложности. Вы можете анализировать данные и получать ценные выводы в одной и той же среде BigQuery.
- Расширенные аналитические возможности: пояснения на естественном языке от Gemini добавляют новый уровень понимания ваших данных, и вы можете достичь этого с помощью SQL-запросов.
- Масштабируемость: Это решение легко справляется с большими наборами данных и сложным анализом, требуя при этом минимальных усилий по написанию кода.
Области применения этого подхода многочисленны. Рассмотрим сценарии в финансовой сфере (анализ рыночных тенденций), розничной торговле (анализ потребительских настроений), здравоохранении (анализ медицинских отчетов) и т. д., где ваши аналитические и бизнес-команды могли бы внедрить это с относительно небольшими усилиями, ресурсами и с помощью знакомого языка программирования и инструментария.
8. Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой статье, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
- В списке проектов выберите проект, который хотите удалить, и нажмите кнопку «Удалить» .
- В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить» , чтобы удалить проект.
- Если вы хотите сохранить свой проект, пропустите описанные выше шаги и удалите облачную функцию, перейдя в раздел «Облачные функции», выбрав в списке функций ту, которую хотите удалить, и нажав кнопку «Удалить» .
9. Поздравляем!
Поздравляем! Благодаря интеграции моделей Gemini в BigQuery вы больше не просто анализируете данные — вы становитесь рассказчиком историй на основе данных. Вы можете генерировать скрытые повествования в своих наборах данных и трансформировать свое понимание полученных результатов. Начните экспериментировать! Примените этот метод к своим собственным наборам данных и откройте для себя истории, скрытые в ваших данных. Поскольку BigQuery поддерживает неструктурированные данные в объектных таблицах ( внешние таблицы ), попробуйте использовать Gemini Pro Vision для создания генеративных выводов на основе данных изображений . Для получения более подробной информации обратитесь к документации по Vertex AI , удаленным функциям BigQuery и облачным функциям . Вот репозиторий GitHub для этого проекта. Расскажите нам, что вы создали, используя полученные знания!