Единый анализ потоковых и аналитических данных
В этом примере вы рассчитаете стоимость поездок в такси в определенных локациях с помощью единого запроса к аналитическим и потоковым данным.
Текст SQL-запроса для обработки обоих видов данных совпадает, различаются только соединения и привязки к данным для бакета и потока.
Данные для аналитической обработки предварительно размещены в бакете Yandex Object Storage в файлах формата Parquet
В обоих случаях используется хранимый в Object Storage справочник для фильтрации данных в запросе.
Для выполнения примера:
- Подготовьтесь к работе.
- Проанализируйте данные из Object Storage.
- Проанализируйте потоковые данные из Data Streams.
Примечание
Yandex Cloud предоставляет набор данных - поездки Нью-Йоркского такси - на условиях “как есть” (as is). Yandex Cloud не дает никаких заверений, явных или подразумеваемых, гарантий или условий в отношении использования вами указанного датасета (набора данных). В пределах, разрешенных вашим местным законодательством, Yandex Cloud не несет никакой ответственности за любые убытки или ущерб, включая прямые, побочные, специальные, косвенные, случайные или штрафные, возникшие в результате использования вами датасета.
NYC Taxi and Limousine Commission (TLC):
Данные были собраны и предоставлены NYC Taxi and Limousine Commission (TLC) поставщиками технологий, уполномоченными в рамках Taxicab & Livery Passenger Enhancement Programs (TPEP/LPEP). Данные о поездке не были созданы TLC, и TLC не делает никаких заявлений относительно точности этих данных.
Ознакомьтесь с источником
Подготовьтесь к работе
- Войдите в консоль управления
или зарегистрируйтесь. Если вы еще не зарегистрированы, перейдите в консоль управления и следуйте инструкциям. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его. - Если у вас еще нет каталога, создайте его.
- Подключение к потоку данных будет выполняться от имени сервисного аккаунта. Создайте сервисный аккаунт с именем
datastream-connection-account
и рольюydb.editor
. - Потоки данных используют Yandex Managed Service for YDB. Создайте бессерверную базу данных.
Проанализируйте данные из Object Storage
Подключитесь к данным для аналитической обработки
-
В консоли управления
выберите каталог, в котором нужно создать соединение. -
В списке сервисов выберите Yandex Query.
-
На панели слева выберите
Учебник. -
В блоке Создать инфраструктуру для обучения нажмите кнопку Создать соединение.
Откроется страница создания соединения. Просмотрите значения параметров по умолчанию, изменять их не нужно.
-
Нажмите кнопку Создать.
Откроется страница создания привязки к данным. Просмотрите значения параметров по умолчанию, изменять их не нужно.
-
Нажмите кнопку Создать.
Выполните запрос
-
В редакторе запросов в интерфейсе Query нажмите кнопку Новый аналитический запрос.
-
В текстовом поле введите текст запроса:
$data = SELECT * FROM `tutorial-analytics`; $locations = SELECT PULocationID FROM `tutorial-analytics`.`nyc_taxi_sample/example_locations.csv` WITH ( format=csv_with_names, SCHEMA ( PULocationID String ) ); $time = SELECT HOP_END() AS time, rides.PULocationID AS PULocationID, SUM(total_amount) AS total_amount FROM $data AS rides INNER JOIN $locations AS locations ON rides.PULocationID=locations.PULocationID GROUP BY HOP(CAST(tpep_pickup_datetime AS Timestamp?), "PT1M", "PT1M", "PT1M"), rides.PULocationID; SELECT * FROM $time;
-
Нажмите кнопку Выполнить.
Исследуйте результат
После выполнения аналитического запроса станет доступен результат — распределение стоимости поездок в такси в определенных локациях.
# | time | PULocationID | total_amount |
---|---|---|---|
1 | 2017-12-31T22:24:00.000000Z | 120 | 7.54 |
2 | 2018-01-01T00:13:00.000000Z | 120 | 48.8 |
3 | 2018-01-01T03:25:00.000000Z | 120 | 30.8 |
4 | 2018-01-01T11:29:00.000000Z | 120 | 32.88 |
5 | 2018-01-01T15:13:00.000000Z | 120 | 9.8 |
6 | 2018-01-01T22:03:00.000000Z | 120 | 14.8 |
7 | 2018-01-02T19:28:00.000000Z | 120 | 7.3 |
8 | 2018-01-03T10:17:00.000000Z | 120 | 81.3 |
Проанализируйте потоковые данные из Data Streams
Создайте поток данных
- В консоли управления
выберите каталог, в котором нужно создать поток данных. - Выберите сервис Data Streams.
- Нажмите кнопку Создать поток.
- Укажите базу данных Yandex Managed Service for YDB, созданную ранее.
- Введите имя потока данных:
yellow-taxi
. - Нажмите кнопку Создать.
Настройте генерацию данных
-
Создайте соединение:
- В консоли управления
выберите каталог, в котором нужно создать соединение. - В списке сервисов выберите Yandex Query.
- На панели слева выберите
Учебник. - Перейдите в Потоковый раздел.
- В блоке Создать инфраструктуру для обучения нажмите кнопку Создать соединение.
- В открывшемся окне в блоке Параметры типа соединения выберите базу данных и сервисный аккаунт, созданные ранее.
- Нажмите кнопку Создать.
- В консоли управления
-
Создайте привязку к данным:
- Откроется страница для создания привязки к данным.
- В блоке Параметры привязки к данным выберите поток
yellow-taxi
, созданный ранее. - Нажмите кнопку Создать.
Запустится генерация данных в поток yellow-taxi
. Для управления генератором данных используйте кнопки Стоп и Старт.
Выполните запрос
-
В редакторе запросов в интерфейсе Query нажмите кнопку Новый потоковый запрос.
-
В текстовом поле введите текст запроса:
$data = SELECT * FROM bindings.`tutorial-streaming`; $locations = SELECT PULocationID FROM `tutorial-analytics`.`nyc_taxi_sample/example_locations.csv` WITH ( format=csv_with_names, SCHEMA ( PULocationID String ) ); $time = SELECT HOP_END() AS time, rides.PULocationID AS PULocationID, SUM(total_amount) AS total_amount FROM $data AS rides INNER JOIN $locations AS locations ON rides.PULocationID=locations.PULocationID GROUP BY HOP(cast(tpep_pickup_datetime AS Timestamp?), "PT1M", "PT1M", "PT1M"), rides.PULocationID; SELECT * FROM $time;
-
Нажмите кнопку Выполнить.
Исследуйте результат
После запуска запроса к потоковым данным станет доступен результат — общая стоимость поездок total_amount
в определенных локациях PULocationID
, совершенных после запуска запроса.
# | PULocationID | time | total_amount |
---|---|---|---|
1 | 125 | 2022-02-15T12:03:00.000000Z | 1275.4084 |
2 | 129 | 2022-02-15T12:03:00.000000Z | 1073.0449 |
3 | 126 | 2022-02-15T12:03:00.000000Z | 202.85883 |
4 | 121 | 2022-02-15T12:03:00.000000Z | 636.8784 |
5 | 124 | 2022-02-15T12:03:00.000000Z | 923.87805 |
6 | 127 | 2022-02-15T12:04:00.000000Z | 2105.3125 |
... |