дата инженеретта
3.36K subscribers
277 photos
28 videos
4 files
117 links
мелкое — крупно,
в глубоком разговоре
мудрость приходит

по вопросам сюда: @aigul_sea
Download Telegram
Подъехала задачка!

На картинке a, b - исходные таблицы, res - итоговая

Нужно написать один запрос, который вернет нужный результат в обоих случаях

@data_engineerette
🔥113🌚2💅1
Откуда у них доступ к моему Airflow
😁87🌚4
Худшие фейлы в DE

Наткнулась на тред в реддите, где обсуждались фейлы на работе. Мне больше всего зашли 2 истории, они такие смешные и страшные одновременно🤯

1️⃣Стриминг писал в то же самое место, откуда и читал. Это все длилось год, поэтому накопилось сотни триллионов миллиардов версий документов. Проблема обнаружилась, только когда к ним пришел AWS и пожаловался на проблемы в своих системах

Неужели за этот год они не заметили, как эти пайплайны работают все медленнее и медленнее, почему такая высокая нагрузка и что в таблицах кучи дублей?

2️⃣DE понизил уровень логирования до DEBUG, и это привело к расходам в 100к долларов за неделю

Кажется, теперь я знаю способ, как можно уменьшить расходы компании. Ничего не логировать 😁

💰 Мы сейчас тоже переходим в эру FinOps. Будем пугать аналитиков, чтобы писали оптимальные запросы 😁

А у вас было что-то супер серьезное?

Ссылка на тред

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
117👍6🔥2
Когда работаешь с айсбергом, но есть нюанс
😁33
max_by/min_by

Узнала про прикольные функции, они заменяют оконку/CTE на одно поле

Пример - вывести имя сотрудника с максимальным стажем по каждому департаменту


result = df.groupBy("department").agg(
F.max_by("name", "years")
)


И все! Не надо никаких row_number = 1

В Spark SQL можно еще и фильтр набросить:


spark.sql("""
select
department,
max_by(name, years) filter (where name is not null)
from employees
group by department
""")


А в Trino еще можно собрать массив топ-n в убывающем порядке:


select
department,
max_by(name, years) AS top_employee,
max_by(name, years, 2) AS top_2_employees
from employees
group by department


Аналог в ClickHouse - argMax

@data_engineerette
👍38🔥1453
Влияние ИИ на маркетинг

🔝 Раньше бренды пытались быть в топе выдачи в поисковике, участвовали в аукционах, чтобы выбить себе первые места

Когда я работала в маркетинге, наши аналитики очень часто обсуждали органический трафик. Это пользаки, которые перешли на сайт из поиска, а не рекламного баннера. Помню, как они заходили в браузер с разных устройств и с инкогнито, чтобы перепроверить актуальную позицию. Мы парсили запросы по ключевым словам с упоминанем бренда и без, и это все мониторилось на дэшах

💻 Сейчас же многие пользаки читают нейроответы (я в том числе) и уже там находят решение. При этом бренды остаются не в курсе, в позитивном или негативном контексте они там упоминаются

По-моему, это открывает большое поле для манипулирования нашим выбором и сознанием) Нужно всего лишь чекнуть, какие источники анализирует нейронка, опубликовать на этих сайтах "какой у нас крутой продукт" и (вуаля!) нейронка говорит, что у вас самый лучший продукт 😁

Уже появились инструменты, которые парсят нейроответы, анализируют мнение топовых нейросеток за вас, включая тон упоминаний, сравнение с конкурентами и т.д.

✏️ Теперь бренды меняют подходы, чтобы нейронка их чаще упоминала в своих ответах. Они покупают пресс-релизы, где будет в позитивном ключе описываться компания, указывают точные реквизиты, чтобы было понятно, о какой компании идет речь, и в целом оптимизируют сайты под нейропоиск

SEO (Search Engine Optimization)
AEO (Answer Engine Optimization)
GEO (Generative Engine Optimization)

Это целая наука, меня прямо сильно затянуло в этом покопаться

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
👍224
pre-commit

