1. Введение
Рабочие процессы – это полностью управляемая служба оркестрации, которая выполняет Google Cloud или внешние службы в заданном вами порядке.
BigQuery — это полностью управляемое корпоративное хранилище данных, которое помогает вам управлять терабайтами данных и анализировать их с помощью встроенных функций, таких как машинное обучение, геопространственный анализ и бизнес-аналитика.
В этой лаборатории кода вы выполните несколько запросов BigQuery к общедоступному набору данных Википедии. Затем вы увидите, как последовательно выполнять несколько запросов BigQuery один за другим в рамках оркестровки рабочих процессов. Наконец, вы распараллелите запросы, используя функцию параллельной итерации рабочих процессов, чтобы повысить скорость до 5 раз.
Что вы узнаете
- Как запускать запросы BigQuery к набору данных Википедии.
- Как последовательно запускать несколько запросов в рамках оркестрации рабочих процессов.
- Как распараллелить запросы с помощью параллельной итерации рабочих процессов для увеличения скорости до 5 раз.
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы можете обновить его в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Кроме того, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага, и он останется в силе на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.
В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.
3. Изучите набор данных Википедии.
Сначала изучите набор данных Википедии в BigQuery.
Перейдите в раздел BigQuery в Google Cloud Console:
В разделе bigquery-samples
вы должны увидеть различные общедоступные наборы данных, включая некоторые наборы данных, связанные с Википедией:
В наборе данных wikipedia_pageviews
вы можете увидеть различные таблицы просмотров страниц за разные годы:
Вы можете выбрать одну из таблиц (например, 201207
) и просмотреть данные:
Вы также можете выполнять запросы к таблице. Например, этот запрос выбирает 100 лучших заголовков с наибольшим количеством просмотров:
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
После запуска запроса загрузка данных занимает около 20 секунд:
4. Определите рабочий процесс для выполнения нескольких запросов.
Выполнить запрос к одной таблице легко. Однако выполнение нескольких запросов к нескольким таблицам и сопоставление результатов может оказаться довольно утомительным. Чтобы помочь в этом, рабочие процессы могут помочь с синтаксисом итерации !
Внутри Cloud Shell создайте файл workflow-serial.yaml
чтобы создать рабочий процесс для выполнения нескольких запросов к нескольким таблицам:
touch workflow-serial.yaml
Затем вы можете отредактировать файл с помощью редактора Cloud Shell:
Внутри файла workflow-serial.yaml
на первом этапе init
создайте карту results
для отслеживания каждой итерации, связанной с именами таблиц. Также определите массив tables
со списком таблиц, к которым вы хотите выполнять запросы. В данном случае мы выбираем 5 таблиц:
main: steps: - init: assign: - results : {} - tables: - 201201h - 201202h - 201203h - 201204h - 201205h
Затем определите шаг runQueries
. На этом этапе выполняется итерация по каждой таблице и используется коннектор BigQuery Workflows для выполнения запроса на поиск 100 самых популярных заголовков с наибольшим количеством просмотров страниц в каждой таблице. Затем он сохраняет верхний заголовок и представления из каждой таблицы на карте результатов:
- runQueries: for: value: table in: ${tables} steps: - runQuery: call: googleapis.bigquery.v2.jobs.query args: projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} body: useLegacySql: false useQueryCache: false timeoutMs: 30000 # Find the top 100 titles with most views on Wikipedia query: ${ "SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews." + table + "` WHERE LENGTH(TITLE) > 10 GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100" } result: queryResult - returnResult: assign: # Return the top title from each table - results[table]: {} - results[table].title: ${queryResult.rows[0].f[0].v} - results[table].views: ${queryResult.rows[0].f[1].v}
На последнем этапе верните карту results
:
- returnResults: return: ${results}
5. Запуск нескольких запросов с помощью рабочих процессов
Прежде чем вы сможете развернуть и запустить рабочий процесс, вам необходимо убедиться, что API рабочих процессов включен. Вы можете включить его из Google Cloud Console или с помощью gcloud
в Cloud Shell:
gcloud services enable workflows.googleapis.com
Создайте учетную запись службы для рабочих процессов:
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
Убедитесь, что у сервисного аккаунта есть роли для регистрации и выполнения заданий BigQuery:
PROJECT_ID=your-project-id gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/logging.logWriter \ --role roles/bigquery.jobUser \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Разверните рабочий процесс с помощью учетной записи службы:
gcloud workflows deploy bigquery-serial \ --source=workflow-serial.yaml \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Наконец, вы готовы запустить рабочий процесс.
Найдите рабочий процесс bigquery-serial
в разделе «Рабочие процессы» Cloud Console и нажмите кнопку Execute
:
Альтернативно вы также можете запустить рабочий процесс с помощью gcloud
в Cloud Shell:
gcloud workflows run bigquery-serial
Вы должны увидеть выполнение рабочего процесса, продолжающееся около 1 минуты (20 секунд для каждой из 5 таблиц).
В конце вы увидите выходные данные каждой таблицы с наиболее популярными заголовками и представлениями:
6. Распараллельте несколько запросов с помощью параллельных шагов
Рабочий процесс на предыдущем шаге занял около 1 минуты, поскольку было выполнено 5 запросов, каждый из которых занимал 20 секунд. Поскольку это независимые запросы, вы можете запускать их параллельно, используя функцию параллельной итерации рабочих процессов.
Скопируйте файл workflow-serial.yaml
в новый workflow-parallel.yaml
. В новом файле вы внесете пару изменений, чтобы превратить последовательные шаги в параллельные.
В файле workflow-parallel.yaml
измените шаг runQueries
. Сначала добавьте ключевое слово parallel
. Это позволяет каждой итерации цикла for выполняться параллельно. Во-вторых, объявите переменную results
как shared
переменную. Это позволяет ветке иметь возможность записи в переменную. Мы будем добавлять каждый результат к этой переменной.
- runQueries: parallel: shared: [results] for: value: table in: ${tables}
Разверните параллельный рабочий процесс:
gcloud workflows deploy bigquery-parallel \ --source=workflow-parallel.yaml \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Запустите рабочий процесс:
gcloud workflows run bigquery-parallel
Вы должны увидеть выполнение рабочего процесса, продолжающееся около 20 секунд. Это связано с тем, что все 5 запросов выполняются параллельно. Увеличение скорости до 5 раз всего за пару строк кода!
В конце концов вы увидите одинаковые выходные данные из каждой таблицы с лучшими заголовками и представлениями, но с гораздо более коротким временем выполнения:
7. Поздравления
Поздравляем, вы завершили работу над кодом! Чтобы узнать больше, ознакомьтесь с документацией рабочих процессов по параллельным шагам .
Что мы рассмотрели
- Как запускать запросы BigQuery к набору данных Википедии.
- Как последовательно запускать несколько запросов в рамках оркестрации рабочих процессов.
- Как распараллелить запросы с помощью параллельной итерации рабочих процессов для увеличения скорости до 5 раз.