дата инженеретта – Telegram
дата инженеретта
2.98K subscribers
242 photos
28 videos
4 files
102 links
мелкое — крупно,
в глубоком разговоре
мудрость приходит

по вопросам сюда: @aigul_sea
Download Telegram
1️⃣2️⃣🟰3️⃣

Недавно столкнулась с необычным кейсом, связанный с несоответствием типов данных в КХ.

У нас есть таблица-источник, поверх вьюшка:

CREATE TABLE t (id String)
ENGINE = MergeTree()
ORDER BY id;

INSERT INTO t VALUES
('187'),
('2298'),
('9');

CREATE VIEW v (id Int32) AS
SELECT id
FROM t;


Обратите внимание, что в табличке лежит String, а во вьюшке Int.

Потом ищем минимумы:

SELECT min(id) FROM t;
--187
SELECT min(id) FROM v;
--9


Тут вопросиков нет: в таблице сортировка строк (поэтому с 1 будет минимальным), во вьюшке - как обычно.

А потом мы пытаем разделить на 2 диапазона по минимуму, и тут происходит какая-то дичь:

SELECT count() FROM v WHERE id >= '187';
--2
SELECT count() FROM v WHERE id < '187';
--0 ??? (должно быть 1)

SELECT count() FROM v WHERE id >= '9';
--1 ??? (должно быть 3)
SELECT count() FROM v WHERE id < '9';
--0


Причем если сравнивать без кавычек, то вываливается ошибка:

There is no supertype for types String, Int32


То есть в этих сравнениях какие-то значения сравниваются как строки, а какие-то как числа, и я не вижу никакого паттерна😭

Зато в плейграунде все работает как надо😑
Т.е. напрашивается, что особенности могут быть связаны именно с настройкой кластера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤔4
Про архитектуры дата платформ

Наконец-то появилось время посмотреть доклады со SmartData 2024. К сожалению, не разрешили пойти в оффлайн, поэтому довольствуемся чем есть🥲🥲

🔡
Из доклада "Data Lineage: как настроить в зоопарке технологий и зачем это нужно" - Купер
Уже из всех утюгов говорят про Debezium, Iceberg, Trino, Data Lineage. Как будто взяли самые хайповые технологии и сделали конфетку, как по мне - выглядит очень круто

1️⃣
Из доклада "Data mesh: ожидания vs реальность" - Леруа Мерлен (Лемана ПРО)
Это то, с чего они начинали

©️
Это то, к чему они сейчас пришли
Есть две статьи на хабре: 2021г. и 2023г., где они вкратце про это рассказывают

Вот такой System Design

#system_design
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍42
This media is not supported in your browser
VIEW IN TELEGRAM
Поддержите начинающую актрису!

Мне тут написали из сообщества амбассадоров и пригласили сняться в рилсе!
Буквально 10 минут, несколько дублей, склейка, склейка - и готово

Лайки не запрещаются🩷
Please open Telegram to view this post
VIEW IN TELEGRAM
151👍11🔥119🌚21
Мои отношения со скалой

Впервые столкнулась с ней, когда мы хотели считать графы, код на спарке конкретно падал, и я попробовала переписать все на скалу. Боль началась уже с чтения json-конфига🥲

Scala в моей голове была очень похожа на Java, но это совсем не так. После слез, страданий, знакомства с синтаксисом циклов и бесконечным количеством типов получилось что-то такое:

import org.json4s._
import org.json4s.jackson.JsonMethods._

val filename = "config_v1.json"
val config = parse(Source.fromFile(filename).getLines.mkString)

implicit val formats = DefaultFormats

for {
JObject(table) <- config
JField("columns", JArray(columns)) <- table
} {
for (column <- columns) {
val colName = column.extract[String]
// ...
}
}
}


Уже
🟢начало приходить понимание,
🟢конструкции не казались супер необычными,
🟢return без return - это норма,
🟢вызов функций без скобочек - это норма,
🟢отвращение отошло на второй план.
Но потом я решила погрузиться еще раз и пройти курс на степике🤓

Я снова перестала воспринимать скалу как что-то естественное. Это какое-то обилие скобочек, черточек, стрелочек, обозначающих сложные математические штуки.

😭 Однажды сидела на конфе с челами, которые реализовывали доказательства теорем на хаскале и не понимала абсолютно ничего. Запомнила только, что много раз повторялось слово "монады". Ощущение от всего этого примерно такое же.

Тут выжимка самых странных операций)
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚21👍4🔥4😁2
⤵️ Reverse ETL

📙 У меня сейчас эра чтения умных книжек, сейчас я читаю "Fundamentals of DE" и закрываю пробелы.
И меня тут осенило. Оказывается, я занимаюсь обратным ETL, не отдавая себе в этом отчета.

Reverse ETL - это по сути когда вы все загрузили, преобразовали, а потом самые крутецкие данные снова отдали в систему-источник.

И у нас есть такой пример.

🧦 Есть такая штука, которая называется офлайн-конверсии - когда человек пришел ножками в отделение и заключил сделку, но на сайт мог вообще не заходить. Мы для таких клиентов метчим данные о сделках с внутренними данными и засылаем их в рекламный кабинет. Чтобы рекламная кампания такая:

Агаа! Этот человек заключил сделку, а еще ему 25 лет и есть машина. Так давайте подтянем всех остальных, кому тоже 25 и с машиной, это стопудово сработает!


Так вот процесс "засылаем их в рекламный кабинет" - это и есть reverse ETL. Мы взяли уже готовые данные, посчитанные витрины и снова закинули в систему, из которой читаем данные

#fundamentals_of_de
Please open Telegram to view this post
VIEW IN TELEGRAM
178👍3🌚2
Покручиваем графы

Мне давно хотелось визуализировать систему лифтов, которая есть в башне на Кутузе. И вот я добралась!

Предыстория
В каждой шахте ходят по 2 лифта, и есть продуманное разделение секций лифтов на три разных холла. Например, в башне Б всего 41 этаж, и уже с середины здания ты можешь добраться только с пересадкой.

На картинке вся система переходов между этажами в одной башне. Сразу видны центры сосредоточения⬇️ Буковками обозначены холлы:
C - центральный
L - левый
R - правый
(я так вижу)

🟡 Еще некоторые лифты открываются в две стороны, т.е. уехать ты можешь слева, а приехать справа.

Но есть проблема - с первого и даже с десятого раза ты не угадаешь, на каких этажах делать пересадку, пока не осознаешь логику или не выучишь все этажи👍

Мне было очень интересно составить комплексную картину, и я решила пройтись по всем этажам и холлам и четенько зафиксировать🤓

📊 В итоге все закинула в графовую бд neo4j, которая сейчас доступна только с впн, но потыкаться уже в готовой пока можно и просто так.
(Только в бесплатной версии она на паузе после 72ч неактивности. Ссылка на уже загруженные данные в проекте чуть пониже)

Чтобы что?
Чтобы понимать, каким образом можно добраться из точки А в точку Б. А потом написать мобилку, захостить и расшерить коллегам (может быть) 😥
Например, вот запрос для 2х кратчайших путей между этажами:

MATCH p = SHORTEST 2 (from: Floor)-[*]-(to: Floor)
WHERE from.id = 1 AND to.id = 39
RETURN p, length(p) AS result


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

🔖Интересный факт: чтобы добраться с 4го этажа на 41й, нужно 5 шагов! (если у вас нет доступа к крутому лифту)

Кому интересно - проектик с инструкцией лежит тут: https://github.com/Aigul9/elevators/tree/main
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29👍8531
Мама, я девопс

Я тут взглянула сверху на нашу команду, и вот какие роли у нас оказались:

🙂 Product Owner - выстраивает стратегии и дальносрочные планы развития продукта

🤔 Solution Architect - проектирует взаимодействия и интеграции между системами

🙂 Release Manager - отвечает за процесс релизов

👔 Lead DevOps - разворачивает инфру на опеншифтах (старается)

✍️ Big Data Analyst/восходящая звездочка PO - решает серьёзные вопросики на серьёзных созвонах

😥 Data Engineer - вкатывается в процессы, т.к. недавно пришёл

Это что получается, у нас некому работать? 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15😁74
English in Practice

Недавно сходила на собесы на английском 😱 Позвала одна трейдинговая компания, но не суть) Я ещё 2 года назад, когда заводила страничку на линкедине, хотела получить такой опыт, и вот он как бы есть

Я побывала на трех этапах:

1️⃣HR-screening
HR из Армении, неплохо говорила на русском, поэтому начало было плавным. Потом мы перешли на англ, она рассказала про компанию, я - про свой опыт

2️⃣Pre-tech
С Head of Data в Чикаго. Я думала, что будет тех собес, но это было про софты, мотивацию. Минут 25 мне рассказывал, чем они занимаются, кого ищут, какой стек - у них api + csv + postgres + shell + cron 😐
Про свой опыт, команду, офисы. Я снова рассказала про себя, но более подробно. Под конец мне вкинули несколько вопросов на общие знания:

- composition vs inheritance
- mixins
- functional programming
- joins, group by, aggregations
- data modeling
- relationships

