ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

NOdata Миша

NOdata Миша

Открыть в Telegram

Автор каждый день пытается познать данные, но у него это не получается, поэтому он пишет всякую ерунду Я - https://t.me/MihaVeryNice

Больше
1 496
Подписчики
-124 часа
-47 дней
-1430 дней
Архив постов
Это оффер на позицию дата-инженера 💼 А теперь честно: сколько раз вы слышали фразу «мы решили продолжить с другим кандидатом
Это оффер на позицию дата-инженера 💼 А теперь честно: сколько раз вы слышали фразу «мы решили продолжить с другим кандидатом»? 🥲 Проблема часто не в вас, а в рынке кандидатов: на аналитика и разработчика откликаются сотни человек. А вот дата-инженеров не хватает, и компании готовы платить им на 30% больше, чем многим другим специалистам в data. Кто такой дата-инженер? Тот, кто строит «трубы» для данных: собирает, обрабатывает, хранит и доставляет их туда, где с ними работают аналитики и ML-специалисты. Без него в компании не работает ничего. Симулейтив запустил курс-буткемп «Инженер данных»: ⭐️Как устроено обучение: 1. Первые 10 недель: база и выход на уровень junior 2. Дальше: углубление в ключевые инструменты и рост до middle ⭐️Что внутри: ➖SQL и Python ➖пайплайны сбора и обновления данных ➖хранение и обработка данных, DWH ➖живые занятия с ментором каждую неделю ➖подготовка к собеседованиям с первых недель ➖ИИ-инструменты как часть рабочего процесса ➖практические кейсы и гостевые лекции от дата-инженеров из Яндекса, Т-Банка, Авито, Сбера и Ozon Подойдёт, если вы: ✔️ хотите войти в профессию с нуля или перейти из аналитики ✔️ устали учиться самостоятельно и не видите результата ✔️ хотите понимать весь путь данных, а не только анализировать их 🔥 Грант на обучение + гарантия трудоустройства Грантов всего 5. Старт программы — 10 ноября. Хватит ждать ответа от рекрутеров. Заберите свой грант и начните путь к такому же офферу 👇 🔗 ЗАБРОНИРОВАТЬ МЕСТО С ГРАНТОМ

🚀 5 полезных фишек Apache Airflow 1. Dynamic Task Mapping - динамическое создание задач Допустим, нужно загрузить 20 таблиц. Через обычный for можно создать 20 задач, но список таблиц должен быть известен при формировании DAG. Dynamic Task Mapping позволяет получить список во время выполнения, например из БД или API, и создать задачи автоматически.

@task
def get_tables():
    return ["users", "orders", "products"]

@task
def load_table(table):
    print(f"Loading {table}")

load_table.expand(table=get_tables())
Каждая таблица получит отдельную задачу со своим статусом, логами и retries. 2. Callbacks - автоматические действия при завершении задачи Многие используют Callbacks только для отправки уведомлений об ошибках. Но возможности гораздо шире. Можно выполнять собственную Python-функцию при разных событиях: - on_success_callback - успешное завершение. - on_failure_callback - ошибка. - on_retry_callback - повторная попытка. Например, после успешной загрузки записывать информацию о выполнении в audit-таблицу.

def save_audit(context):
    ti = context["ti"]
    write_audit(ti.dag_id, ti.task_id, ti.state)

PythonOperator(
    task_id="load_data",
    python_callable=load_data,
    on_success_callback=save_audit
)
Также через Callbacks можно отправлять события в Kafka, обновлять статусы во внешних системах или создавать инциденты в мониторинге. 3. Trigger Rules - управление условиями запуска задач По умолчанию задача запускается, только если все предыдущие задачи завершились успешно (`all_success`). Представим DAG, который обрабатывает разные форматы файлов: - CSV -> parse_csv - JSON -> parse_json Если пришёл CSV, задача parse_json получит статус skipped. Но нам нужно, чтобы после обработки файла запустилась общая задача publish. Для этого используем другое правило:

from airflow.utils.trigger_rule import TriggerRule

