Преобразование данных на TiDB стало проще

от автора

Средство формирования данных (Data build tool, dbt) — это популярный инструмент с открытым исходным кодом, который позволяет инженерам-аналитикам преобразовывать данные в своих хранилищах с помощью операторов SQL. Совсем недавно участники профильного соощества выпустили плагин dbt-tidb, который позволит TiDB-распределённой базе данных SQL работать с dbt. Благодаря плагину dbt-tidb инженеры-аналитики, работающие с TiDB, могут напрямую создавать формы и сопоставлять данные через SQL без необходимости думать о процессе создания таблиц или представлений. Теперь можно использовать Jinja, язык шаблонов dbt для написания SQL, тестирования, управления пакетами и других функций, что значительно повышает эффективность работы с данными.

В этом руководстве я покажу вам, как использовать dbt с TiDB. Но прежде чем приступить к выполнению описанных ниже действий, убедитесь, что у вас установлены следующие компоненты:

  • TiDB 5.3 или более поздняя версия
  • dbt 1.01 или более поздняя версия
  • dbt-tidb 1.0.0

Установка

Существует несколько способов установки dbt и dbt-tidb. В этом туториале мы будем использовать pypi. Когда вы устанавливаете dbt-tidb, dbt устанавливается как зависимость. Таким образом, вам понадобится всего одна команда для установки обоих:

$ pip install dbt-tidb

Вы также можете установить dbt отдельно. Подробнее см. в разделе «Как установить dbt» в документации по dbt.

Создаём проект: магазинчик сэндвичей

Прим. редактора: В качестве своего основного товара магазинчик будет предлагать именно австралийские закрытые сэндвичи — джаффлы (jaffle).

dbt-lab предоставляет проект jaffle_shop для демонстрации функциональности dbt. Вы можете скачать этот проект прямо с GitHub:

$ git clone https://github.com/dbt-labs/jaffle_shop $ cd jaffle_shop

Все файлы в каталоге проекта jaffle_shop структурированы следующим образом:

ubuntu@ubuntu:~/jaffle_shop$ tree . ├── dbt_project.yml ├── etc │ ├── dbdiagram_definition.txt │ └── jaffle_shop_erd.png ├── LICENSE ├── models │ ├── customers.sql │ ├── docs.md │ ├── orders.sql │ ├── overview.md │ ├── schema.yml │ └── staging │ ├── schema.yml │ ├── stg_customers.sql │ ├── stg_orders.sql │ └── stg_payments.sql ├── README.md └── seeds ├── raw_customers.csv ├── raw_orders.csv └── raw_payments.csv

dbt_project.yml — это файл конфигурации проекта dbt, который содержит имя проекта и информацию о файле конфигурации базы данных.

Директория models содержит SQL-модели проекта и схемы таблиц. Обратите внимание, что в вашей компании этот раздел должен составлять аналитик данных. Чтобы узнать больше о моделях, смотрите раздел dbt Docs.

В директории seed хранятся файлы CSV, которые выгружаются из инструментов экспорта баз данных. Например, TiDB может экспортировать данные таблиц в CSV-файлы через Dumpling. В проекте jaffle shop эти CSV-файлы используются в качестве исходных данных для обработки.

Настраиваем проект

Чтобы настроить проект:

  1. Завершите глобальную конфигурацию.

    В каталоге пользователя отредактируйте глобальный профиль по умолчанию ~/.dbt/profiles.yml, чтобы настроить соединение с TiDB:

    $ vi ~/.dbt/profiles.yml jaffle_shop_tidb:           # имя проекта             target: dev                # целевой путь            outputs:    dev:       type: tidb           # тип адаптера                  server: 127.0.0.1       port: 4000       schema: analytics    # имя базы данных                  username: root       password: ""
  2. Завершите конфигурацию проекта.

    В директории проекта jaffle_shop откройте файл конфигурации проекта dbt_project.yml и измените поле profile на jaffle_shop_tidb. Эта конфигурация позволяет проекту выполнять запросы из базы данных, указанной в файле ~/.dbt/profiles.yml.

    $ cat dbt_project.yml name: 'jaffle_shop'  config-version: 2 version: '0.1'  profile: 'jaffle_shop_tidb'      # обратите внимание на изменение в этом пункте             model-paths: ["models"]          # путь до model            seed-paths: ["seeds"]            # путь до seed            test-paths: ["tests"] analysis-paths: ["analysis"] macro-paths: ["macros"]  target-path: "target" clean-targets: - "target" - "dbt_modules" - "logs"  require-dbt-version: [">=1.0.0", "<2.0.0"]  models: jaffle_shop: materialized: table # *.sql, который в models/ будет переведён в таблицу            staging: materialized: view # *.sql, который в models/staging/ будет переведён в представление           
  3. Проверьте правильность конфигураций.

    Выполните следующую команду, чтобы проверить правильность конфигурации базы данных и проекта:

    $ dbt debug​​

Загружаем файлы CSV

Теперь, когда вы успешно создали и настроили проект, пришло время загрузить данные CSV и представить CSV в виде таблицы в целевой базе данных. Обратите внимание, что этот шаг обычно не требуется для проекта dbt, поскольку элементы данных для обработки уже находятся в БД.

  1. Загрузите файлы CSV, выполнив следующую команду:
    $ dbt seed

    После этого отобразится следующее:

    Running with dbt=1.0.1 Partial parse save file not found. Starting full parse. Found 5 models, 20 tests, 0 snapshots, 0 analyses, 172 macros, 0 operations, 3 seed files, 0 sources, 0 exposures, 0 metrics  Concurrency: 1 threads (target='dev')  1 of 3 START seed file analytics.raw_customers.................................. [RUN] 1 of 3 OK loaded seed file analytics.raw_customers.............................. [INSERT 100 in 0.19s] 2 of 3 START seed file analytics.raw_orders..................................... [RUN] 2 of 3 OK loaded seed file analytics.raw_orders................................. [INSERT 99 in 0.14s] 3 of 3 START seed file analytics.raw_payments................................... [RUN] 3 of 3 OK loaded seed file analytics.raw_payments............................... [INSERT 113 in 0.24s]

    Как видно из результатов, seed-файл был запущен и загружен в три таблицы: analytics.raw_customers, analytics.raw_orders и analytics.raw_payments.

  2. Проверьте результаты в TiDB. Команда show databases отобразит новую аналитическую базу данных, созданную dbt. Команда show tables покажет, что в аналитической базе данных есть три таблицы, соответствующие тем, которые мы создали выше.
    mysql> show databases; +--------------------+ | Database | +--------------------+ | INFORMATION_SCHEMA | | METRICS_SCHEMA | | PERFORMANCE_SCHEMA | | analytics | | mysql | | test | +--------------------+ 6 rows in set (0.00 sec)  mysql> show tables; +---------------------+ | Tables_in_analytics | +---------------------+ | raw_customers | | raw_orders | | raw_payments | +---------------------+ 3 rows in set (0.00 sec)

Запуск dbt проекта

Теперь вы готовы запустить ранее сконфигурированные проекты и завершить преобразование данных.

  1. Запустите проект dbt, чтобы завершить преобразование данных:
    $ dbt run

    Running with dbt=1.0.1 Unable to do partial parsing because profile has changed Unable to do partial parsing because a project dependency has been added Found 5 models, 20 tests, 0 snapshots, 0 analyses, 172 macros, 0 operations, 3 seed files, 0 sources, 0 exposures, 0 metrics Concurrency: 1 threads (target='dev') 1 of 5 START view model analytics.stg_customers................................. [RUN] 1 of 5 OK created view model analytics.stg_customers............................ [SUCCESS 0 in 0.12s] 2 of 5 START view model analytics.stg_orders.................................... [RUN] 2 of 5 OK created view model analytics.stg_orders............................... [SUCCESS 0 in 0.08s] 3 of 5 START view model analytics.stg_payments.................................. [RUN] 3 of 5 OK created view model analytics.stg_payments............................. [SUCCESS 0 in 0.07s] 4 of 5 START table model analytics.customers.................................... [RUN] 4 of 5 OK created table model analytics.customers............................... [SUCCESS 0 in 0.16s] 5 of 5 START table model analytics.orders....................................... [RUN] 5 of 5 OK created table model analytics.orders.................................. [SUCCESS 0 in 0.12s]

    Результат показывает, что три представления (analytics.stg_customers, analytics.stg_orders и analytics.stg_payments) и две таблицы (analytics.customers и analytics.orders) были успешно созданы.

  2. Перейдите к базе данных TiDB, чтобы убедиться в успешном выполнении операции.
    mysql> show tables; +---------------------+ | Tables_in_analytics | +---------------------+ | customers     | | orders        | | raw_customers | | raw_orders    | | raw_payments  | | stg_customers | | stg_orders.   | | stg_payments  | +---------------------+ 8 rows in set (0.00 sec)  mysql> select * from customers; +-------------+------------+-----------+-------------+-------------------+------------------+-------------------------+ | customer_id | first_name | last_name | first_order | most_recent_order | number_of_orders | customer_lifetime_value | +-------------+------------+-----------+-------------+-------------------+------------------+-------------------------+ | 1 | Michael   | P. | 2018-01-01 | 2018-02-10 | 2 | 33.0000 | | 2 | Shawn     | M. | 2018-01-11 | 2018-01-11 | 1 | 23.0000 | | 3 | Kathleen  | P. | 2018-01-02 | 2018-03-11 | 3 | 65.0000 | | 4 | Jimmy     | C. | NULL | NULL | NULL | NULL | | 5 | Katherine | R. | NULL | NULL | NULL | NULL | | 6 | Sarah     | R. | 2018-02-19 | 2018-02-19 | 1 | 8.0000 | | 7 | Martin    | M. | 2018-01-14 | 2018-01-14 | 1 | 26.0000 | | 8 | Frank     | R. | 2018-01-29 | 2018-03-12 | 2 | 45.0000 |

    В результате вывода видно, что было добавлено ещё пять таблиц или представлений, а данные в таблицах или представлениях были преобразованы. Обратите внимание, что здесь показана только часть данных из таблицы customer.

Генерируем визуальные документы

dbt позволяет генерировать документы с визуальным отображением общей структуры проекта и описанием всех таблиц и представлений. Чтобы создать визуальные документы:

  1. Сгенерируйте документ:
    $ dbt docs generate
  2. Запустите сервер:
    $ dbt docs serve Running with dbt=1.0.1 Serving docs at 0.0.0.0:8080
  3. Чтобы перейти к просмотру документа из браузера, перейдите по адресу: http://localhost:8080

Заключение

В настоящее время TiDB поддерживает dbt в TiDB 4.0 и более поздних версиях. При работе с dbt в более ранних версиях TiDB могут наблюдаться некоторые проблемы. Для получения подробной информации посетите проект tidb-dbt на GitHub. Чтобы получить максимум от dbt, мы рекомендуем использовать TiDB 5.3 или более позднюю версию. Эти версии поддерживают все функции dbt.

Если у вас возникнут какие-либо проблемы, присоединяйтесь к сообществу автора в Slack или опубликуйте проблему в репозитории.


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.


ссылка на оригинал статьи https://habr.com/ru/company/first/blog/673584/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *