На этот раз спорный доклад (как сам автор заявляет) от Дмитрия Аношина. Позабавил слайд с сильной и независимой Марусей и Иннокентием, который удачно женился на богатой даме.
Маруся и Иннокентий являются владельцами разных бизнесов и под свои нужды они ищут DE (рис.1).
В итоге Маруся нашла хардкорную Аню, у которой стек - это docker, clickhouse, git, hadoop, airflow, python.
А Иннокентий нашел Валеру, у которого стек - Snowflake, Fivetran, dbt, AWS и стаканчик латте на кокосовом молоке из Старбакса
И вот каждый из них построил свое end-to-end решение для аналитики (рис. 2)
1) 80% вакансий DE в Америке и Канаде - это gentle DE, то есть это позиции, где не требуется человек с высокими компетенциями в проге. Но для РФ рынка совершенно другие требования, так как юзается опенсорсные решения, которые будут требовать доработок.
2) Очень сложно посчитать ROI от аналитики, но аналитика как гигиена: есть - хорошо, нет - плохо.
3) Наиболее эффективный способ управления аналитиками - через продакт менеджера, то есть он менеджерит дата-продукты (дашборды, DWH, ML-модели, отчеты и тд). Классический подход через head of BI не работает, так как не хватает экспертизы, нет возможности генерить много гипотез.
4) Валеру с его решением легко заменить. Обучение нового сотрудника нюансам работы с такой архитектурой аналитики не сильно затратное дело, а вот Аню с ее архитектурой заменить сложно, и бизнесу это по факту невыгодно. В идеале сотрудника нужно ценить не за то, что на нем все завязано, а за то, что он делает качественно свою работу.
5) В сравнении подходов нет колонки со стоимостью (рис. 3). Если этот момент учесть, то на первый взгляд выйдет, что стоимость решения Анны - очень дешевая, а вот Валера тот еще транжира бюджета. Но все не так однозначно, потому что нужно учитывать стоимость железа. То есть на одной стороне весов у вас лежит стоимость лицензий, а на другой стоимость железа.
#трудовыебудни
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Когда получила результаты генотека
❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Бесконечно долго можно смотреть на 3 вещи: огонь, воду и как двое аналитиков спорят, куда ставить запятую в запросе.
В общем, вряд ли вы найдете двух людей, которые отформатировали бы даже самый простой SQL-запрос одинаково.
Но важно понимать, что форматирование - это необходимая вещь.
Поэтому вот небольшой список best practices по код-стайлу.
📌1. SELECT * FROM - антипаттерн.
- таблицы меняются и запрос, содержащий подобную конструкцию, может сломаться.
- плохо читаемый код запроса, непонятно какие поля выбираются для дальнейшей работы.
- вопрос производительности. Хорошая статья на эту тему: https://tanelpoder.com/posts/reasons-why-select-star-is-bad-for-sql-performance/
📌2. Используйте СTE (с понятным псевдонимом).
- дешевле выполнить подзапрос один раз, сохранить его в памяти, а затем просто повторно использовать набор результатов по мере необходимости в своем коде.
- повышение читаемости кода
📌3. Используйте комментарии. Конечно, в идеальном мире, код должен быть самодокументируемым, но если есть места, которые неочевидны, то лучше их прокомментировать.
Например, у вас встретился запрос, вот такого вида:
SELECT manager
FROM dict
WHERE city = ‘Зажопинск’
и вот сиди и думай, баг это или фича. Ни одного комментария нет о том, почему внезапно из всего словаря вытащили только инфу по менеджеру только из одного города.
📌4. Избегайте подсказок оптимизатору.
Например, вы увидели, что ваши данные со скошенным статистическим распределением и на радостях впихнули в запрос хинт*, чтобы явно указать оптимизатору что делать. Но по мере роста объема данных это распределение может измениться и тогда ваша подсказка будет уже помехой.
*хинт (hint) – это указание оптимизатору запросов, которое переопределяет его поведение по умолчанию на время выполнения SQL запроса.
📌5. Именование колонок должно быть в snake_case стиле.
Хорошо
SELECT
id,
email,
timestamp_trunc(created_at, month) AS signup_month
FROM users
Далее идут более спорные пункты. Да начнутся голодные игры.
📌6. Одиночное join условие должно быть на той же строке что и сам join.
Хорошо
SELECT
users.email,
sum(charges.amount) AS total_revenue
FROM users
INNER JOIN charges ON users.id = charges.user_id
GROUP BY email
📌7. Делайте группировку по имени поля, а не по номеру. Хотя вот статья в защиту номера: https://www.getdbt.com/blog/write-better-sql-a-defense-of-group-by-1
Плохо
SELECT department, position, count(id) AS count_empl
FROM empl
GROUP BY 1, 2
Хорошо
SELECT department, position, count(id) AS count_empl
FROM empl
GROUP BY department, position
📌8. Записывайте прописными буквами зарезервированные слова.
Плохо
select a from empl
Хорошо
SELECT a
FROM empl
Лично мне проще читать код, когда вижу upper case, но в автоматизированных форматтерах это можно регулировать.
📌9. Запятые в начале vs запятые в конце (commas-first/last) + каждое поле в новой строке
Мне лично нравится ставить запятую в конце.
Плохо
select id, email
from users
Хорошо
SELECT
id,
FROM users
📌10. Выравнивание по левому краю.
Даже не знаю, что вызывает больше споров: выравнивание или запятые. Я выравниваюсь по левому краю.
В vs code есть различные форматтеры, так что установите себе что-то подобное и жизнь станет проще.
https://www.vsixhub.com/vsix/5708/ - как пример
либо в DataGrip настройте нужное)
Объем информации довольно большой, поэтому в следующий раз опубликую 2-ю часть с лучшими практиками.
Но хочу все же подчеркнуть, что какой-то единой истины нет в плане форматирования, поэтому мне интересно как вы в работе форматируете или какой автоформаттер используете?
Пишите в комментариях 👇
#трудовыебудни
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🗿1
Я *пишу про sql-style*
Мой последний sql-запрос:
https://youtu.be/CHw86xZ0qJo?si=9xyVTkhomLl4IiEp
#мемы
Мой последний sql-запрос:
https://youtu.be/CHw86xZ0qJo?si=9xyVTkhomLl4IiEp
#мемы
YouTube
какая ты двуличная раиса васильевна
discord teaineyes#3325
❤9
SQL style.pdf
100.6 KB
SELECT style FROM SQL. Часть 2
Продолжаю пост про best practices по написанию sql кода (+ собрала в единый файл основные принципы)
📌1. Прописывайте inner/cross join в явном виде
Плохо
Хорошо
📌2. Старайтесь не использовать типы данных REAL и FLOAT. В SQL имеются гибкие типы данных NUMERIC и DECIMAL, лишенные ошибок округления, присущих числам с плавающей точкой.
📌3. Избегайте лишних скобок.
📌4. Ищите наиболее компактную форму.
- Используйте предикаты BETWEEN, а не AND
- Используйте предикаты IN(), а не OR. НО! будьте аккуратны с null-значениями.
📌5. Избегайте union.
UNION очень плохо поддается оптимизации, поскольку в них требуется отбрасывать избыточные дубликаты, они заставляют большинство ядер SQL производить сортировку, прежде чем представить результаты пользователю. Лучше заменить на union all.
📌6. Указывайте из какой таблицы вы берет поле в явном виде.
Если у вас джоин для нескольких таблиц, то пропишите для удобства откуда именно тянется ваша колонка. Но не перебарщивайте: для простого селекта такое делать не нужно.
Плохо
Хорошо
📌7. Всегда переименовывайте свои агрегирующие функции.
Плохо
Хорошо
📌8. Разделяйте case/when statements.
Каждый when должен быть на отдельной строке и ниже по уровню, чем case.
Хорошо
📌9. Используйте WHERE 1=1.
Такая конструкция, как WHERE 1=1 в SQL, облегчает добавление дополнительных условий с помощью AND.
Если вас увлекла эта тема, то советую прочитать книгу SQL Programming Style - Joe Celko:
https://doc.lagout.org/programmation/Databases/mssql/SQL%20Programming%20Style%20-%20Apr%202005.pdf
#трудовыебудни
Продолжаю пост про best practices по написанию sql кода (+ собрала в единый файл основные принципы)
📌1. Прописывайте inner/cross join в явном виде
Плохо
select a, b from empl, depart
Хорошо
SELECT a, b FROM empl
CROSS JOIN depart
📌2. Старайтесь не использовать типы данных REAL и FLOAT. В SQL имеются гибкие типы данных NUMERIC и DECIMAL, лишенные ошибок округления, присущих числам с плавающей точкой.
📌3. Избегайте лишних скобок.
📌4. Ищите наиболее компактную форму.
- Используйте предикаты BETWEEN, а не AND
- Используйте предикаты IN(), а не OR. НО! будьте аккуратны с null-значениями.
📌5. Избегайте union.
UNION очень плохо поддается оптимизации, поскольку в них требуется отбрасывать избыточные дубликаты, они заставляют большинство ядер SQL производить сортировку, прежде чем представить результаты пользователю. Лучше заменить на union all.
📌6. Указывайте из какой таблицы вы берет поле в явном виде.
Если у вас джоин для нескольких таблиц, то пропишите для удобства откуда именно тянется ваша колонка. Но не перебарщивайте: для простого селекта такое делать не нужно.
Плохо
SELECT
companies.id,
companies.name
FROM companies
Хорошо
SELECT
users.email,
sum(charges.amount) as total_revenue
FROM users
INNER JOIN charges ON users.id = charges.user_id
📌7. Всегда переименовывайте свои агрегирующие функции.
Плохо
SELECT
count(*)
FROM users
Хорошо
SELECT
count(*) as total_users
FROM users
📌8. Разделяйте case/when statements.
Каждый when должен быть на отдельной строке и ниже по уровню, чем case.
Хорошо
CASE
WHEN event_name = 'viewed_homepage' THEN 'Homepage'
ELSE 'Other'
END
📌9. Используйте WHERE 1=1.
Такая конструкция, как WHERE 1=1 в SQL, облегчает добавление дополнительных условий с помощью AND.
Если вас увлекла эта тема, то советую прочитать книгу SQL Programming Style - Joe Celko:
https://doc.lagout.org/programmation/Databases/mssql/SQL%20Programming%20Style%20-%20Apr%202005.pdf
#трудовыебудни
🔥7👍2
Вообще, сегодня долго грустила из-за вот этого:
https://t.me/ForbesLifeRussia/4784
с февраля 2022 года ее проект был какой-то отдушиной в трудное время.
https://t.me/ForbesLifeRussia/4784
с февраля 2022 года ее проект был какой-то отдушиной в трудное время.
Telegram
Forbes Life
Журналистка Катерина Гордеева (признана иноагентом) сообщила, что ее YouTube-проект «Скажи Гордеевой» приостанавливает работу из-за принятия закона о запрете размещать рекламу у иноагентов. Уже отснятые выпуски будут публиковаться «по мере сил и возможностей».…
❤8
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉4🔥2
Как построить data lineage. Обзор решений и опыт команды Тинькофф.
Принесла немного DE-шного материала, посмотрела доклад с конфы Smart Data 2022.
Что такое lineage?
Если кратко, то lineage - это информация, которая описывает движение данных от источника происхождения по точкам обработки и применения.
Где применяется lineage?
- поиск источников: отслеживание зависимостей, поиск узких мест, анализ первопричин аномалий и тд
- анализ влияния: анализ первопричин аномалий, change management, инф.безопасность, комплаенс и тд
Какие есть подходы к построению lineage?
1.😖 Вручную
Сидит разраб и ручками прокидывает стрелочки между элементами, то есть явное указание зависимостей
Плюсы: простота реализации, поддержка множеством etl инструментов
Минусы: как протянуто поле от начала до конца не увидишь, дорогостоящая разработка, так как все связи должен знать разраб, много всего в голове должно держаться.
Кто использует: Pentaho DI, SSIS (рис. 1)
2.👩💻 Полуавтоматический вариант по метаданным
Сидит разраб и ручками заполняет метаданные трансформаций
Плюсы: возможен column-column lineage (то есть видим как поле протягивается от начала до конца), граф выполнения исходя из зависимостей
Минусы: метаданные могут не соответствовать реальности из-за косяков со стороны разраба, сложность в описании явных зависимостей
Кто использует: Informatica (рис. 2), SAS
3.🤩 Автоматически (метаданные извлекаются из кода)
Плюсы: не требует доп.действий, всегд актуальное состояние
Минусы: ограниченное количество инструментов, различия в синтаксисах
Кто использует: dbt(table-table only) (рис. 3), atlan
Нюанс: dbt ничего не знает про семантику, его lineage можно сломать комментом c ref и получим неправильные зависимости.😜
Команда разработчиков в Тинькофф пошла дальше и решила запилить свой собственный инструмент под названием TEDI.
Им потребовалось около 2 лет и 11 человек в команде, чтобы сделать версию под Greenplam.
#трудовыебудни
Принесла немного DE-шного материала, посмотрела доклад с конфы Smart Data 2022.
Что такое lineage?
Если кратко, то lineage - это информация, которая описывает движение данных от источника происхождения по точкам обработки и применения.
Где применяется lineage?
- поиск источников: отслеживание зависимостей, поиск узких мест, анализ первопричин аномалий и тд
- анализ влияния: анализ первопричин аномалий, change management, инф.безопасность, комплаенс и тд
Какие есть подходы к построению lineage?
1.
Сидит разраб и ручками прокидывает стрелочки между элементами, то есть явное указание зависимостей
Плюсы: простота реализации, поддержка множеством etl инструментов
Минусы: как протянуто поле от начала до конца не увидишь, дорогостоящая разработка, так как все связи должен знать разраб, много всего в голове должно держаться.
Кто использует: Pentaho DI, SSIS (рис. 1)
2.
Сидит разраб и ручками заполняет метаданные трансформаций
Плюсы: возможен column-column lineage (то есть видим как поле протягивается от начала до конца), граф выполнения исходя из зависимостей
Минусы: метаданные могут не соответствовать реальности из-за косяков со стороны разраба, сложность в описании явных зависимостей
Кто использует: Informatica (рис. 2), SAS
3.
Плюсы: не требует доп.действий, всегд актуальное состояние
Минусы: ограниченное количество инструментов, различия в синтаксисах
Кто использует: dbt(table-table only) (рис. 3), atlan
Нюанс: dbt ничего не знает про семантику, его lineage можно сломать комментом c ref и получим неправильные зависимости.
Команда разработчиков в Тинькофф пошла дальше и решила запилить свой собственный инструмент под названием TEDI.
Им потребовалось около 2 лет и 11 человек в команде, чтобы сделать версию под Greenplam.
#трудовыебудни
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Могла бы сейчас онлайн шопиться, но у Остина я вызываю сомнения. 😔
Пришлось достать чтиво в виде DAMA-DMBOK.
Кстати, с ужасом осознала, что когда стрессую, то начинаю заедать вкусняшками или мониторить маркетплейсы.
А я-то все думала, что я не такая, я жду трамвая…
А как вы справляетесь со стрессом или просто плохим настроением?
P.s. На главную переходила, не работает
Пришлось достать чтиво в виде DAMA-DMBOK.
Кстати, с ужасом осознала, что когда стрессую, то начинаю заедать вкусняшками или мониторить маркетплейсы.
А я-то все думала, что я не такая, я жду трамвая…
А как вы справляетесь со стрессом или просто плохим настроением?
P.s. На главную переходила, не работает
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
У меня тотальные проблемы с чтением.
Я плохо переношу художественную литературу, моему центру удовольствия довольно трудно угодить. Кажется, последнее, что я читала уже после школы был И.Ефремов «Туманность Андромеды».
Зато мне нравится читать что-то связанное с историей или профессиональную литературу.
Есть правда нюанс: как-то мало времени получается на это выделять. Мне нужен какой-то стимул.
В итоге вспомнила, что вообще-то есть канал и решила, что буду читать и делать конспекты с главными тезисами и делиться ими с вами.
Закоммичусь на чтение 4х книг:
🤓 DAMA-DMBOK - свод правил по управлению данными. Настольная книга серьезных дата-людей.
🤓 Lean Analytics – своего рода путеводитель по созданию стартапа. Книга рассказывает о том, как аналитика может помочь в развитии собственного бизнеса. Фактически Lean Analytics продолжает идею так называемого «бережливого стартапа», которая берет начало в книге (The Lean Startup Эрика Риса.
🤓 Mastering Leadership - что-то часто стала мелькать эта книга в постах LinkedIn. По идее книга для CEO и руководителей высшего звена, но думаю, что для общего развития будет полезна всем.
🤓 Storytelling with data - ну куда уж без этого. Название говорит само за себя.
А что вы читаете? Что у вас в списке?
#книги
Я плохо переношу художественную литературу, моему центру удовольствия довольно трудно угодить. Кажется, последнее, что я читала уже после школы был И.Ефремов «Туманность Андромеды».
Зато мне нравится читать что-то связанное с историей или профессиональную литературу.
Есть правда нюанс: как-то мало времени получается на это выделять. Мне нужен какой-то стимул.
В итоге вспомнила, что вообще-то есть канал и решила, что буду читать и делать конспекты с главными тезисами и делиться ими с вами.
Закоммичусь на чтение 4х книг:
А что вы читаете? Что у вас в списке?
#книги
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍1
DAMA-DMBOK.pdf
392.3 KB
Что ж, выкатываю первые 2 главы DAMA-DMBOK.
Вычитала интересный вариант неэтичного использования данных:
https://tylervigen.com/spurious-correlations - интересный сайт, где показаны забавные «совпадения» выборок случайных величин.
К примеру, вы можете увидеть график, где возраст «Мисс Америка» разных лет удивительным образом коррелирует с графиком количества смертей из-за пара и\или разного рода горячих объектов.
#книги
Вычитала интересный вариант неэтичного использования данных:
«Статистическое сглаживание» показателей за отчетный период способно кардинально изменить восприятие чисел. Недавно появившийся термин «data mining snooping» (в буквальном переводе — «добыча данных с отслеживанием», однако в русскоязычных источниках чаще всего используется термин «слепое прочесывание данных») описывает новомодную тенденцию в статистико-аналитических исследованиях больших массивов неупорядоченных данных. В рамках этого подхода на массив данных накладываются исчерпывающие корреляционные связи, то есть данные принудительно втискиваются в рамки некой статистической модели, после чего из массива вытягивается выборка, дающая формально «статистически значимые» результаты, которые в реальности являются чисто случайными и не выходят за пределы статистической ошибки в рамках совокупности исходных данных. Неспециалисты этим приемом вводятся в заблуждение с легкостью. Этот трюк сегодня наиболее распространен в финансах и медицине.
https://tylervigen.com/spurious-correlations - интересный сайт, где показаны забавные «совпадения» выборок случайных величин.
К примеру, вы можете увидеть график, где возраст «Мисс Америка» разных лет удивительным образом коррелирует с графиком количества смертей из-за пара и\или разного рода горячих объектов.
#книги
🔥3❤1