publish = EmptyOperator(
    task_id="publish",
    trigger_rule=TriggerRule.NONE_FAILED_MIN_ONE_SUCCESS
)
Теперь publish запустится, если хотя бы одна предыдущая задача завершилась успешно и ни одна не завершилась ошибкой. 4. map_index_template - понятные имена динамических задач При использовании Dynamic Task Mapping Airflow по умолчанию присваивает задачам числовые индексы: load_table[0], load_table[1], load_table[2]. Но можно сделать названия более понятными:

from airflow.decorators import task
from airflow.operators.python import get_current_context

@task(map_index_template="{{ table_name }}")
def load_table(table):
    context = get_current_context()
    context["table_name"] = table

load_table.expand(
    table=["users", "orders", "products"]
)
В интерфейсе вместо индексов будут отображаться названия таблиц. Особенно удобно, когда динамически создаются десятки или сотни задач. 5. expand_kwargs - динамическая передача нескольких параметров В expand() мы передавали каждой задаче один аргумент. А что, если для каждой таблицы нужны разные параметры? Например, название таблицы и тип загрузки.

@task
def get_configs():
    return [
        {"table": "users", "load_type": "full"},
        {"table": "orders", "load_type": "incremental"},
        {"table": "products", "load_type": "full"}
    ]

@task
def load_table(table, load_type):
    print(table, load_type)

load_table.expand_kwargs(get_configs())
Airflow создаст три задачи, каждая из которых получит собственный набор параметров. Удобно для универсальных DAG-ов, обрабатывающих разные таблицы, источники и сценарии загрузки.

👨🏻‍💻 AI в бэкенд-задачах — на Podlodka Backend Crew Код теперь может написать агент, но за результат всё ещё отвечаете вы.
+4
👨🏻‍💻 AI в бэкенд-задачах — на Podlodka Backend Crew Код теперь может написать агент, но за результат всё ещё отвечаете вы. Организаторы Podlodka Backend Crew собрали конференцию о том, как работать с бэкендом после того, как AI написал код. Причём в программе нет докладов в жанре «у нас все получилось» — только реальная практика. Конференция пройдёт с 26 по 30 октября. 🧠️️️️ Участники сезона: • Разберут пулл‑реквесты от агента и попробуют предотвратить возможные инциденты на рулетке кейсов • Выяснят, какие неожиданные ловушки скрываются в OpenAPI и на что обращать внимание при разработке контрактов • Разберут антипаттерны в AI-юнит-тестах, узнают, как их избежать с помощью современных инструментов, и заберут себе новый агентский скилл • Спроектируют бэкенд дейтинг-приложения на архитектурной кате и решат, где в нём действительно нужен AI. Формат Podlodka Backend Crew — комфортный онлайн: 5 дней, утренние и вечерние сессии в Zoom. Отдельный плюс — цена: заметно ниже привычных конференций, при этом вы не просто слушаете о чужом опыте, а разбираете PR и отвечаете за релиз, проектируете систему в команде и расследуете чужие провалы. Такого вовлечения не получить на обычной конференции. 🔗 Изучайте программу и присоединяйтесь: https://podlodka.io/becrew Скидка по промокоду backendnodata

Работаешь дата инженером не первый год, а PostgreSQL всё ещё может удивить 😅 Недавно столкнулся с ситуацией, которая, казало
Работаешь дата инженером не первый год, а PostgreSQL всё ещё может удивить 😅 Недавно столкнулся с ситуацией, которая, казалось бы, должна быть довольно распространённой. Нужно переименовать таблицу через ALTER TABLE ... RENAME, но ты не OWNER этой таблицы. Права на переименования раздать тоже нельзя Вроде штука достаточно распространненая должна быть, но раньше я как-то не сталкивался с такой задачей. В итоге решение оказалось довольно интересным — SECURITY DEFINER. Можно создать процедуру, которая будет выполняться с правами своего владельца, и дать пользователю доступ только к её вызову.

CREATE PROCEDURE ...
SECURITY DEFINER
В результате пользователь может выполнить нужное переименование, не получая права OWNER на сами таблицы. Я в такие моменты всегда задаюсь вопросом: "А точно ли я все эти годы чем-то занимаюсь, если мне еще не встречались такие вещи?)" А у вас были подобные моменты, когда внезапно узнаёшь что-то новое в технологии, с которой давно работаешь?

