Dataism
3.63K subscribers
242 photos
49 videos
10 files
126 links
Бот для подготовки к IT-собесам @DataismPrepBot 📲
Недушный канал про аналитику, карьеру в IT и немного португальского лайфстайла.
Полезно аналитикам, дата-сатанистам и продактам.

По вопросам рекламы писать в лс канала
Download Telegram
Так, ну теперь официально могу заявлять, что поиск приключений на жопу у меня в генах. ☺️
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
🤬SELECT style FROM SQL. Часть 1

Бесконечно долго можно смотреть на 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,
email
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.pdf
100.6 KB
SELECT style FROM SQL. Часть 2

Продолжаю пост про 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
Кстати, доколупалась с опросом до участников чата karpov.courses
Вот такие результаты:)
🤔1
Проснулись, улыбнулись, пострадали 😭
А как у вас проходят выходные?
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.

#трудовыебудни
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. На главную переходила, не работает
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 - ну куда уж без этого. Название говорит само за себя.

А что вы читаете? Что у вас в списке?

#книги
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍1
DAMA-DMBOK.pdf
392.3 KB
Что ж, выкатываю первые 2 главы DAMA-DMBOK.

Вычитала интересный вариант неэтичного использования данных:
«Статистическое сглаживание» показателей за отчетный период способно кардинально изменить восприятие чисел. Недавно появившийся термин «data mining snooping» (в буквальном переводе — «добыча данных с отслеживанием», однако в русскоязычных источниках чаще всего используется термин «слепое прочесывание данных») описывает новомодную тенденцию в статистико-аналитических исследованиях больших массивов неупорядоченных данных. В рамках этого подхода на массив данных накладываются исчерпывающие корреляционные связи, то есть данные принудительно втискиваются в рамки некой статистической модели, после чего из массива вытягивается выборка, дающая формально «статистически значимые» результаты, которые в реальности являются чисто случайными и не выходят за пределы статистической ошибки в рамках совокупности исходных данных. Неспециалисты этим приемом вводятся в заблуждение с легкостью. Этот трюк сегодня наиболее распространен в финансах и медицине.


https://tylervigen.com/spurious-correlations - интересный сайт, где показаны забавные «совпадения» выборок случайных величин.
К примеру, вы можете увидеть график, где возраст «Мисс Америка» разных лет удивительным образом коррелирует с графиком количества смертей из-за пара и\или разного рода горячих объектов.

#книги
🔥31
👨‍💻Бот для подготовки к IT-собеседованиям
@DataismPrepBot

В базе уже 600+ реальных вопросов с собеседований (с ответами!)
Теперь готовиться к интервью стало намного проще.

Какие есть специальности:
Data analyst
Data Scientist
Data Engineer
Python Developer
Go Developer
System Analyst

Какие фичи в боте:
Возможность отслеживания статистики
Добавление вопросов в Избранное
Ссылки на доп.материалы для изучения
Экспресс-скрининг знаний

Бесплатно, без регистраций и смс 🤩

#поискработы
#бот
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🔥2
Как выглядит работа аналитика данных в РЕАЛЬНОСТИ

👨‍💻 Часто просят рассказать более детально суть работы аналитиком.
Сидела я вечером и думала, как же жизненно это описать. В итоге родилось это.

Кидайте в комменты свои варианты (и про свою профессию, не только аналитики).

А еще напоминаю, что есть милый бот для подготовки к собеседованиям @DataismPrepBot
250+ вопросов с ответами ждут :)
Без регистраций, смс и бесплатно

#трудовыебудни
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20