Про эту штуку мне рассказал наш девопс. Короче, можно настроить у себя на ноуте, чтобы перед каждым коммитом прогонялись линтеры, форматтеры, другие легковесные чекеры

Шаг 1. В корне репки создаем файлик .pre-commit-config.yaml и добавляем нужные модули:


repos:
- repo: https://github.com/sqlfluff/sqlfluff
rev: 4.0.4
hooks:
- id: sqlfluff-fix
args: [
--config, tables/.sqlfluff
]


Шаг 2. Устанавливаем pre-commit


brew install pre-commit
pre-commit install


Все хуки лежат в папке .git/hooks/

Шаг 3. Создаем свой файлик и коммитим

При первой попытке запустятся форматтеры и исправят все ошибки:


git commit

sqlfluff-fix...............Failed
- hook id: sqlfluff-fix
- files were modified by this hook

== finding fixable violations ==
== [tables/test_table.sql] FAIL
L: 1 | P: 1 | CP01 | Keywords must be upper case. [capitalisation.keywords]
...
== [tables/test_table.sql] FIXED


На второй попытке файлик будет закомичен:


git commit
1 file changed, 1 insertion(+), 1 deletion(-)
create mode 100644 tables/test_table.sql


Больше примеров

@data_engineerette
👍30🔥113🌚1
AI в OpenSource

🤓 У нас была проблема: аналитики переписывают свои скрипты с синтаксиса Trino на Spark, и в DDL они постоянно забывают поменять varchar на string. В итоге скрипты падают, только когда уже все вмержено в мастер (не круто)

Линтер при этом не отлавливал такие кейсы, потому что varchar в диалекте спарка тоже существует, но с указанием длины: varchar(10)

🤔 Я покопалась в коде линтера, нашла проблему и завела issue на гитхабе

Через 2 недели приходит отбивка, что все сделано. Я смотрю в PR: Copilot внес правки, Greptile все проревьюил🔥🔥

У кого так же в проектах настроено?

PR: https://github.com/sqlfluff/sqlfluff/pull/7459

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1511😭3
Iceberg это must have?

Вы еще не замечали, что становится больше вакансий, где айсберг уже требуют?

С одной стороны, если посмотреть на hh, то вакансий с айсбергом всего около 5%. Но, с другой стороны, в последнее время на меня выходят именно с формулировкой обязательности

Собрала список компаний, которые хотя бы частично уже живут на Data Lakehouse:
📌Ламода
📌Магнит
📌Альфа
📌М.Видео
📌МТС
📌Сбер
📌X5
📌Лента
📌Золотое яблоко (Delta Lake)

А вот Озон по состоянию на прошлый год планировал идти в Data Mesh, чем в Data Lakehouse

Что вообще думаете?

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
107
Датаклассы

Наконец-то спустя год дошли руки написать про датаклассы 🌷 Меня спросили на собесе в ламоду, и тогда я про них либо краем уха слышала, либо вообще не слышала. Но точно не использовала. Посмотрим, что с ними можно делать

Зачем?

Датакласс описывает данные, но без кучи лишних методов. Он сам вместо нас добавит __init__, __repr__, __eq__ по дефолту. Набор методов можем сами менять с помощью флагов

Как создать?

Чтобы датаклассы заработали, нужно их импорнуть и добавить в виде аннотации:


from dataclasses import dataclass

@dataclass
class SparkParams:
"""Dataclass для параметров spark-submit команды."""

name: str
deploy_mode: str
driver_cores: int
driver_memory: str
executor_cores: int
executor_memory: str
num_executors: int


Готово! Никакие методы добавлять не нужно

Как использовать?


spark_params = SparkParams("test_app", "cluster", 2, "4g", 4, "32g", 8)


Другие фишки

Запрещаем менять поля:


@dataclass(frozen=True)


Задаем дефолтные значения:


@dataclass
class Team:
description: str | None = None
emails: list[str] = field(default_factory=list) # для list/dict/set


Чуть подробнее можно прочитать в короткой статье

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26125
AI-эра

🤵 Я последние пару недель жестко подсела на видосы с фаундерами, CEO на тему бизнеса и AI. Все началось с поста про интервью с основателем Revolut Николаем Сторонским. Дальше мне захотелось узнать мышление других мировых лидеров, и пошло-поехало