🌸 Мысли и фразочки, которые я записала:

We don't assume everybody can do everything.


More often than 2 years is a red flag. (про смену работы)


А во мне он отметил "impressive resume", "english is amazing" (о чем я вообще не уверена после тех собеса) и склонность к лидерству (как знать).

3️⃣Tech interview
В этом году выпустившийся из колледжа неколлега, который задал такие вопросы:

А расскажите про свой опыт работы с:
- python?
- pandas?
- sql?
- legacy?
- java?
- etl?

- о хороших практиках проектирования ПО, которые вы применяли в работе
- самое крутое достижение

💻 И одна несложная задачка с hackerrank на возврат числа из строки со всякими разными corner cases, над которой я долго тупила, но все-таки довела до конца.

Например:
"-000102" == -102
"abc" == 0
"56abc90" == 56

🪐 Вопросы, конечно, слишком общие, от них сложилось странное ощущение. Пока не могу экстраполировать один собес на весь зарубежный рынок) Возможно, я дала не слишком развернутые ответы или их что-то отпугнуло, но по ходу собеса не почувствовала недоброжелательных интонаций В общем, я запросила ОС, но пока без ответа)
Please open Telegram to view this post
VIEW IN TELEGRAM
21712🔥64👍1😁1
Больше архитектур

Недавно была на "Hadoop Admins Meetup", где рассказывали про современные тех. штуки и подкапотную жесть🌼 В продолжение поста закидываю вам еще ряд интересных картинок с архитектурами систем и умными словами.

Из того, что озвучили в докладах:

Data Ocean Nova - платная штука от Glowbyte

Apache Yunikorn - замена YARN (ресурс-менеджер на кластере)

Talys.SDI - CDC для стриминга с Flink

Apache Kyuubi [кьюби] - суперновая модная штука с парой докладов на русском (остальные - китайские), что-то типо спарка, но поверх спарка (в том числе)

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

🔍 P.S. А вы на логотипе Flink тоже видите сердце вместо белочки?

#system_design
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥74👍1
Командный мудборд

Сделали с коллегами "мотивационный плакат" на одном из ретро за 5 минут
Вот такой у нас вайб😄

Всем хорошей недели!💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16😁86👍1
🌄 Зарубежные подкасты про данные

В конце "Fundamentals of DE" была ссылка на подкаст, который ведут авторы книги. И мне захотелось погуглить, а какие еще подкасты про де есть. Взяла за основу список с прошлогоднего поста на реддите, убрала неактивные и добавила новые. Поделитесь, кто что слушает и что рекомендуете?

Monday Morning Data Chat - от авторов
The Analytics Engineering Podcast
The Data Engineering Show
The Data Engineering Podcast
The Data Stack Show
Drill to Detail Podcast
Analytics Power Hour
DataTalks.Club
The Data Cloud Podcast
The MongoDB Podcast
The Analytics Everywhere Podcast
The Real Python Podcast
Plumbers of Data Science Podcast
What's New in Data?
The Datanation Podcast
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥2452👍1
Мини-квиз

Есть два запроса. Какой из них корректный?

1️⃣
SELECT id, COUNT(*)
FROM demo
GROUP BY id
HAVING id = 3;


2️⃣
SELECT id, COUNT(*)
FROM demo
GROUP BY id
HAVING MIN(id) = 3;
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Какой запрос корректный? ⬆️
Anonymous Quiz
29%
1
24%
2
35%
оба
13%
ни один
119
🌟Ответ🌟

Вопрос тут

Правильный вариант - оба!

В having можно использовать:

⚫️любую агрегирующую функцию (необязательно ту, которая в селекте)
⚫️колонки из group by
⚫️константы (применение не придумала)

Так что чисто технически можно фильтровать значения и в having, но, вероятно, это будет дольше 😔 А в некоторых базенках оптимизатор сам делает, как where
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
Я начала курс по систем дизайн

Давно хотела в это погрузиться - как проектировать, как считать ресурсы и нагрузку, как выбирать технологии

чтобы не только крутить таблички, но и выбиваться в тех лиды👔

У нас есть закупленные курсы, и конкретно этот от карпова на 5 недель. Я уже посмотрела первый вводный урок про то, что будет:

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

Среди спикеров Валерий Бабушкин, который накидал кучу непонятных букв типо ELP, consistent hashing, QPS, trie, фильтр Блума и т.д.
Ну ладно, не совсем непонятных 😁 Trie я видела в задачках на литкоде, а фильтр Блума использовала в магистерской)

Плюс это все еще и с точки зрения данных, а не чисто приложух
Короче, звучит супер хайпово 🍢
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍42