Начало работы с Spanner Data Boost и BigQuery

1. Введение

В этой лаборатории кода вы узнаете, как использовать Spanner Data Boost для запроса данных Spanner из BigQuery с использованием интегрированных запросов с нулевым ETL и без воздействия на базу данных Spanner.

f1de68f762a86cc7.png

Spanner Data Boost — это полностью управляемая бессерверная служба, предоставляющая независимые вычислительные ресурсы для поддерживаемых рабочих нагрузок Spanner. Data Boost позволяет выполнять аналитические запросы и экспортировать данные практически с нулевым влиянием на существующие рабочие нагрузки на подготовленном экземпляре Spanner, используя бессерверную модель использования по требованию.

В сочетании с внешними подключениями BigQuery Data Boost позволяет легко запрашивать данные из Spanner в вашу платформу анализа данных без сложного перемещения данных ETL.

Предварительные условия

  • Базовое понимание Google Cloud, консоли.
  • Базовые навыки работы с интерфейсом командной строки и оболочкой Google.

Что вы узнаете

  • Как развернуть экземпляр Spanner
  • Как загрузить данные для создания базы данных Spanner
  • Как получить доступ к данным Spanner из BigQuery без Data Boost
  • Как получить доступ к данным Spanner из BigQuery с помощью Data Boost

Что вам понадобится

  • Учетная запись Google Cloud и проект Google Cloud
  • Веб-браузер, например Chrome

2. Настройка и требования

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:

55efc1aaa7a4d3ad.png

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

7ffe5cbb04455448.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.

3. Создайте экземпляр Spanner и базу данных.

Включить API-интерфейс Spanner

В Cloud Shell убедитесь, что идентификатор вашего проекта настроен:

gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)

Настройте регион по умолчанию us-central1 . Не стесняйтесь изменить это на другой регион, поддерживаемый региональными конфигурациями Spanner.

gcloud config set compute/region us-central1

Включите Spanner API:

gcloud services enable spanner.googleapis.com

Создайте экземпляр Spanner

На этом этапе мы настраиваем экземпляр Spanner для лаборатории кода. Для этого откройте Cloud Shell и выполните следующую команду:

export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1

Вывод команды:

$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.  

Создать базу данных

После запуска экземпляра вы можете создать базу данных. Spanner позволяет использовать несколько баз данных в одном экземпляре.

База данных — это место, где вы определяете свою схему. Вы также можете контролировать, кто имеет доступ к базе данных, настраивать собственное шифрование, настраивать оптимизатор и устанавливать период хранения.

Чтобы создать базу данных, снова используйте инструмент командной строки gcloud:

export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

Вывод команды:

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

4. Загрузите данные

Прежде чем вы сможете использовать Data Boost, вам необходимо иметь некоторые данные в базе данных. Для этого вы создадите корзину Cloud Storage, загрузите в нее импорт avro и запустите задание импорта потока данных , чтобы загрузить данные Avro в Spanner.

Включить API

Для этого откройте приглашение Cloud Shell, если предыдущее было закрыто.

Обязательно включите API вычислений, облачного хранилища и потока данных.

gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com

Ожидаемый вывод консоли:

$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.

Поэтапный импорт файлов в облачном хранилище

Теперь создайте корзину для хранения файлов avro:

export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET

Ожидаемый вывод консоли:

$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...

Затем загрузите tar-файл с github и распакуйте его.

wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz 

Ожидаемый вывод консоли:

$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz 
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001

А теперь загрузите файлы в созданную вами корзину.

gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive

Ожидаемый вывод консоли:

$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json           
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
  Completed files 13/13 | 54.6MiB/54.6MiB                                                                                               

Average throughput: 46.4MiB/s

Импортировать данные

Имея файлы в облачном хранилище, вы можете запустить задание импорта потока данных, чтобы загрузить данные в Spanner.

gcloud dataflow jobs run import_chatdb \
    --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
    --region us-central1 \
    --staging-location gs://$GCS_BUCKET/tmp \
    --parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db

Ожидаемый вывод консоли:

$ gcloud dataflow jobs run import_chatdb \
>     --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
>     --region us-central1 \
>     --staging-location gs://$GCS_BUCKET/tmp \
>     --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH

Вы можете проверить статус задания импорта с помощью этой команды.

gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1

Ожидаемый вывод консоли:

$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID                                   NAME           TYPE   CREATION_TIME        STATE    REGION
*snip*                                  import_chatdb  Batch  2024-04-*snip*  Done  us-central1

Проверьте данные в Spanner

Теперь перейдите в Spanner Studio и убедитесь, что данные там. Сначала разверните таблицу тем, чтобы просмотреть столбцы.