В основном, на подкастах обсуждают, что нас ждет в 2030, 2035, 2040. Но уже в этом году прогнозируют, что появится AGI - Artificial General Intelligence. Если не в этом, то точно в следующем. Он будет умнее всех нас. К 2100 году один из экспертов по AI-безопасности предсказывает, что либо людей не будет, либо будут существа, которых мы не будем понимать

🍕 Из крутого на текущий момент - на США в гугле раскатана фича "Have AI call". Вы можете загуглить ближайшие рестораны, нажать эту кнопочку - через несколько минут вам на почту придет отчет, в каких ресторанах есть свободные места, а до каких агент не дозвонился

Есть агенты, которые режут рилсы. Или гуглят по видосам, когда не можете вспомнить, где слышали цитату. А из особо крутого я узнала про Genie 3 от Google DeepMind - там можно смоделировать новый мир

📖 Также обсуждают, что детям сегодняшнего дня в колледж идти уже не имеет смысла. Потому что после выпуска они с очень высокой вероятностью не смогут найти себе работу. От людей требуется все более и более сложная работа

🤖 Физических роботов ожидают лет через 10-15. Мне очень понравилась идея от CEO Microsoft AI - робот проактивный, он знает, что на выходных будет куча гостей, сканирует холодильник, заказывает еду. Еще можно придумать, что в сам холодильник встроены программы (ПП, еще что-нибудь), и он понимает, чего тебе не хватает. А потом домашний робот принимает продукты от ровера и расставляет в холодильник. Ммммм...

Список каналов, которые мне понравились:

The Diary of a CEO - классный ведущий, задает нетривиальные вопросы

Cleo Abram - тоже классные вопросы, канал ориентирован на обсуждение позитивных сторон технического прогресса

Stanford Graduate School of Business - интервью с C-level в актовом зале для студентов

Silicon Valley Girl - на Марину я подписана давно, но каких же крутых персонажей она теперь зовет на подкасты, некоторые дублируются на русском на втором канале

Lex Fridman - очень своеобразный, он не про заковыристые вопросы, а про длительное монотонное общение

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥157🌚5😭3💅1
Самый дурацкий кусок кода

У вас есть такой код, который вы один раз увидели, но никогда не забудете? Потому что он был настолько странным и запомнился надолго

😱 У меня такой есть. Это джойн 15 раз в цикле с таблицей, от которой отфильтровываются строки, при этом несколько раз копируются датафреймы

Хоть и требовалось максимально сохранить код автора, но я все равно переписала на один джойн + фильтр. Смотря на оригинальный код, я даже сейчас не до конца понимаю, что там происходит и как это писалось 🤪

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚12🤷1
Как я проводила собесы

Собесы я хотела проводить еще года 4 назад. Но тогда брали коллегу, которая пришла чуть раньше меня( Но моя цель все-таки реализовалась, и я наняла 1 DE и 1 DQE

🤔 Всего я провела 25 собеседований. Резюме из канала поначалу кидала техлиду, чтобы он помог понять, подходит ли человек и на что вообще смотреть. HR раз в неделю присылала по 10 резюме, мы с PO отбирали понравившихся кандидатов по принципу: сомнение = нет

Для подготовки мне дали файлики с вопросами по грейдам. Позже я собрала свой пул, добавив вопросы со своих и чужих собесов

Перед собесом я обязательно внимательно просматривала резюме, записывала все неясные моменты. Открывала список своих вопросов и решала, с чего начать. Я вела заметки по каждому кандидату: особенности опыта, заданные вопросы, каких знаний не хватает, эмоциональное впечатление

Собес - это из black box (или gray box, т.к. есть резюме) сделать white box.

из заметок дата инженеретты


👩‍💻 Я начинала с вопросов по опыту, подмечала несостыковки, потом это раскручивала. Было прикольно, когда один вопрос сразу вскрывал правду 😁 Вроде написано sql и несколько бд, а там: таблички не создавал, в бд ничего не писал, full join не использовал, объемы не знает, про кликхаус только слышал, да и начал изучать месяц назад

По технике у меня не было конкретного порядка. Просто 300 вопросов - некоторые я задавала почти всегда, а остальные выбирала по ходу. Иногда кандидат был хорошим и не хотелось задавать простецкие вопросы. Иногда приходилось спрашивать про having и все равно получать неправильный ответ 😭

Некоторые кандидаты были не очень с первых минут, но мы все равно сидели час. В следующий раз порекомендовали просто завершать встречу пораньше. Хотя со мной дважды завершали встречу через 20 минут - было неприятно))

