Есть ли разница в запросах? (пост выше)
Anonymous Quiz
47%
Да, первый запрос быстрее
43%
Да, второй запрос быстрее
10%
Нет, запросы по времени одинаковы
Смотрим план!
Nested Loop/Cartesian ProductHash Join/SortMergeJoinКажется, что union сильно лучше, т.к. не происходит комбинаторного взрыва. Когда я работала на MS SQL, то сталкивалась с подобными запросами с OR в условии джойна, и они подвисали конкретно. Но на медиуме есть статейки/комменты для обеих сторон.
В общем, it depends)
Смотрите планы запросов, замеряйте время, понимайте логику данных, выбирайте то, что лучше при ваших условиях
Please open Telegram to view this post
VIEW IN TELEGRAM
👨💻4👀2❤🔥1👍1
Про личный бренд
😯 Недавно у нас стартанул курс по амбассадорству "Академия амбассадоров Сбера", где я буду учиться на протяжении 6 недель, и это моя домашка)
Там есть два трека: блогер и эксперт, - оказалось, что я эксперт с блогом. Буду хорошо учиться, чтобы постить сюда еще более крутой контент💪
Планирую пробовать новые форматы (даже если некомфортно) и прокачивать себя. Как говорится, "Иди туда, где страшно"🌝
Нас ждут двухчасовые встречи с экспертами😮 Надеюсь, они помогут осознать себя в пространстве и дадут крутые наводки к публичным выступлениям на проф. конфах.
▶️ Так что когда-нибудь обязательно ждите на экранах ваших смартфонов!
Пока все!
Там есть два трека: блогер и эксперт, - оказалось, что я эксперт с блогом. Буду хорошо учиться, чтобы постить сюда еще более крутой контент
Планирую пробовать новые форматы (даже если некомфортно) и прокачивать себя. Как говорится, "Иди туда, где страшно"
Нас ждут двухчасовые встречи с экспертами
Пока все!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👏7❤5
Какие даты вернутся в запросе, если оригинальная дата в UTC?
SELECT * FROM dates WHERE toDateTime(`datetime`, 'Europe/Moscow') BETWEEN '2024-02-24' AND '2024-02-25'
SELECT * FROM dates WHERE toDateTime(`datetime`, 'Europe/Moscow') BETWEEN '2024-02-24' AND '2024-02-25'
Anonymous Poll
3%
2024-02-23 20:59:00
40%
2024-02-23 21:00:00
36%
2024-02-23 23:59:00
53%
2024-02-24 00:00:00
62%
2024-02-24 02:59:00
67%
2024-02-24 20:59:00
56%
2024-02-24 21:00:00
41%
2024-02-24 22:00:00
48%
2024-02-25 00:00:00
26%
2024-02-25 02:59:00
🔥1
Правильные варианты - со 2 по 7.
При конвертации UTC -> UTC+3 добавляется 3ч ко всем строкам, поэтому период начинается с 21:00 (UTC) = 00:00 (UTC+3) и заканчивается тоже в 21:00, потому что в between самое крайнее время - это не конец дня, а начало дня:
--это одинаковые условия
BETWEEN '2024-02-24' AND '2024-02-25'
BETWEEN '2024-02-24 00:00:00' AND '2024-02-25 00:00:00'
Зачем?
Потом я увидела, что день начинался в 21:00 предыдущего дня и заканчивался в 20:59 текущего. Так, разница в 3 часа, значит, связано с конвертацией дат в UTC - но это было не совсем так!
Я работала в DBeaver, а когда написала тот же запрос в PyCharm - даты отображались корректно, с 00:00 до 23:59.
Возможно, во всем виноваты настройки, но так и не получилось с ними разобраться. PyCharm люблю всей душой
Код потестить (ClickHouse):
CREATE TABLE dates (
`datetime` datetime('UTC')
)
ENGINE = MergeTree()
ORDER BY datetime;
INSERT INTO dates VALUES
('2024-02-23 20:59:00'), ('2024-02-23 21:00:00'), ('2024-02-23 23:59:00'), ('2024-02-24 00:00:00'), ('2024-02-24 02:59:00'), ('2024-02-24 20:59:00'), ('2024-02-24 21:00:00'), ('2024-02-24 22:00:00'), ('2024-02-25 00:00:00'), ('2024-02-25 02:59:00');
SELECT
toDateTime(`datetime`, 'Europe/Moscow'),
CASE
WHEN toDateTime(`datetime`, 'Europe/Moscow') BETWEEN '2024-02-24' AND '2024-02-25' THEN 1
ELSE 0
END AS flag
FROM dates
ORDER BY 1;
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3🔥2😁1
Недавно ходила на сходку ODS (Open Data Science) и познакомилась с одним дата аналитиком. В общих чертах состоялся такой диалог:
- Чем вы занимаетесь?
- Шатаю таблички.
- И каким образом?
- Да просто select *, и все)
Так вот этот пост про do и don'ts в сфере работы с данными:
SELECT *, а не только нужные поля - вдруг они пригодятся в будущем? И никаких LIMIT - мы не хотим делать выводы на крошечной выборкеON, WHERE и т.д. - лучше сделайте побыстрее и идите отдыхатьOR, не пытайтесь заменить на IN, UNION и т.д.DISTINCT, он должен быть в каждом подзапросе - для нашей 200% уверенностиUPPER, LOWER, LEFT, RIGHT... Ну а WHERE UPPER(name) LIKE '_Mary%'- вообще песня!
_
%
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29🔥4👌1
Выберите ВСЕ работающие варианты сортировки по убыванию в спарке:
Anonymous Poll
54%
df.sort(F.col('id').desc())
65%
df.orderBy(F.col('id').desc())
16%
df.sort('id'.desc())
22%
df.orderBy('id'.desc())
59%
df.sort(F.col('id'), ascending=False)
54%
df.orderBy(F.col('id'), ascending=False)
41%
df.sort('id', ascending=False)
57%
df.orderBy('id', ascending=False)
41%
df.sort(F.desc('id'))
43%
df.orderBy(F.desc('id'))
👀3🔥1
Правильные ответы - все, кроме
'id'.desc()
sort vs orderBy - что вам больше нравится, никакой разницыСпособов тоже много на ваш выбор:
F.col().desc()Через метод столбца. Мы можем навесить функцию только на объект типа колонка, на обычную строку - нет:
df.orderBy(F.col('id').desc())ascending=FalseЧерез свойство, в сортировке - строка или колонка:
df.orderBy('id', ascending=False)
df.orderBy(F.col('id'), ascending=False)F.desc()Через функцию, аргумент - строка или колонка:
df.orderBy(F.desc('id'))
df.orderBy(F.desc(F.col('id')))spark.sqlДля особо ленивых)
spark.sql('select * from my_table order by id desc')#spark
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤1👌1💯1
Всем привет!
Кажется, у нас набралось достаточно данных для анализа моих любимых подписчиков, поэтому предлагаю потыкать)
Сколько у вас опыта работы✨ в сфере данных✨ ?
Кажется, у нас набралось достаточно данных для анализа моих любимых подписчиков, поэтому предлагаю потыкать)
Сколько у вас опыта работы
Please open Telegram to view this post
VIEW IN TELEGRAM
Сколько у вас опыта работы?
Anonymous Poll
28%
без опыта/учебный
17%
< 1 года
16%
[1-2) года
12%
[2-3) года
16%
[3-5) лет
4%
[5-10) лет
7%
10+ лет
Как уменьшить размер бд?
💿 На одном проекте в разгар сезона часто не хватало места на диске, чтобы создать новую базу данных. В таких крайних случаях можно сжать существующие (редко используемые) базы командой:
Диалект - MS SQL Server.
Вторым аргументом указывается процент свободного места для бд в диапазоне 0-100. Чем его больше, тем быстрее происходит вставка данных, есть запас для изменения структуры и наполнения полей и т.д.
➡️ Операция сжатия на больших объемах:
- супер долго выполняется
- снижает эффективность индексов и производительность (т.к. под капотом страницы с данными перемещаются)
✏️ Но если в бд не пишется много данных или вообще не пишется, а дела с местом на диске прямо критичны, то это как вариант.
#sql_tips
DBCC SHRINKDATABASE([db_name], 0);
GO
Диалект - MS SQL Server.
Вторым аргументом указывается процент свободного места для бд в диапазоне 0-100. Чем его больше, тем быстрее происходит вставка данных, есть запас для изменения структуры и наполнения полей и т.д.
- супер долго выполняется
- снижает эффективность индексов и производительность (т.к. под капотом страницы с данными перемещаются)
#sql_tips
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤1🤔1🤡1
Про SQL Wildcards
Я решила поэкспериментировать с форматом и посмотреть, что из этого выйдет)
⭐ Все знают про %, но про остальные я думала, что они существуют в регулярках в программировании, но никак не в эскуэль.
Пока не увидела в коде запросов, например:
Для любителей почитать вот ссылки на оф. доки:
Postgres
MS SQL Server
MySQL
#sql_tips
Я решила поэкспериментировать с форматом и посмотреть, что из этого выйдет)
Пока не увидела в коде запросов, например:
--эквивалентны
and Action_Code like 'K[HS]'
and Action_Code = 'KH' or Action_Code = 'KS'
--тоже эквивалентны
and Assignment_Value like '%CRE[12]%'
and Assignment_Value like '%CRE1%' or Assignment_Value like '%CRE2%'
Для любителей почитать вот ссылки на оф. доки:
Postgres
MS SQL Server
MySQL
#sql_tips
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30⚡2👨💻2💯1