Создание озера данных с dbt Core и Dremio Cloud
Введение
Это руководство покажет, как создать озеро данных с использованием dbt Core версии 1.5 или новее и Dremio Cloud. Вы можете упростить и оптимизировать свою инфраструктуру данных с помощью мощной платформы трансформации dbt и открытого и простого озера данных Dremio. Интегрированное решение позволяет компаниям создать прочную основу для данных и аналитики, способствуя самообслуживанию в аналитике и улучшая бизнес-аналитику, упрощая операции за счет устранения необходимости написания сложных конвейеров Extract, Transform, and Load (ETL).
Предварительные требования
- У вас должна быть учетная запись Dremio Cloud.
- У вас должен быть установлен Python 3.
- У вас должен быть установлен dbt Core версии 1.5 или новее установлен.
- У вас должен быть установлен и настроен адаптер Dremio версии 1.5.0 или новее для Dremio Cloud.
- У вас должны быть базовые знания работы с Git и интерфейсом командной строки (CLI).
Проверка вашей среды
Проверьте вашу среду, запустив следующие команды в вашем CLI и проверив результаты:
$ python3 --version
Python 3.11.4 # Должен быть Python 3
$ dbt --version
Core:
- installed: 1.5.0 # Должен быть 1.5 или новее
- latest: 1.6.3 - Доступно обновление!
Ваша версия dbt-core устарела!
Инструкции по обновлению можно найти здесь:
https://docs.getdbt.com/docs/installation
Plugins:
- dremio: 1.5.0 - Актуально! # Должен быть 1.5 или новее
Начало работы
-
Клонируйте пример проекта Dremio dbt Core из репозитория GitHub.
-
В вашей интегрированной среде разработки (IDE) откройте файл relation.py в директории адаптера Dremio:
$HOME/Library/Python/3.9/lib/python/site-packages/dbt/adapters/dremio/relation.py
-
Найдите и обновите строки 51 и 52, чтобы они соответствовали следующему синтаксису:
PATTERN = re.compile(r"""((?:[^."']|"[^"]*"|'[^']*')+)""")
return ".".join(PATTERN.split(identifier)[1::2])
Полный выбор должен выглядеть так:
def quoted_by_component(self, identifier, componentName):
if componentName == ComponentName.Schema:
PATTERN = re.compile(r"""((?:[^."']|"[^"]*"|'[^']*')+)""")
return ".".join(PATTERN.split(identifier)[1::2])
else:
return self.quoted(identifier)
Вам нужно обновить этот шаблон, потому что плагин не поддерживает имена схем в Dremio, содержащие точки и пробелы.
Создание вашего конвейера
- Создайте файл
profiles.yml
в пути$HOME/.dbt/profiles.yml
и добавьте следующие конфигурации:
dremioSamples:
outputs:
cloud_dev:
dremio_space: dev
dremio_space_folder: no_schema
object_storage_path: dev
object_storage_source: $scratch
pat: <this_is_the_personal_access_token>
cloud_host: api.dremio.cloud
cloud_project_id: <id_of_project_you_belong_to>
threads: 1
type: dremio
use_ssl: true
user: <your_username>
target: dev
- Выполните конвейер трансформации:
$ dbt run -t cloud_dev
Если вышеуказанные конфигурации были реализованы, вывод будет выглядеть примерно так:
17:24:16 Running with dbt=1.5.0
17:24:17 Found 5 models, 0 tests, 0 snapshots, 0 analyses, 348 macros, 0 operations, 0 seed files, 2 sources, 0 exposures, 0 metrics, 0 groups
17:24:17
17:24:29 Concurrency: 1 threads (target='cloud_dev')
17:24:29
17:24:29 1 of 5 START sql view model Preparation.trips .................................. [RUN]
17:24:31 1 of 5 OK created sql view model Preparation. trips ............................. [OK in 2.61s]
17:24:31 2 of 5 START sql view model Preparation.weather ................................ [RUN]
17:24:34 2 of 5 OK created sql view model Preparation.weather ........................... [OK in 2.15s]
17:24:34 3 of 5 START sql view model Business.Transportation.nyc_trips .................. [RUN]
17:24:36 3 of 5 OK created sql view model Business.Transportation.nyc_trips ............. [OK in 2.18s]
17:24:36 4 of 5 START sql view model Business.Weather.nyc_weather ....................... [RUN]
17:24:38 4 of 5 OK created sql view model Business.Weather.nyc_weather .................. [OK in 2.09s]
17:24:38 5 of 5 START sql view model Application.nyc_trips_with_weather ................. [RUN]
17:24:41 5 of 5 OK created sql view model Application.nyc_trips_with_weather ............ [OK in 2.74s]
17:24:41
17:24:41 Finished running 5 view models in 0 hours 0 minutes and 24.03 seconds (24.03s).
17:24:41
17:24:41 Completed successfully
17:24:41
17:24:41 Done. PASS=5 WARN=0 ERROR=0 SKIP=0 TOTAL=5
Теперь, когда у вас есть рабочая среда и завершенная задача, вы можете просмотреть данные в Dremio и расширить свой код. Это снимок структуры проекта в IDE:
О schema.yml
Файл schema.yml
определяет источники и модели Dremio, которые будут использоваться, и какие модели данных находятся в области действия. В примере проекта этого руководства есть два источника данных:
NYC-weather.csv
, хранящийся в базе данных Samples, иsample_data
из Samples database.
Модели соответствуют данным о погоде и поездках соответственно и будут объединены для анализа.
Источники можно найти, перейдя в раздел Object Storage в интерфейсе Dremio Cloud.
О моделях
Preparation — preparation_trips.sql
и preparation_weather.sql
создают представления на основе данных о поездках и погоде.
Business — business_transportation_nyc_trips.sql
применяет некоторый уровень трансформации к представлению preparation_trips.sql
. Business_weather_nyc.sql
не имеет трансформации на представлении preparation_weather.sql
.
Application — application_nyc_trips_with_weather.sql
объединяет вывод из бизнес-модели. Это то, что будут использовать ваши бизнес-пользователи.
Вывод задачи
Когда вы запускаете задачу dbt, она создаст папку пространства dev, в которой будут находиться все созданные данные. Это то, что вы увидите в интерфейсе Dremio Cloud. Пространства в Dremio — это способ организации данных, которые соответствуют бизнес-единицам или пр одуктам данных.
Откройте папку Application, и вы увидите результат простой трансформации, которую мы сделали с помощью dbt.
Запрос данных
Теперь, когда вы запустили задачу и завершили трансформацию, пришло время запросить ваши данные. Нажмите на представление nyc_trips_with_weather
. Это приведет вас на страницу SQL Runner. Нажмите Show SQL Pane в верхнем правом углу страницы.
Выполните следующий запрос:
SELECT vendor_id,
AVG(tip_amount)
FROM dev.application."nyc_treips_with_weather"
GROUP BY vendor_id
Это завершает настройку интеграции, и данные готовы для бизнес-потребления.