Дата-инженерские заметки – Telegram
Дата-инженерские заметки
1.47K subscribers
70 photos
18 videos
7 files
55 links
Пытаюсь выжить в корпоративных реалиях, делюсь вопросами с дата-инженерских собеседований и ссылочками для подготовки к ним

Написать мне: @aylin_gee
Download Telegram
Media is too big
VIEW IN TELEGRAM
Можно больше не смотреть дата-инженерских курсов
4🔥3
🟠Какой запрос вернет минимальное значение?

id
1
2
3
4
5
Null
Null

Запрос:
Count(id)
Count (1)
Count('id')
Count(*)
Count(null)


🟠 Ответ: Count(null)
В документации Postgresql:

count(*) -> bigint
number of input rows
count(expression) -> bigint
number of input rows for which the value of expression is not null

При указании * , возвращается количество строк, учитывая null'ы, при указании названия колонки без их учёта.

Если же мы указали любое выражение в count, то проходясь по каждой строке проверяется является ли это выражение null'ом.

То есть проходясь по 7 строкам, 7 раз 1 и 'id' являются не null, и 0 раз null является не null.


#de_обсуждение
Please open Telegram to view this post
VIEW IN TELEGRAM
1041🤬1
🟡 Почему эти картинки не помогают понять работу JOIN'ов?

Возьмем для примера эти две таблицы:
id  id
1   1
1   1
1   1
2   6
3   7
4   9

Смотря на эту картинку, можно ошибочно прийти к выводу, что при LEFT JOIN в результирующей таблице будет 6 строк, однако их будет 12.
Разобраться тут нужно с тем, как на самом деле работает INNER JOIN.

➡️ Легче всего это визуализировать, представив два цикла for: в первом id таблицы 1, во втором id таблицы 2.
Нам необходимо сравнить каждый элемент первой таблицы с элементами второй и, при их равенстве, вывести эту пару:

for id1 in table1:
  for id2 in table2:
    if id1 == id2:
      print(id1, id2)

Понимание остальных JOIN'ов строится на понимании INNER:

LEFT JOIN = результат INNER + оставшиеся id в левой таблице
RIGHT JOIN  = результат INNER + оставшиеся id в правой таблице
FULL JOIN = результат INNER + оставшиеся id в левой таблице + оставшиеся id в правой таблице
CROSS JOIN = все пары, при CROSS JOIN мы не проверяем равны ли id

#de_обсуждение
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2🔥21
select distinct name, row_number() over(order by id)
from table

select name, row_number() over(order by id)
from table


⚡️ Эти запросы вернут равное количество строк?
Ответ : да
Сначала с помощью оконной функции, мы добавим колонку с уникальным порядковым номером, и только после отработает DISTINCT, поэтому каждая строка будет уникальной.

Порядок выполнения команд в SQL:

FROM, including JOINs
WHERE
GROUP BY
HAVING
WINDOW functions
SELECT
DISTINCT
UNION
ORDER BY
LIMIT and OFFSET

#de_обсуждение
Please open Telegram to view this post
VIEW IN TELEGRAM
97
Сегодня мне рассказали, что мой знакомой с 0 месяцев опыта устроился разрабом на Senior'ский грейд, накрутив опыт в резюме.
Таски на Senior'ской позиции очевидно больше софтовые, найм Senior'ов дорогой, поэтому вполне могу представить, что задержаться на позиции он может надолго.

Представляю как прихожу к такому Senior'у за код-ревью.

Как вы относитесь к накрутке опыта в резюме?
😭6😁2
This media is not supported in your browser
VIEW IN TELEGRAM
🥰6😁4🔥2🏆1
➡️Вопросы с тех собеса в Иннотех(Т1)◀️

Что такое Data Lake?
Что такое DWH?
Расскажите про слои DWH?
Чем отличается моделирование по Кимбаллу и по Инмону?
Звезда и снежинка это Кимбалл или Инмон?
Чем звезда отличается от снежинки?
Чем отличаются факт таблицы и таблицы измерений?
Расскажите про Data Vault
Расскажите про Anchor Modeling
Зачем нужна нормализация?

Какие вида JOIN'ов знаете?
Расскажите про SELF JOIN.
Что знаете про агрегационные функции?
Можно ли использовать несколько агрегационных функций в select?
Можно ли использовать GROUP BY без агрегационной функции?
Как убрать дубликаты? То есть сделать так, чтобы таблица осталась без дубликатов, а не запрос вывел данные таблицы без дубликатов?

Что такое первичный ключ? Что такое foreign key? В каком разрезе формируют ключ? Что он должен в себе нести?
Что такое суррогатный ключ? Как его построить?

Как RANK() работает с NULL?

Расскажите про способы оптимизации SQL зпросов

#de_собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
110🔥4
YouTube последнее время частенько рекомендует мне подкасты с hr. И во всех обсуждают следующие два тезиса: кадровый голод и поколение z.

Первое буквально про нехватку высококвалифицированных низкооплачиваемых кадров. Кадровый голод и +-5 этапов отбора не могут существовать в одной плоскости.

Смешнее второй тезис. Обсуждают, что молодые сотрудники требуют достойной зарплаты, справедливой оценки труда, похвалы.
То есть по такой логике миллениалам комфортно работать в токсичной среде с несправедливым начальством?

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

Мы зарабатываем не на квартиры, а на айс латте на кокосовом, отношение к работе оттого соответствующее.
19
Сегодня мне кажется, что этот канал вообще никто не читает, а сердечки мне ставят только мои друзья

Завтра я сижу на собесе с человеком, подписанным на этот канал, и отвечаю на вопросы из моих постов
132😁7👍4🍓1
Теперь буду дата-инженерить тут

Поиск работы не прекращается, он продолжается всегда, просто сейчас немного замедлится
121🔥8🏆8
Установила челу убунту - в резюме отмечу как опыт девопса
😁12108
Физические JOIN'ы

Мое незнание этой темы привело к 6-месячному куллдауну в Авито😭
Чтобы у вас не было также, давайте разберем ее подробнее.

😍Физический джойн — это алгоритм, который используется для выполнения операции объединения двух таблиц. Иными словами, это то, что происходит "под капотом", когда вы вызываете join в запросе

Основных алгоритмов всего 3: nested loops, merge join, hash join/hash match.

🩷Nested loops

Принцип работы уже понятен из названия: каждый элемент внешнего цикла сравнивается с каждым элементом внутреннего.
Алгоритмическая сложность - O(n**2)

For Each value in pile1
For Each value in pile2
If pile1.value = pile2.value
Return pile1.value, pile2.value


🩷Merge join

Для этого алгоритма элементы уже должны быть отсортированы. Тут мы проходимся двумя указателями по элементам и сравниваем их. В конце проходим по оставшимся элементам.

Если не считать сортировку, алгоритмическая сложность - O(n).

get first row R1 from   input 1
get first row R2 from input 2

while not at the end of either input
begin
if R1 joins with R2
begin
get next row R2 from input 2
return (R1, R2)
end
else if R1 < R2
get next row R1 from input 1
else
get next row R2 from input 2
end


🩷Hash join

Вычисляем хэш для каждого элемента левой таблицы, затем вычисляем хэш у элементов правой таблицы и проверяем его наличие в левой.
Алгоритмическая сложность - O(n).

// Build phase
FOR each row in BuildTable DO
Compute hash value for the join key
Insert row into HashTable based on hash value
END FOR

// Probe phase
FOR each row in ProbeTable DO
Compute hash value for the join key
IF hash value exists in HashTable THEN
Retrieve matching rows from HashTable
FOR each matching row DO
Combine rows from ProbeTable and BuildTable
Add the combined row to the result set
END FOR
END IF
END FOR

Рекомендую просмотреть псевдокод и реализовать все на своем языке💖
#de_обсуждение
Please open Telegram to view this post
VIEW IN TELEGRAM
29🏆4👍2🔥1
Друзья, не делайте так, иначе складывается ложное ощущение, что мемы нравятся больше:)
👍5
Во-первых, осень действительно лучшее время для поиска работы.
Во-вторых, мне нужны бусты☹️

У меня заволялись телеги hr'ок из МТС, Билайна, Мегафона, Яндекс Маркета и Сбера. Отправлю их забустившим канал.

Забустить тут⬇️
https://news.1rj.ru/str/boost/data_interviews

📍Написать hr'у напрямую всегда лучше отклика на хх, так как личное сообщение гарантирует просмотр резюме.

Также если хотите рефералку в Авито, отпишитесь в комментариях и я свяжусь с вами ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
10🍓4🔥3👍2