📊 Открытый мок-интервью на Data Engineer | 24 октября, 15:00 мск Хочешь понять, как проходят технические собеседования на Da
📊 Открытый мок-интервью на Data Engineer | 24 октября, 15:00 мск Хочешь понять, как проходят технические собеседования на Data Engineer и чего ждут от кандидатов? Приходи на открытый эфир от Shortcut Education Мы – менторская программа для разработчиков. Помогаем готовиться к собеседованиям, получать офферы в бигтех и расти в грейде и зарплате. Наши менторы работают в ведущих IT-компаниях, а менти уже получили 500+ офферов Мы открыли новое направление Data Engineering и запускаем серию эфиров с разбором технических собеседований ↓ На этой неделе собеседовать будет Максим Костин: — Ведущий инженер данных в Сбере, ранее работал в Data Office VK — В VK строил DWH и переносил расчёт ключевых метрик с Hadoop на YTsaurus — Более 5 лет работает с Python, Scala и Java Максим проведёт интервью с реальным кандидатом и после каждого ответа объяснит, что засчитал бы, а что нет и почему. В конце ответит на вопросы из чата. Хочешь проверить свои знания или подготовиться к смене работы? Пригоняй на эфир! Участие бесплатное:) 📲 Переходи в бота, чтобы получить ссылку перед эфиром → @shortcut_de_bot Реклама. О рекламодателе.

🔥 5 неочевидных фишек ClickHouse, которые могут сильно упростить жизнь 1️⃣ LIMIT BY — ограничение строк внутри каждой группы Например, нужно получить топ-3 товара для каждого магазина:

SELECT
    shop_id,
    product_id,
    revenue
FROM sales
ORDER BY shop_id, revenue DESC
LIMIT 3 BY shop_id;
Не нужно делать ROW_NUMBER() и потом фильтровать результат. 2️⃣ argMax() — получить значение из строки с максимальным значением Например, нужно узнать последний статус пользователя:

SELECT
    user_id,
    argMax(status, event_time) AS last_status
FROM events
GROUP BY user_id;
argMax(status, event_time) вернёт status из строки, где event_time максимальный. И это часто гораздо проще, чем: ROW_NUMBER() OVER (...) 3️⃣ ASOF JOIN — join по ближайшему времени Очень полезная штука для временных данных. Например, есть сделки: 10:05 10:17 10:42 И история цен: 10:00 → 100 10:10 → 105 10:30 → 110 Нужно для каждой сделки взять последнюю известную цену на момент сделки. Для этого есть:

SELECT *
FROM trades AS t
ASOF LEFT JOIN prices AS p
    ON t.symbol = p.symbol
   AND t.time >= p.time;
По сути это join по принципу "найди ближайшее предыдущее значение". 4️⃣ countIf / sumIf / avgIf В ClickHouse не обязательно писать огромный CASE WHEN. Например:

SELECT
    count() AS total,
    countIf(status = 'success') AS success,
    countIf(status = 'error') AS errors,
    sumIf(amount, status = 'success') AS success_amount
FROM payments;
Получается очень компактно. 5️⃣ Приближённые uniq() Например:

SELECT uniq(user_id)
FROM events;
ClickHouse может считать уникальные значения приближённо, зато очень быстро и с небольшим потреблением памяти. Сохраняй себе чтобы не потерять А больше про кликхаус можно услушать на моем курсе

Специально для тех 10 человек, которые хотели видеть мемы тут
Специально для тех 10 человек, которые хотели видеть мемы тут

Что хотите тут видеть? (Можно выбрать несколько вариантов)
Anonymous voting

Несколько новостей, мыслей, вопросов 1️⃣ Я доработал свой курс для дата инженеров (для скидки используйте промокод TGG). Снял для него видосы в которых поясняю за инструменты. Вообщем его содержанием я доволен (с учетом того что это все таки не полноценное обучение профессии, а мини курс по цене мини курса). Буду рад если будете проходить этот курс и писать честные отзывы 2️⃣ - Немного рефлексии по поводу ведения канала. Вообще если не считать какой-то лени, то ввести канал (по крайне мере мне) мешают две вещи: 💅 1. Когда ведешь канал, то все равно смотришь по сторонам и видишь какие все успешные: просмотры, подписчики, реакции и комментарии. И вроде головой понимаешь, что «Да есть люди у которых канал круче, но есть в десятки раз больше людей которые введут или хотели бы ввести тг и я круче чем они», но все равно как-то иногда грустненько из-за этого. И поэтому после возвращения видеть ваши реакции и комменты очень приятно) 🙋‍♀️ 2. Частое не понимание что можно тут писать: Канал вроде про дата инженеринг, тогда наверное могу писать: "Обнаружил в кликхаусе такую-то штуку", но вдруг люди которые тг читают не хотят технически во что-то углубляться во время просмотра Тогда может писать о каких-то рабочих задачах, а вдруг тут много людей не совсем про дата инженеринг и им это не интересно Писать например о том как hr не пришла на назначенный собес, ну это вроде что-то про более из моей жизни и с дата инженерингом не особо связано И вот так с любой темой. Сейчас вроде разрешил писать себе на чуть более широкие темы (ведь это все таки мой канал,), но ваше мнение тоже интересно и от сюда отпрос ниже 👇

Небольшой постик для тех кому интересно, что сейчас спрашивают на позицию дата инженера Во первых это, конечно, sql и python
Небольшой постик для тех кому интересно, что сейчас спрашивают на позицию дата инженера Во первых это, конечно, sql и python и как правило (в процентах 80%) будет лайв кодинг. Иногда задачку на собеседовании можно решить не на питоне, а на другом языке Задачки, как правило, не супер сложные и объемные, но в условиях собеседования и ограниченного времени можно не справится По питону задачка например сделать что-то с массивом или словарем. Например вывести первое повторяющееся значение в массиве По SQL задачка например найти сотрудника со второй по величине зарплатой Задачки как правило действительно не очень сложные и можно их натренировать Еще вопросы которые присутствуют почти всегда это вопросы про БД. Например рассказать про индексы или партиции. Часто эти вопросы практические - например рассказать про выбор поля партиции, но часто и больше в теорию - например рассказать про того как джойны могут происходить под капотом И на самом деле эти 3 вещи (бд, sql, python) дают большую часть того что вас спросят (по крайне мере у меня было так) Конечно, спрашивают еще и другие вещи. И про некоторые эти вещи нужно подробно рассказать, но например по Airflow большая часть услышанных мной вопросов было в формате «Расскажи какие операторы знаешь», то есть если работаешь с этим инструментом, то вопросов не возникнет

А чем я вообще занимаюсь? Хоть у меня и нет синдрома самозванца, но я иногда смотрю на свою работу со стороны и такой: «Да че
А чем я вообще занимаюсь? Хоть у меня и нет синдрома самозванца, но я иногда смотрю на свою работу со стороны и такой: «Да чем ты вообще занимаешься целый день?! Твоя задача всего лишь переложить таблички с одного места на другое и потом соеденить их. Что в этом сложного» 🤔 И на словах оно в целом так и есть. И вроде бы в работе с табличками особо ничего сложного нет, но потом работаешь и … Была у меня тут простая на первый взгляд задача - заинсертить (положить) данные в таблицу) Ну то есть что-то типо такого запроса:

insert table1
select * from table2
where id in (ну и тут айдишники отобранные по условию)
Опустим часть о том как именно достать эти айдишники (это тоже не всегда просто, но сейчас не об этом) - это делается с помощью запроса с джойнами у условиями Казалось бы задача решена - просто подставить наше условие в скобки в скрипте выше, но так не всегда работает, так как запрос тяжелый. Не понятно когда отработает, а там таймаут, ресурсов много хочет и тд Пришлось не много помаяться с этим 🤔 Короче в итоге я создал промежуточную таблицу, куда заинсертил нужные мне айдишники. Но и заинсертить было не так просто: сделал ДАГ который берет данные за один день, дальше это один день еще резался на чанки, дальше были вычисления и инсерт 🎉 И вот маленькая задача (даже задачей это сложно назвать), превратилась в целый квест А у вас бывают мысли о том что вы на работе занимаетесь не пойми чем?

Так получилось, что у меня еще есть жизнь за пределами айтишки (прости меня мой работодатель) и вот про эту другую часть жизн
Так получилось, что у меня еще есть жизнь за пределами айтишки (прости меня мой работодатель) и вот про эту другую часть жизни у меня теперь тоже есть ютуб канал Он такой больше гиговский - про комиксы, приставки и подобное Если нравится такое, то переходите) https://youtube.com/channel/UCYjc2ZvaAmrKykibyKs641A?si=muG9vLeSaC4nIlPZ

Я тут еще и на ютую вернулся после долго перерыва 🎉 Смотрим чем дата инженер на работе занимается 👁👁 https://youtu.be/W7sM4NTtpwQ

Еще бы хотел кратко высказать по рынку, как сложно сейчас найти работу Не какой-то детальный разбор, а личный опыт У меня пои
Еще бы хотел кратко высказать по рынку, как сложно сейчас найти работу Не какой-то детальный разбор, а личный опыт У меня поиск работы занял где-то полгода. Но не прям активного поиска, а скорее искал что-то лучше чем у меня было И все это время собесы были. Не сказать чтобы много, но были (просто я лох, который не мог их пройти) А значит работа точно есть, но ее, конечно, меньше чем года 3 года назад, но в целом интересные вакансии попадаются Рынок жив! А у вас как с этим дела?

Друзья, спасибо вам больше! Когда я делал этот курс, то это было больше про закрытие собственного гештальта, чем про то что в
Друзья, спасибо вам больше! Когда я делал этот курс, то это было больше про закрытие собственного гештальта, чем про то что выпустить курс и заработать много денег Много денег я, конечно, не заработал, но видеть то что вы покупаете курс это очень круто И если раньше у меня было: «Ну может когда-то будет дополнять курс, а то он слишком поверхностный», то теперь я обязательно этим займусь. Чувствую ответственность)

Я стал инфоцыганом Было у меня давнее желание сделать курс для дата инженеров. Но всегда считал, что я еще как-то не достаточ
Я стал инфоцыганом Было у меня давнее желание сделать курс для дата инженеров. Но всегда считал, что я еще как-то не достаточно знаю, недостаточно усидчивости сделать что-то полноценное и крутое, чтобы выпустить и мне бы не было за это стыдно 🥳 И вот настал момент, и я сделал курс за который мне не стыдно. Да, я все еще недостаточно знаю и мне не хватает усидчивости чтобы сделать что-то крутое, но теперь мне не стыдно 😂 🧠 У меня получился в итоге не супер всеобъемлющий курс, который сделает из вас супер специалистов в каждом инструменте с которым работает DE, а скорее базовое знакомство с ними. Но некоторые вещи рассмотрены достаточно подробно - например по Airflow (14 видосов) 😎 Показывал курс друзьям, сказали что понравилось, но может просто не хотели обижать) 💵 На первое время на курс скидка и стоит меньше 500р (как там принято говорить, по цене кофе в вашей Москве), поэтому если хотите поддержать меня, а заодно получить новые знания, то вперед Ссылка на курс по скидке Ссылка на страницу о курсе

Как уже рассказывал, я 2 месяца назад сменил работу. Далось (а где-то и все еще дается) мне это сложнее чем ожидалось И случи
Как уже рассказывал, я 2 месяца назад сменил работу. Далось (а где-то и все еще дается) мне это сложнее чем ожидалось И случилось это из-за двух вещей: 1️⃣ Раньше я не так много работал с витринами данных. Работал, конечно, но они были не большие и было много другой дата инженерной работы, а тут основная часть работы это витрина со сложной (по крайне мере для меня) логикой 2️⃣ Погружение в это все. На своем предыдущем месте я отработал 2.5 года и там все строилось с нуля, поэтому прям сильно погружаться не приходилось, я и забыл какого этого И вот с учетом этих двух пунктов на новом месте я чувствую себя себя каким-то джуном который вообще не понимает, что происходит ➕Главное в таких ситуациях не стеснятся просить помощи (особенно в вещах, которые сам вряд ли поймешь). Чувствую, конечно, что я, наверное, уже сильно задолбал людей своими вопросами, но без этого не куда 🥳И вот когда постепенно начинаешь разбираться в этом всем, то такое классное чувство. Как будто с нуля учишься айти в целом. Как будто уже становишься не лохом)

Мои «любимые» собеседования при поиске работы: 🎉 То что не дают обратной связи после собеса - это не прям редкая штука, хотя
Мои «любимые» собеседования при поиске работы: 🎉 То что не дают обратной связи после собеса - это не прям редкая штука, хотя после того как у меня появился какой-никакой опыт ОЗ дают почти всегда, но иногда все таки случается обратное. А тут мне ничего не ответили после финального собеса с руководителем. То есть я сначала общался с hr, потом прошел собес с двумя тех специалистами, потом общался с руководителем, далее спустя время и молчание с их стороны, попросил все таки какой-то итог по себе, а в ответ игнор) И причем это не какая-то шарашкина контора, а вроде хорошая 🎉 Hr назначает скрининговое интервью, а сама не приходит. И так в двух топовых компаниях. Никто не пришел на фан встречу( 🎉 Захотел я что-то дополнительно к основной работе. Вакансия - писать уроки к курсу для DE. Нужно сделать тестовое - сделать урок про кликхаус. Дедлайн 3 дня. Давненько я не делал тестовые, но это решил сделать. В последний день, конечно) И буквально когда я уже оформлял почти готовый урок, мне пишет hr и сообщает, что нашли кандидата. Больше тестовые делать не буду) Но штука с не нужным тестовым в итоге пошла на пользу, так как наконец-то взялся курс, который давно хотел сделать. Так себе сделал, но главное сделал) Какие у вас были «любимые» собесы?

Как не надо проходить собеседования Значит где-то год назад: Захотел я поменять свое место работы (но не прям сильно захотел)
Как не надо проходить собеседования Значит где-то год назад: Захотел я поменять свое место работы (но не прям сильно захотел), обновил резюме и сижу жду пока меня крутого дата инженера куда-то позовут. Если кто-то будет приходить то буду проходить собесы, а если нет, то мне и тут хорошо И в целом ко мне приходили и звали на собес, но понятно что это происходило реже по сравнению с тем что если бы я сам откликался на вакансии И тут то и возникает главная проблема - умение проходить собеседование это все равно навык, он, конечно, имеет определенную корреляцию с тем насколько ты крутой спец, но все равно далеко не полностью Например на собесах на DE обычно дают sql задачку и часто какую-то простенькую (по крайне мере одну из первых) на оконные функции (пример в коментах) Я оконки знаю и умею с ними работать, но например за последние пару месяцев я их вообще не касался, а работал с другими вещами и в итоге простейшая задача, которая должна занять у меня меньше 5 минут, занимает минут 15 и еще какую-то глупую ошибку сделаю И как же с этим бороться? Ну если мы говорим именно про часть лайв кодига (а помимо sql часто еще и питон дают), то тут есть 2 варианта: 1) Заходить на специальные ресурсы для решения задач по питону и sql (тут писал как меня заблокировали на одном из таких). Ну это ведь это получается, что мы готовимся к собесу, а готовится к собесу это айтой (автор выражает лишь собственное безоговорочно правильное мнение) 2) Посещать больше собесов. И в итоге мы получаем, что к предстоящим собесам готовимся на предыдущих Если мы выбираем второй вариант (а мы выбираем второй вариант), то получаем, что чем больше собесов тем лучше. И поэтому мы не ждем рыбы у моря (ну или как там говорится), а сами откликаемся на вакансии и готовимся к собесам на собесах

Давненько я тут ничего не писал, но недавно сменил работу и в связи с этим хочу высказаться на некоторые темы: • О том hr пос
Давненько я тут ничего не писал, но недавно сменил работу и в связи с этим хочу высказаться на некоторые темы: • О том hr посылали меня на хер. Не буквально, конечно, но своими действиями как будто да • О том как в целом сложно/легко сейчас найти работу • О том как наиболее эффективнее искать работу (по крайне мере для меня самого) • О том как одна вакансия (общение по которой тоже оказался не очень), привела меня к кое чему (ну я прям сама загадка) • О том как на новом месте я почувствовал себя ничего не знающим лохом В скором времени напишу эти несколько заметок, ну а потом возможно опять уйду в небытие)