Недавно ходила на сходку 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
count(), F.count(), F.countDistinct(), distinct()
В спарке есть несколько функций count, которые меня вначале путали, и тут я хочу расставить все точки над i.
1️⃣ count() - это действие
Оно запустит весь пайплайн расчетов и выведет на экран одно число - количество строк в датафрейме:
Также можно использовать в агрегации, но нельзя поменять название столбца (будет count):
2️⃣ F.count() - это трансформация, агрегирующая функция
В отличие от первого способа в агрегации можно поменять название столбца:
Отличия count() и F.count():
3️⃣ F.countDistinct() - тоже агрегирующая функция
Тут вариант агрегации только один, потому что df.countDistinct() не существует:
При этом в спарке есть еще функция distinct(), которая тоже вносит некую путаницу.
Отличия distinct().count() и F.countDistinct():
#spark
В спарке есть несколько функций count, которые меня вначале путали, и тут я хочу расставить все точки над i.
Оно запустит весь пайплайн расчетов и выведет на экран одно число - количество строк в датафрейме:
df.count()
Также можно использовать в агрегации, но нельзя поменять название столбца (будет count):
df.groupBy('category')
.count()
.orderBy('count')
.show()df.select(F.count('id')).show()В отличие от первого способа в агрегации можно поменять название столбца:
df.groupBy('category')
.agg(F.count('id').alias('cnt'))
.orderBy('cnt')
.show()Отличия count() и F.count():
# результат - датафрейм с одной ячейкой
df1.select(F.count('id')).show()
# +---------+
# |count(id)|
# +---------+
# | 3|
# +---------+
# результат - число
df1.select('id').count()
# 3
df.select(F.countDistinct('id')).show()Тут вариант агрегации только один, потому что df.countDistinct() не существует:
df.groupBy('category')
.agg(F.countDistinct('id'))
.show()При этом в спарке есть еще функция distinct(), которая тоже вносит некую путаницу.
Отличия distinct().count() и F.countDistinct():
# результат - датафрейм с одной ячейкой
df1.select(F.countDistinct('id')).show()
# +------------------+
# |count(DISTINCT id)|
# +------------------+
# | 2|
# +------------------+
# результат - число
df1.select('id').distinct().count()
# 2
#spark
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥5🌚1
Как из деления int/int получить double?
🤓 Вам нужно что-то посчитать: поделить одно количество на другое и округлить результат до 2х знаков после запятой.
Так как количество - это целое число, если написать просто count1/count2, то в результате мы получим тоже целое число: 15/26 = 0. А мы хотим 0.57692307692307692308 - вот оно самое.
✨ Поэтому умножаем на 1.0, и вуаля✨
#sql_tips
Так как количество - это целое число, если написать просто count1/count2, то в результате мы получим тоже целое число: 15/26 = 0. А мы хотим 0.57692307692307692308 - вот оно самое.
SELECT round(count1 * 1.0 / count2, 2)
FROM test
#sql_tips
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤3🌚2
Сегодня у нас прошло очередное демо трайба!
Команда
В кластере несколько команд, а в трайбе несколько кластеров (всего где-то 15 команд +-).
Что было?
Ну, и вкусный фуршетик
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤3😁2🆒1