cd1cf38efd2b974a.png

Теперь выполните следующий запрос, чтобы убедиться в доступности данных:

SELECT COUNT(*) FROM topics;

Ожидаемый результат:

89e5d92fbe71c022.png

5. Чтение данных из BigQuery

Теперь, когда у вас есть данные в Spanner, пришло время получить к ним доступ из BigQuery. Для этого вам нужно настроить внешнее подключение к Spanner в BigQuery.

Предполагая, что у вас есть необходимые разрешения, создайте внешнее подключение к Spanner, выполнив следующие действия.

Нажмите кнопку «Добавить» в верхней части консоли BigQuery и выберите параметр «Подключения к вечным источникам данных».

580a0d237f11a9c5.png

75968de398fabf7e.png

Теперь вы можете запустить запрос на чтение данных из Spanner. Запустите этот запрос в консоли BigQuery, обязательно заменяя значение ${PROJECT_ID}:

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Пример вывода:

e47265487c3e39bd.png

Вы можете просмотреть информацию о задании, например, сколько времени потребовалось для выполнения и сколько данных было обработано, на вкладке «Информация о задании».

9ae40b0aa8c4891.png

Далее вы добавите соединение Data Boost к Spanner и сравните результаты.

6. Чтение данных с помощью Data Boost

Чтобы использовать Spanner Data Boost, вам необходимо создать новое внешнее соединение от BigQuery к Spanner. Нажмите «Добавить» в консоли BigQuery и снова выберите « Connections from external data sources ».

Заполните данные, используя тот же URI подключения к Spanner. Измените «Идентификатор подключения» и установите флажок «Использовать увеличение данных».

8e2205255b56a279.png

После создания соединения Data Boost вы можете выполнить тот же запрос, но с новым именем соединения. Опять же, замените свой project_id в запросе.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Вы должны получить тот же набор результатов, что и раньше. Время изменилось?

7. Понимание увеличения данных

Spanner Data Boost позволяет вам использовать ресурсы, не связанные с ресурсами вашего экземпляра Spanner. Это в первую очередь снижает влияние аналитических рабочих нагрузок на операционные нагрузки.

Вы можете увидеть это, если запустите запрос на отказ от использования Data Boost несколько раз в течение двух или трех минут. Не забудьте заменить ${PROJECT_ID} .

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Затем подождите еще несколько минут и запустите запрос, чтобы использовать Data Boost, еще несколько раз. Не забудьте заменить ${PROJECT_ID} .

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Теперь вернитесь в студию Spanner в облачной консоли и перейдите в System Insights.

c1dc67fcc7a2a71.png

Здесь вы можете увидеть показатели процессора. Запросы, выполняемые без Data Boost, используют ЦП для операций «executesql_select_withpartitiontoken». Несмотря на то, что запрос тот же, выполнение Data Boost не отражается на загрузке ЦП вашего экземпляра.

а86а7508b6738904.png

Во многих случаях производительность аналитического запроса улучшится при использовании Data Boost. Набор данных в этом руководстве небольшой, и другие рабочие нагрузки не конкурируют за ресурсы. Таким образом, это руководство не предполагает демонстрации улучшения производительности.

Не стесняйтесь экспериментировать с запросами и рабочими нагрузками и посмотреть, как работает Data Boost. Когда вы закончите, перейдите к следующему разделу, чтобы очистить среду.

8. Очистите окружающую среду

Если вы создали свой проект специально для этой лаборатории кода, вы можете просто удалить проект, чтобы очистить его. Если вы хотите сохранить проект и очистить отдельные компоненты, выполните следующие действия.

Удаление подключений BigQuery

Чтобы удалить оба соединения, нажмите на три точки рядом с именем соединения. Выберите «Удалить», затем следуйте инструкциям, чтобы удалить соединение.

c9348832bcf202a9.png

Удалить сегмент Cloud Storage

gcloud storage rm --recursive gs://$GCS_BUCKET

Удалить экземпляр Spanner

Чтобы выполнить очистку, просто зайдите в раздел Cloud Spanner облачной консоли и удалите экземпляр codelab-demo , который мы создали в codelab.

ab7c83ebdab74c04.png

9. Поздравления

Поздравляем с завершением работы над кодом.

Что мы рассмотрели

  • Как развернуть экземпляр Spanner
  • Как загрузить данные в Spanner с помощью Dataflow
  • Как получить доступ к данным Spanner из BigQuery
  • Как использовать Spanner Data Boost, чтобы избежать влияния на ваш экземпляр Spanner аналитических запросов из BigQuery

10. Опрос

Выход:

Как вы будете использовать этот урок?

Только прочитай это Прочитайте его и выполните упражнения.