После собеса мы с PO обменивались мнениями, и разногласий практически не было. Вот некоторые ред и грин флаги из моих заметок:

нет вопросов, не заинтересован в вакансии
нет общих де чатиков
"просто делал, что мне сказала команда"
очень много говорит "разное", обобщенно
жутко медленный, сложно следить за ходом мысли
много говорит, нечетко отвечает
душный, тяжелый, прикапывается к каждому вопросу
подключился с улицы с телефона в костюмчике
не понравилось, когда старший коллега спросил, можно ли в хайве сделать primary key (типо опытнее, но тупее)

ОС попросил от меня по ответам
"готов с этим справляться"
приятный уверенный чел
инициативный, осознанный
умеет думать

Кто тоже проводил, поделитесь своими флагами?

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍105😁5
Как поведёт себя аналитическая СУБД в облаке под нагрузкой? Разбор реального кейса

Selectel и СР-ТЕХ приглашают на практический вебинар, где покажут, как провели нагрузочное тестирование и масштабировали аналитический кластер на 111 узлов всего за час в облаке.

📅 31 марта, 12:00
📍 Онлайн
👥 Для дата-инженеров, архитекторов данных, DevOps и SRE-инженеров, технических руководителей

👉 Смотрите полную программу и регистрируйтесь: https://slc.tl/y4ba6

Чтобы не пропустить вебинар и узнавать о других событиях и бесплатных курсах Selectel, подписывайтесь на @selectel_events

Реклама. АО "Селектел". erid:2W5zFJybJAd
👍3🤷3
Мы свернули куда-то не туда😁
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1912😭4💯1
Как положить гитлаб?

Кратко: внедрить нейронку🧑‍🦲

Что произошло?

В MR начали бесконечно запускаться пайплайны с тестами каждые полминуты. Когда я впервые увидела, их уже было 90 штук!🪿

Как мы до такого докатились?

Есть джоба, которая скачивает либу, красиво форматирует файлики и пушит изменения

Нейронка добавила кэширование, чтобы при повторной установке либа бралась из кэша, а не скачивалась по сети

Вроде бы хотелось как лучше, а получилось как всегда

Все сломалось 😭

Что было упущено?

1. Изначально джоба коммитила все измененные файлики через git add . Но и никогда не предполагалось, что будет писаться в репо что-то еще. Здесь сузили git add до папки/типов файлов

2. Папка с кэшом не была добавлена в .gitignore

3. Никто не увидел опасности этого изменения, потому что была еще куча других

🤓 В общем, на нейронку надейся, а сам не плошай

@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🌚54
Каждому по лейкхаусу

Мой коллега Саша запилил крутецкий курс по айсбергу! 😎 Я сама его полностью прошла, записала несколько новых для себя моментов и осталась очень довольна контентом👍

Например, вы знаете, как сделать CDC на айсберге? Или как выглядит partition evolution на уровне storage? У вас могут лежат непартицированные, партицированные и по-разному партицированные данные в одном месте, и это работает🤩

Поэтому если хотите освоить технологию на практике и перейти в Senior-лигу, то присмотритесь к курсу «Apache Iceberg для Data Engineer»

Главная фишка: вы соберете полноценный Lakehouse прямо на своем ноутбуке

В программе только суть:

🤩Внутреннее устройство и транзакционность таблиц
🤩Data-as-Code: Time Travel, ветвление и тегирование
🤩Performance Tuning: как выжать из Iceberg максимум скорости

🎁 Специально для подписчиков моего канала - скидка 15% по промокоду

DATA_ENGINEERETTE


🚀 Регистрация тут
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍125