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

По вопросам рекламы писать в лс канала
Download Telegram
Лет ми спик фром май харт🇬🇧🇬🇧🇬🇧

Я человек, у которого из постоянного в жизни похоже только орущая кошка в 5 утра и занятия англом по пятницам.
Занимаюсь с преподом я уже почти 2 года. Изначально у меня уже был неплохой уровень, поэтому сейчас акцент исключительно на speaking, то есть каждое занятие мы болтаем на какую-то рандомную тему без подготовки (политика, экология, ИИ и тд).
Препод мой уже в который раз намекает, что хватит уже стесняться, моего уровня англа с головой хватит для работы за рубежом и пора бы уже пробоваться, а я ему в ответ все курлык да курлык мол мне еще надо подготовиться. ☺️

А на днях вот на vc статейка нашлась про английский язык от бывшего сотрудника Яндекса, который теперь работает в Амазоне. И хотя там довольно базовые вещи прописаны, все равно сделаю выжимку из текста для таких же курлыкалок как я.

1. Всем плевать на акцент, глобализация делает свое дело. Самое главное правильно передать основную мысль, но сфокусируйтесь на том, чтобы передать смысл минимальным количеством слов.
2. Используйте простые слова: за использованное на вики-страничке слово punt (знаете такое?) в комментах ругаются на то, что использовали сложное понятие.
Далее идут 3 пункта, которые хорошо бы и в родной речи использовать😜:
3. Не стесняйтесь переспрашивать, если что-то не поняли.
4. Убеждайтесь, что вас понимают. В конце концов, вы же не UDP.
5. Используйте синонимы и объяснения «на пальцах»
6. Просите включать камеру и включайте её сами. Удивительно, но даже лагающее видео всё равно сильно помогает понимать чужую речь.
7. Скажите нет мобильным звонкам. По опыту автора 100% звонков на мобильный по вопросам собеседований были полнейшим фейлом. Просите делать встречу в Zoom/Skype/Meet и т. д.
8. Тренируйте свои рассказы для собеседований!
- Опишите свой опыт табличкой в формате STAR, опираясь на Leadership Principles.
- Есть сервис mock-собеседований
9. Убеждайте данными. Везде, где вы хотите сказать что-нибудь особенно важное, подумайте, каким числом, измерением или метрикой это можно сопроводить, и насколько она будет понятна вашим слушателям.
10. Попробуйте подготовиться к восприятию акцентов на слух. Часто посмеиваются над акцентом индусов, но в моем топе прочно тусуются французы и ирландцы.

Анекдоты про протоколы (применять на собесах с осторожностью):
Я знаю неплохой анекдот про UDP, но не факт, что он до вас дойдёт.
Я знаю неплохой анекдот про TCP, но если он до вас не дойдёт, то я повторю

#карьера
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥96
В течение последних 2х недель пишу коллегам о том, что у нас что-то не так считается в метриках.
Это я нырнула в наследие, которое осталось от прошлых команд аналитиков, а там вот такие сюрпризы 🫠

Мораль?
Проверяйте все, что вам дают со словами «ну это уже давно так считается, проблем не было».

Еще наткнулась на статью от Профи.ру, в которой описывается как маленький косяк уронил ключевую метрику команды, а чтобы найти причину потребовалось 3 месяца 🧐

#трудовыебудни
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
😈 Два типа инженеров данных. Gentle и Hardcore.

ℹ️ Пишу заметки с докладов конфы Smart Data
На этот раз спорный доклад (как сам автор заявляет) от Дмитрия Аношина. Позабавил слайд с сильной и независимой Марусей и Иннокентием, который удачно женился на богатой даме.

Маруся и Иннокентий являются владельцами разных бизнесов и под свои нужды они ищут 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
🤬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