Covering models with schema tests:
– Uniqueness of keys
– Not null constraint
– Foreign keys (relationships test)
– Table not empty
There are precisely 335 tests for 56 models which stands for around 600% test coverage.
https://kzzzr.github.io/Covering-models-with-schema-tests/
– Uniqueness of keys
– Not null constraint
– Foreign keys (relationships test)
– Table not empty
There are precisely 335 tests for 56 models which stands for around 600% test coverage.
https://kzzzr.github.io/Covering-models-with-schema-tests/
Слайды с моего сегодняшнего доклада на конференции Power BI Russia
Ключевые тезисы:
– Шаг моделирования данных – необходимость, а не роскошь
– Power BI – отличный инструмент, но иногда его становится недостаточно
– Power BI ограничен в объеме данных
– Неоптимальные обновления и расчеты
– Поддержка большого количества метрик превращается в испытание
– Одновременная работа над PBIX может сломать отчеты
– Version control для отката и восстановления истории изменений
– Импорт готовых проектов и дашбордов для разных клиентов
– Альтернативный BI – рано или поздно Power BI захочется поменять
https://drive.google.com/file/d/1-w4KyLQHZ-jlZ6cbui-nsUKHK1A4g5GV/view?usp=sharing
Ключевые тезисы:
– Шаг моделирования данных – необходимость, а не роскошь
– Power BI – отличный инструмент, но иногда его становится недостаточно
– Power BI ограничен в объеме данных
– Неоптимальные обновления и расчеты
– Поддержка большого количества метрик превращается в испытание
– Одновременная работа над PBIX может сломать отчеты
– Version control для отката и восстановления истории изменений
– Импорт готовых проектов и дашбордов для разных клиентов
– Альтернативный BI – рано или поздно Power BI захочется поменять
https://drive.google.com/file/d/1-w4KyLQHZ-jlZ6cbui-nsUKHK1A4g5GV/view?usp=sharing
pbiconf.ru
Power BI Russia Conf 2021
Конференция по Power BI для бизнеса и для аналитиков
Establishing Integration Tests and CI
I find it pretty hard to build on top of the CORE DWH module if it is not stable enough. Testing of the whole module during every patch and PR and before you can use it ensures quality and reliability. That is where Integration tests and CI come essential.
The workflow is defined like this:
1. Triggered on Pull Requests to master branch.
2. Spins up an already familiar MS SQL Server database in a container as a service.
3. Performs several sequential steps: checking out the code, filling source tables from csv files, running models, testing them, cleaning up.
4. Provides context with environment variables (connections details, target database schema name)
https://kzzzr.github.io/Establishing-integration-tests-and-CI/
I find it pretty hard to build on top of the CORE DWH module if it is not stable enough. Testing of the whole module during every patch and PR and before you can use it ensures quality and reliability. That is where Integration tests and CI come essential.
The workflow is defined like this:
1. Triggered on Pull Requests to master branch.
2. Spins up an already familiar MS SQL Server database in a container as a service.
3. Performs several sequential steps: checking out the code, filling source tables from csv files, running models, testing them, cleaning up.
4. Provides context with environment variables (connections details, target database schema name)
https://kzzzr.github.io/Establishing-integration-tests-and-CI/
Now I would like to pin a specific version of code to a tag and release.
Importing this module becomes as simple as this:
https://kzzzr.github.io/Releasing-CORE-DWH-version/
Importing this module becomes as simple as this:
packages.yml:
packages:
- git: "https://github.com/kzzzr/mybi-dbt-core.git"
revision: 0.2.0
https://kzzzr.github.io/Releasing-CORE-DWH-version/
dbt supercharges SQL with macros
With dbt you can leverage the full power of Jinja templating language in your SQL noscripts. These code blocks are compiled into valid statements before being executed on a target database. Let me show you some useful tricks to use with the CORE DWH module.
You have already seen filter_rows() macro invocation in place of WHERE expression. It is used in every staging model. It helps fetch only relevant account rows and limit the number of rows for development and testing purposes if a table is large enough (especially useful for fact tables – sessions, hits, conversions).
https://kzzzr.github.io/dbt-supercharges-SQL-with-macros/
With dbt you can leverage the full power of Jinja templating language in your SQL noscripts. These code blocks are compiled into valid statements before being executed on a target database. Let me show you some useful tricks to use with the CORE DWH module.
You have already seen filter_rows() macro invocation in place of WHERE expression. It is used in every staging model. It helps fetch only relevant account rows and limit the number of rows for development and testing purposes if a table is large enough (especially useful for fact tables – sessions, hits, conversions).
https://kzzzr.github.io/dbt-supercharges-SQL-with-macros/
Generating concatenate and surrogate keys
Surrogate keys are the central point of any Data Warehouse uniquely identifying rows and connecting facts and dimensions tables. I usually utilize hash functions of source PK columns, which comes from Data Vault 2.0 and gives us consistent results coming from various sources.
But sometimes in case of a compound key you might want to retain readability of the whole concatenated values. This is especially applicable for marketing analytics, where the row key might contain utm_source, utm_medium, utm_campaign, ads_group_id, keyword_id.
https://kzzzr.github.io/Generating-concatenate-and-surrogate-keys/
Surrogate keys are the central point of any Data Warehouse uniquely identifying rows and connecting facts and dimensions tables. I usually utilize hash functions of source PK columns, which comes from Data Vault 2.0 and gives us consistent results coming from various sources.
But sometimes in case of a compound key you might want to retain readability of the whole concatenated values. This is especially applicable for marketing analytics, where the row key might contain utm_source, utm_medium, utm_campaign, ads_group_id, keyword_id.
https://kzzzr.github.io/Generating-concatenate-and-surrogate-keys/
Performing custom ‘not empty’ tests
dbt is shipped with essential schema tests which I covered in one of my previous posts on CORE DWH test suite. There are plenty of additional tests and handy macros shipped with the dbt-utils package, including equal_rowcount, expression_is_true, recency, at_least_one, etc.
But still if you need something special you can easily add it yourself. For me this is signalling if one of my source tables is empty.
https://kzzzr.github.io/Performing-custom-not-empty-tests/
dbt is shipped with essential schema tests which I covered in one of my previous posts on CORE DWH test suite. There are plenty of additional tests and handy macros shipped with the dbt-utils package, including equal_rowcount, expression_is_true, recency, at_least_one, etc.
But still if you need something special you can easily add it yourself. For me this is signalling if one of my source tables is empty.
https://kzzzr.github.io/Performing-custom-not-empty-tests/
Performing set operations UNION, INTERSECT, MINUS with Looker BI tool
The problem:
I would like to list and count all the users who have used product A but never used product B (in a specific period/area/country).
You cannot achieve the desired result by simply slicing this table. One needs a more advanced technique:
- MINUS operation on top of two sets of users:
- Writing a subquery with IN or EXISTS
- Self-joining a fact table
But can I do this with BI tool?
https://kzzzr.github.io/Performing-set-operations-UNION,-INTERSECT,-MINUS-with-Looker-BI-tool/
The problem:
I would like to list and count all the users who have used product A but never used product B (in a specific period/area/country).
You cannot achieve the desired result by simply slicing this table. One needs a more advanced technique:
- MINUS operation on top of two sets of users:
- Writing a subquery with IN or EXISTS
- Self-joining a fact table
But can I do this with BI tool?
https://kzzzr.github.io/Performing-set-operations-UNION,-INTERSECT,-MINUS-with-Looker-BI-tool/
Мастер-класс по Разведочному Анализу Данных – Exploratory Data Analysis – EDA
Kiva - это некоммерческая организация, которая позволяет нуждающимся более чем в 80 странах мира получать финансирование под различного рода проекты и нужды.
Kiva хочет сделать так, чтобы собранные деньги тратились с максимальной пользой. В первую очередь, конечно же, их интересует не дисперсия пожертвований и не еще какие-нибудь статистические показатели, а ощутимые выводы и рекомендации, которые позволят им работать эффективнее и больше понимать специфику потребностей и уровень бедности в разных странах и регионах.
– Проверьте, насколько имеющиеся данные чисты, то есть подвержены выбросам, пропущенным и недействительным значениям
– Ознакомьтесь с датасетом, изучите его базовые характеристики, выявите первоначальные зависимости
– Изучите основные демографические характеристики людей, которые используют Kiva. Из каких они регионов и стран? Какова гендерная характеристика заемщиков?
– Посмотрите, для каких целей людям нужны средства и какие суммы они просят. Изучите сектора экономики, виды деятельности и сделайте выводы о том, как обстоят дела в каждом из них.
– Немаловажным является еще один вопрос: как долго заемщикам приходится ждать полного финансирования заявки? Известно, что некоторые люди на платформе просят ссуды на неотложные нужды.
– Попробуйте изучить природу зависимости времени, требуемого на погашение ссуды и суммы кредита. Возможно, это поможет лучше узнать, сколько люди в конкретных регионах могут себе позволить выплачивать на самые важные нужды.
– Сформулируйте основные выводы и визуальные материалы, подкрепляющие их.
Kiva - это некоммерческая организация, которая позволяет нуждающимся более чем в 80 странах мира получать финансирование под различного рода проекты и нужды.
Kiva хочет сделать так, чтобы собранные деньги тратились с максимальной пользой. В первую очередь, конечно же, их интересует не дисперсия пожертвований и не еще какие-нибудь статистические показатели, а ощутимые выводы и рекомендации, которые позволят им работать эффективнее и больше понимать специфику потребностей и уровень бедности в разных странах и регионах.
– Проверьте, насколько имеющиеся данные чисты, то есть подвержены выбросам, пропущенным и недействительным значениям
– Ознакомьтесь с датасетом, изучите его базовые характеристики, выявите первоначальные зависимости
– Изучите основные демографические характеристики людей, которые используют Kiva. Из каких они регионов и стран? Какова гендерная характеристика заемщиков?
– Посмотрите, для каких целей людям нужны средства и какие суммы они просят. Изучите сектора экономики, виды деятельности и сделайте выводы о том, как обстоят дела в каждом из них.
– Немаловажным является еще один вопрос: как долго заемщикам приходится ждать полного финансирования заявки? Известно, что некоторые люди на платформе просят ссуды на неотложные нужды.
– Попробуйте изучить природу зависимости времени, требуемого на погашение ссуды и суммы кредита. Возможно, это поможет лучше узнать, сколько люди в конкретных регионах могут себе позволить выплачивать на самые важные нужды.
– Сформулируйте основные выводы и визуальные материалы, подкрепляющие их.
Запись мастер-класса доступна, конечно, в рамках курса Skillbox, но Jupyter-ноутбук с пояснениями на русском языке в наличии для самостоятельного изучения и экспериментов.
https://github.com/kzzzr/skillbox-kiva
https://github.com/kzzzr/skillbox-kiva
Подготовил интереснейшее задание для Datathon по DWH / Analytics Engineering:
Сквозная аналитика и практики data-driven для e-Commerce
Пользуйтесь шансом влиться в движение, пообщаться, попрактиковаться на кейсе, приближенном к реальности.
В качестве призов – бесплатное участие в курсе Data Engineer или Analytics Engineer (новый!) на выбор.
Сквозная аналитика и практики data-driven для e-Commerce
Пользуйтесь шансом влиться в движение, пообщаться, попрактиковаться на кейсе, приближенном к реальности.
В качестве призов – бесплатное участие в курсе Data Engineer или Analytics Engineer (новый!) на выбор.
Forwarded from OTUS IT News
🔥 С 14 по 16 мая в OTUS пройдет открытое онлайн-соревнование по Data science. Участие бесплатное!
Попробуйте свои силы в любом из двух направлений на выбор:
✫ Machine Learning
✫ Data Warehouse
🏆 Главный приз — бесплатное обучение на любом курсе по Data Science.
Регистрируйся, чтобы не пропустить обновления! О призах и правилах участия узнайте на вебинаре 14 мая.
Попробуйте свои силы в любом из двух направлений на выбор:
✫ Machine Learning
✫ Data Warehouse
🏆 Главный приз — бесплатное обучение на любом курсе по Data Science.
Регистрируйся, чтобы не пропустить обновления! О призах и правилах участия узнайте на вебинаре 14 мая.
Data Apps Design
Подготовил интереснейшее задание для Datathon по DWH / Analytics Engineering: Сквозная аналитика и практики data-driven для e-Commerce Пользуйтесь шансом влиться в движение, пообщаться, попрактиковаться на кейсе, приближенном к реальности. В качестве призов…
[OTUS Datathon] Помогите владельцу e-Commerce-платформы принимать обоснованные и взвешенные решения на основании данных.
В качестве входной информации вы получаете выгрузки:
1. CRM-система
2. Счетчики веб-аналитики
3. Рекламные кабинеты
Ваши задачи:
- Выгрузка и интеграция данных – DONE!
- Подключение к исходному датасету
- Построение логической модели Хранилища Данных
- Расчет бизнес-метрик и формирование аналитических витрин
- Подготовка визуализаций и дашбордов
- Формирование выводов и рекомендаций для владельца бизнеса
- * Настроить регулярное обновление витрин, рассылку отчетов
- * Высветить проблемы качества данных
Подробная информация и логин-пароль для подключения к данным в брифинге:
Сквозная аналитика и практики data-driven для e-Commerce
В качестве входной информации вы получаете выгрузки:
1. CRM-система
2. Счетчики веб-аналитики
3. Рекламные кабинеты
Ваши задачи:
- Выгрузка и интеграция данных – DONE!
- Подключение к исходному датасету
- Построение логической модели Хранилища Данных
- Расчет бизнес-метрик и формирование аналитических витрин
- Подготовка визуализаций и дашбордов
- Формирование выводов и рекомендаций для владельца бизнеса
- * Настроить регулярное обновление витрин, рассылку отчетов
- * Высветить проблемы качества данных
Подробная информация и логин-пароль для подключения к данным в брифинге:
Сквозная аналитика и практики data-driven для e-Commerce
Google Docs
[OTUS Datathon] – Data Engineering / DWH Analytics – Формирование Сквозной аналитики для E-commerce
[OTUS Datathon] – Сквозная аналитика и практики data-driven для e-Commerce Помогите владельцу e-Commerce-платформы принимать обоснованные и взвешенные решения на основании данных. Бизнес-проблематика: До того как вы взялись за задачу решения принимались…
Сегодня хотел бы поговорить о вопросах конвертирования финансовых показателей в разные валюты. Вопрос достаточно актуальный, так как большое количество компаний имеют мультинациональные зоны присутствия, строят аналитику глобального масштаба, готовят отчетность по международным стандартам.
Покажу как этот вопрос решается с помощью современных подходов на примере кейса Wheely:
– Расширение списка базовых валют
– Регулярное обновление и получения актуальных курсов
– Обеспечение корректности исторических показателей
– Максимальное удобство и простота использования в аналитических инструментах
https://habr.com/ru/company/otus/blog/558238/
Покажу как этот вопрос решается с помощью современных подходов на примере кейса Wheely:
– Расширение списка базовых валют
– Регулярное обновление и получения актуальных курсов
– Обеспечение корректности исторических показателей
– Максимальное удобство и простота использования в аналитических инструментах
https://habr.com/ru/company/otus/blog/558238/
Хабр
Курсы валют и аналитика – использование обменных курсов в Хранилище Данных
Привет! На связи Артемий – Analytics Engineer из Wheely.Сегодня хотел бы поговорить о вопросах конвертирования финансовых показателей в разные валюты. Вопрос дос...
An interesting approach on how to solve data modeling problem.
Istead of going from source data to target data mart, you write your models backwards, starting from the desired result and then performing actions and steps to achieve it.
1. Prototype with GSheets
2. Mock out the final report you’re trying to build
3. Mock the query that would produce this result
4. Iterate
5. Match this up with source data
6. Move the logic into your pipeline orchestration tool
Full post from Claire:
https://discourse.getdbt.com/t/writing-models-backwards-an-unorthodox-approach-to-data-transformation/2287
Istead of going from source data to target data mart, you write your models backwards, starting from the desired result and then performing actions and steps to achieve it.
1. Prototype with GSheets
2. Mock out the final report you’re trying to build
3. Mock the query that would produce this result
4. Iterate
5. Match this up with source data
6. Move the logic into your pipeline orchestration tool
Full post from Claire:
https://discourse.getdbt.com/t/writing-models-backwards-an-unorthodox-approach-to-data-transformation/2287
dbt Community Forum
Writing models backwards: An unorthodox approach to data transformation
I was recently pairing with an early-career analyst who asked me for help debugging a query she had written. The problem she had to solve was similar to this: A company has two newsletters that people can subscribe to — for the sake of this conversation…
Forwarded from OTUS IT News
#expert
⚡️ Всем привет! Сегодня в гостях у OTUS News Артемий Козырь — Analytics Engineer в компании Wheely, автор телеграмм-канала Technology Enthusiast, а также преподаватель курсов Data Engineer, Hadoop Ecosystem в OTUS.
Поговорили с Артемием про принципы, лежащие в основе решений, работающих с Big Data ⬇️
***
Большие данные, кластерные вычисления, MPP базы данных – всё это может звучать так сложно и загадочно не только для обывателя, но и для ИТ-специалистов.
Однако, принципы, лежащие в основе решений, работающих с Big Data, логичны и интуитивно понятны. Они одинаково применимы и к инструментам экосистемы Hadoop (Hive, Spark, HBase, Kafka), и к аналитическим движкам корпоративного уровня (Teradata, Vertica, Oracle, Exasol), и к современным облачным решениям (Snowflake, Databricks, Redshift, BigQuery).
⏺ Параллелизация вычислений. Распределение большого объема данных на ноды кластера и обеспечение независимой параллельной обработки каждой из частей. MapReduce – классический пример.
⏺ Структурирование данных. Сегментация пользователей и их транзакций по идентичному ключу, например, по user_id. А также партиционирование – деление данных на логические части, например, в зависимости от даты транзакции (горячие, теплые, холодные)
⏺ Оптимизация физического хранения. Запись данных на диск в колоночном формате, применение алгоритмов кодирования и сжатия. Предварительная сортировка данных.
⏺ Актуализация статистических данных (метаданные). Это гистограммы распределения, количество уникальных значений, минимумы, максимумы, наличие NULL. Такая метаинформация критически важна для построения оптимального плана выполнения и выбора алгоритмов.
⏺ Управление ресурсами и мониторинг. Выделение ресурсных пулов, квот на использование мощностей, разграничение прав доступа и полномочий. Мониторинг поможет со своевременным реагированием на инциденты и проблемные места.
Новый запуск курса Data Engineer, стартующий 31 мая, приобретает кейс-ориентированный подход. Каждый модуль посвящен разбору отдельного сценария: Architecture, Data Lake, DWH, NoSQL, MLOps.
На подходе курс DWH Analyst, в котором основной фокус делается на направление Analytics Engineering: углубленная аналитика, моделирование данных, Business Intelligence, Data Quality.
***
💬 Мы ищем гостей для новых выпусков рубрики.
Пиши мне, если есть, что рассказать.
Обсудить
⚡️ Всем привет! Сегодня в гостях у OTUS News Артемий Козырь — Analytics Engineer в компании Wheely, автор телеграмм-канала Technology Enthusiast, а также преподаватель курсов Data Engineer, Hadoop Ecosystem в OTUS.
Поговорили с Артемием про принципы, лежащие в основе решений, работающих с Big Data ⬇️
***
Большие данные, кластерные вычисления, MPP базы данных – всё это может звучать так сложно и загадочно не только для обывателя, но и для ИТ-специалистов.
Однако, принципы, лежащие в основе решений, работающих с Big Data, логичны и интуитивно понятны. Они одинаково применимы и к инструментам экосистемы Hadoop (Hive, Spark, HBase, Kafka), и к аналитическим движкам корпоративного уровня (Teradata, Vertica, Oracle, Exasol), и к современным облачным решениям (Snowflake, Databricks, Redshift, BigQuery).
⏺ Параллелизация вычислений. Распределение большого объема данных на ноды кластера и обеспечение независимой параллельной обработки каждой из частей. MapReduce – классический пример.
⏺ Структурирование данных. Сегментация пользователей и их транзакций по идентичному ключу, например, по user_id. А также партиционирование – деление данных на логические части, например, в зависимости от даты транзакции (горячие, теплые, холодные)
⏺ Оптимизация физического хранения. Запись данных на диск в колоночном формате, применение алгоритмов кодирования и сжатия. Предварительная сортировка данных.
⏺ Актуализация статистических данных (метаданные). Это гистограммы распределения, количество уникальных значений, минимумы, максимумы, наличие NULL. Такая метаинформация критически важна для построения оптимального плана выполнения и выбора алгоритмов.
⏺ Управление ресурсами и мониторинг. Выделение ресурсных пулов, квот на использование мощностей, разграничение прав доступа и полномочий. Мониторинг поможет со своевременным реагированием на инциденты и проблемные места.
Новый запуск курса Data Engineer, стартующий 31 мая, приобретает кейс-ориентированный подход. Каждый модуль посвящен разбору отдельного сценария: Architecture, Data Lake, DWH, NoSQL, MLOps.
На подходе курс DWH Analyst, в котором основной фокус делается на направление Analytics Engineering: углубленная аналитика, моделирование данных, Business Intelligence, Data Quality.
***
💬 Мы ищем гостей для новых выпусков рубрики.
Пиши мне, если есть, что рассказать.
Обсудить
Long time no see, folks!
Let us investigate super hot app TikTok from the point of Marketing API integration.
There's not much information on this topic available on the net today.
For now I see the steps as follows:
1. Register as a developer and create an App – DONE
2. Get access to any business account (who does promotions/advertising) – DONE
3. Acquire API token – DONE
4. Play with API
Briefly, interesting things one can do via API:
– Reporting API
- Audience management
– Pixel management
That could be promising and demanded integration.
Share what you think about it.
And stay tuned.
Let us investigate super hot app TikTok from the point of Marketing API integration.
There's not much information on this topic available on the net today.
For now I see the steps as follows:
1. Register as a developer and create an App – DONE
2. Get access to any business account (who does promotions/advertising) – DONE
3. Acquire API token – DONE
4. Play with API
Briefly, interesting things one can do via API:
– Reporting API
- Audience management
– Pixel management
That could be promising and demanded integration.
Share what you think about it.
And stay tuned.