Data Engineer
Как будет читаться файл из HDFS, например Parquet — целиком или по блокам?
За какое время будет работать решение с использованием встроенного sorted? Можно ли придумать более быстрое решение?
Даны две таблицы t1 и t2. Задача выписать все виды джойнов, которые знаешь, и результат запроса select * from t1 <join> t2 on t1.t = t2.t для каждого из них. |t1.t| ------ 1 2 4 null ------ |t2.t| ------ 1 3 null null cross 1 1 - null null - INNER JOIN [phone] LEFT JOIN 1 - 1 2 - NULL 4 - NULL NULL - NULL RIGHT JOIN [phone] NULL - 3 NULL - NULL NULL - NULL FULL JOIN [phone] - NULL 4 - NULL NULL - 3 null - NULL null - NULL null - NULL
Из каких основных блоков состоит сообщение трассировки (span)?
CREATE TABLE orders ( driver_id varchar, city varchar, order_id varchar ); -- Получить топ 10 водителей по кол-ву заказов в каждом городе
Опишите методы оптимизации SQL запросов, которые вы применяли. Как сократили время выполнения с 12-15 секунд?
В ClickHouse какой тип чтения используется?
Дана строка из нулей и единиц. Необходимо написать функцию func(), которая вернет максимальное число подряд идущих единиц. Например: func("010111011") -> 3
В чём разница между EXPLAIN и EXPLAIN ANALYZE?
Чем жертвует СУБД при быстрой загрузке данных (COPY в Postgres, BULK INSERT)?
Расскажи о своём опыте работы на последних местах, какие проекты, какой стек?
-- Найти всех пассажиров, которые совершали поездки два или более дня подряд
В Greenplum ACID соблюдается?
Как работает query optimizer в Oracle, на что он смотрит и к какому классу относится?
Анализ посещаемости фитнес-клубов Вы работаете аналитиком в сети фитнес-клубов. У вас есть информация о посещениях пользователей и абонементах, которые они покупают. Необходимо проанализировать эффективность использования абонементов. Рассчитайте для каждого типа абонемента: • общее количество пользователей, использовавших этот тип абонемента. Учитывайте только уникальные user_id; • общее количество посещений по этому абонементу. Учитывайте все посещения пользователей с данным абонементом; • долю пользователей этого абонемента в процентах от общего количества всех пользователей (с округлением до одного знака после запятой). Для вычисления доли пользователей используйте отношение количества пользователей с этим абонементом к общему числу всех уникальных пользователей. У каждого пользователя может быть только один абонемент. Отсортируйте результат по типу абонемента в алфавитном порядке. Формат ввода Таблица memberships: • membership_id (int) — уникальный идентификатор абонемента • user_id (int) — уникальный идентификатор пользователя • membership_type (text) — тип абонемента Таблица visits: • visit_id (int) — уникальный идентификатор визита • user_id (int) — идентификатор пользователя • visit_date (timestamp) — дата и время визита Данные не содержат пропусков или некорректных значений. Формат вывода Запрос должен вернуть таблицу с полями в таком порядке: • membership_type (text) — тип абонемента • users_count (int) — количество уникальных пользователей с данным типом абонемента • total_visits (int) — общее количество визитов пользователей с этим абонементом • user_share (numeric) — доля пользователей в процентах с этим абонементом от общего числа (округлена до 1 знака после запятой) Результат сортируется по типу абонемента в алфавитном порядке.
Как сделать протяжку вверх (заполнить NULL предыдущим ненулевым значением в обратном направлении)?
Объясните, как технически работает Git LFS и какие преимущества он предоставляет по сравнению со стандартным Git при работе с большими файлами.
-- Исходная таблица stretch -- Необходимо в разрезе id заполнить NULL'ы предыдущим значением (не NULL) - выполнить протяжку вниз id | ttime | val ---|-------|----- 1 | 07:30 | NULL 1 | 09:21 | 10 1 | 13:53 | NULL 1 | 16:12 | NULL 2 | 09:42 | 133 2 | 15:20 | NULL 2 | 21:33 | NULL 3 | 08:01 | NULL 3 | 11:41 | 8 3 | 14:23 | NULL 3 | 16:17 | NULL 3 | 19:54 | 2 4 | 13:10 | 312 4 | 14:42 | NULL 4 | 16:31 | 7 4 | 17:44 | NULL id | ttime | val ---|-------|----- 1 | 07:30 | NULL 1 | 09:21 | 10 1 | 13:53 | 10 1 | 16:12 | 10 2 | 09:42 | 133 2 | 15:20 | 133 2 | 21:33 | 133 3 | 08:01 | NULL 3 | 11:41 | 8 3 | 14:23 | 8 3 | 16:17 | 8 3 | 19:54 | 2 4 | 13:10 | 312 4 | 14:42 | 312 4 | 16:31 | 7 4 | 17:44 | 7 -- Слева исходная таблица, а справа, то что нужно получить SELECT id, ttime, COALESCE(val, LAST_VALUE(val) OVER(PARTITION BY id ORDER BY ttime)) as val FROM stretch
Какие проблемы может выявить трассировка?
Оцените итоговое решение по времени и памяти.