Оптимизируйте развертывание пользовательских функций BigQuery с помощью автоматизации GitHub Actions.
Введение
Как профессионалы в области данных, мы постоянно ищем лучшие и более эффективные способы управления нашим хранилищем данных. Google BigQuery — впечатляющее бессерверное хранилище данных, которое позволяет анализировать огромные наборы данных в режиме реального времени. Одним из интересных аспектов BigQuery является его поддержка пользовательских функций с использованием SQL и JavaScript. Однако, несмотря на удобство пользовательских функций, их развертывание может оказаться утомительной задачей.
Не бойся! В этой статье мы рассмотрим возможности GitHub Actions для автоматизации развертывания ваших пользовательских функций BigQuery. Используя возможности CI/CD GitHub Actions, вы можете сосредоточиться на создании безупречного кода, в то время как процесс развертывания выполняется автоматически.
Разминка перед игрой
Создайте учетную запись службы для GitHub
Перейдите в раздел IAM консоли GCP и добавьте новую учетную запись службы.
В разделе «Предоставить этому сервисному аккаунту доступ к проекту» выберите либо Администратор BigQuery, либо Пользователь задания BigQuery. Сервисный аккаунт должен иметь возможность запускать задания BigQuery!
Теперь перейдите в раздел «Сервисные аккаунты» и выберите созданный вами новый аккаунт — надеюсь, вы назвали его как-то разумно, например GitHub_Actions
или подобное. Затем перейдите на вкладку Ключи и сгенерируйте новый ключ. После того, как вы загрузили ключ JSON, пришло время добавить его в качестве секрета на GitHub.
Добавьте секрет в репозиторий GitHub
В настройках репозитория выберите "Секреты и переменные > Действия" и добавьте новый секрет репозитория. Назовите это GCP_SA_KEY
. Это имя я буду использовать в примерах ниже.
Добавление пользовательской функции
Шаг 1. Разместите свои пользовательские функции BigQuery
Начните с создания каталога в вашем репозитории GitHub, посвященного вашим пользовательским функциям. Я покажу вам, как создавать пользовательские функции SQL, но создавать функции JavaScript так же просто. У каждой функции должен быть свой собственный файл SQL, соответствующий определенному соглашению об именах, например «имя_функции.sql».
Вот пример функции SQL:
CREATE OR REPLACE FUNCTION circle_area(radius FLOAT64) RETURNS FLOAT64 AS ( 3.141592653589793 * POW(radius, 2) ) OPTIONS ( description = 'Calculate the area of a circle.' );
Обратите внимание, что я не использовал имя набора данных. Мы сообщим BQ, в какой набор данных отправлять функции внутри рабочего процесса действий, чтобы нам не нужно было дублировать эту информацию в сценариях функций.
Для получения дополнительной информации о пользовательских функциях ознакомьтесь с документацией или прочтите некоторые из моих статей 😉:
Шаг 2. Подготовка к рабочему процессу GitHub Actions
Чтобы установить новый рабочий процесс GitHub Actions, добавьте новый файл YAML (например, bigquery-deploy.yml
) в каталог .github/workflows/
вашего репозитория. В этом файле будет храниться конфигурация, необходимая для вашего процесса развертывания.
Шаг 3. Суть дела: настройка рабочего процесса
Теперь давайте вдохнем жизнь в файл bigquery-deploy.yml
, настроив следующие параметры:
Триггер: определите, что развертывание будет инициировано push-событием в основной ветке. Чтобы узнать больше о событиях, ознакомьтесь с документацией GitHub.
on: push: branches: - main
Переменные среды. Введите идентификатор проекта GCP и идентификатор набора данных BigQuery в качестве переменных среды. Это сообщит BigQuery, какой проект и набор данных нужно обновить.
env: GCP_PROJECT_ID: your_project_id BQ_DATASET_ID: your_dataset_id
Задания. Опишите шаги, необходимые для развертывания ваших пользовательских функций в BigQuery. Мы начнем с извлечения репозитория, аутентификации с помощью официального шага GCP Github Action, добавления инструментов gcloud и, наконец, мы отправим несколько команд для каждого файла в папке custom_functions
:
jobs: deploy-custom-functions: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - id: 'auth' uses: 'google-github-actions/auth@v1' with: credentials_json: '${{ secrets.GCP_SA_KEY }}' - name: 'Set up Cloud SDK' uses: 'google-github-actions/setup-gcloud@v1' - name: Deploy BigQuery custom functions run: | for function in custom_functions/*; do bq --project_id $GCP_PROJECT_ID --dataset_id $BQ_DATASET_ID query --nouse_legacy_sql "$(cat $function)" done
Вот полный yaml-файл рабочего процесса, который можно легко скопировать:
Не забудьте обновить
your_project_id
иyour_dataset_id
, а такжеGCP_SA_KEY
(если вы назвали свой секрет по-другому)!
Время для тест-драйва: внесите свои изменения
Зафиксируйте и отправьте файл bigquery-deploy.yml
в свой репозиторий. Это запустит рабочий процесс GitHub Actions, беспрепятственно развернув ваши пользовательские функции в BigQuery. После завершения конвейера вы должны увидеть свои пользовательские функции под routines
в разделе GCP BigQuery.
Вот наша функция в действии:
Заключение
Используя GitHub Actions, вы можете автоматизировать развертывание пользовательских функций BigQuery, сделав свой процесс разработки более эффективным и безошибочным. Помните, что вы можете добавить в эту папку столько функций SQL, сколько захотите, и скрипт без проблем развернет их все. Эта настройка позволяет вам сосредоточиться на написании качественного кода, в то время как GitHub Actions обрабатывает процесс развертывания. Удачного кодирования!