DE – Telegram
522 subscribers
312 photos
81 videos
15 files
405 links
Data Engineering Technologies.
SQL, Python, Kafka, Spark, Pandas, Airflow, Clickhouse, Greenplum, Postgres, dbt, LLM agentic systems, AI, robots, drones etc.

Boost channel - https://news.1rj.ru/str/boost/data_engi
Download Telegram
👩‍💻 match/case

Для версий Python 3.10 и выше.

Деструктуризация с помощью образцов настолько выразительна, что иногда даже наличие единственной ветви case может сделать код проще. Гвидо ван Россум собрал коллекцию примеров match/case, один из которых назвал «Очень глубокий итерируемый объект и сравнение типа с выделением».

Это здорово, но меня больше поразил тот факт, что можно проверять типы и насколько выразительно это выглядит, ниже смотри пример.

❤️‍🩹 Классическая версия:
 def write_value(self, value):
if isinstance(value, str):
self.simple_element("string", value)

elif value is True:
self.simple_element("true")

elif value is False:
self.simple_element("false")

elif isinstance(value, int):
if -1 << 63 <= value < 1 << 64:
self.simple_element("integer", "%d" % value)
else:
raise OverflowError(value)

elif isinstance(value, float):
self.simple_element("real", repr(value))

elif isinstance(value, dict):
self.write_dict(value)

elif isinstance(value, (bytes, bytearray)):
self.write_bytes(value)

elif isinstance(value, datetime.datetime):
self.simple_element("date", _date_to_string(value))

elif isinstance(value, (tuple, list)):
self.write_array(value)

else:
raise TypeError("unsupported type: %s" % type(value))
🔥 Версия с использованием match/case:
 def write_value(self, value):
match value:
case str():
self.simple_element("string", value)

case True:
self.simple_element("true")

case False:
self.simple_element("false")

case int():
if -1 << 63 <= value < 1 << 64:
self.simple_element("integer", "%d" % value)
else:
raise OverflowError(value)

case float():
self.simple_element("real", repr(value))

case dict():
self.write_dict(value)

case bytes() | bytearray():
self.write_bytes(value)

case datetime.datetime():
self.simple_element("date", _date_to_string(value))

case tuple() | list():
self.write_array(value)

case _:
raise TypeError("unsupported type: %s" % type(value))
#python #casematch
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3
👩‍💻 Автогенерация первичного ключа

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

Автогенерация работает по следующим принципам:
🔘 Внутри базы создаётся отдельный счетчик, который привязывается к каждой таблице
    🔘 Счётчик увеличивается на единицу при вставке новой строки
    🔘 Получившееся значение записывается в поле, которое помечается как автогенерируемое

Автогенерацию первичного ключа часто называют автоинкрементом (autoincrement). Что переводится как автоматическое увеличение и напоминает операцию инкремента из программирования ++.

До определённого момента механизм автоинкремента был реализован в каждой СУБД разными способами. Это создавало проблемы при переходе от одной СУБД к другой и усложняло реализацию программного слоя доступа к БД.

Эта функциональность добавлена в стандарт SQL:2003, то есть довольно давно. И только в 2018 году PostgreSQL в версии 10 стал его поддерживать. Такой автоинкремент известен под именем GENERATED AS IDENTITY:
CREATE TABLE colors (
-- Одновременное использование и первичного ключа и автогенерации
id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name varchar(255)
);

INSERT INTO colors (name) VALUES ('Red'), ('Blue');

SELECT * FROM colors;

-- id name
-- 1 Red
-- 2 Blue
Если удалить запись с id равным двум и вставить ещё одну запись, то значением поля id будет 3. Автогенерация не связана с данными в таблице. Это отдельный счётчик, который всегда увеличивается. Так избегаются вероятные коллизии и ошибки, когда один и тот же идентификатор принадлежит сначала одной записи, а потом другой.

Структура из документации:
column_name type GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY[ ( sequence_option ) ]
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒5❤‍🔥1
👩‍💻 Используй объект slice для именованных срезов:

invoice = """
0.....6.................................40........52...55........
1909 Pimoroni PiBrella $17.50 3 $52.50
1489 6mm Tactile Switch x20 $4.95 2 $9.90
1510 Panavise Jr. - PV-201 $28.00 1 $28.00
1601 PiTFT Mini Kit 320x240 $34.95 1 $34.95
"""

SKU = slice(0, 5)
DESCRIPTION = slice(5, 40)
UNIT_PRICE = slice(40, 52)
QUANTITY = slice(52, 55)
ITEM_TOTAL = slice(55, None)

line_items = invoice.split('\n')[2:]

for item in line_items:
print(item[UNIT_PRICE], item[DESCRIPTION])
Результат:

$17.50   Pimoroni PiBrella                  
$4.95 6mm Tactile Switch x20
$28.00 Panavise Jr. - PV-201
$34.95 PiTFT Mini Kit 320x240
#python #slice
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒5❤‍🔥1
😁4
⚡️ ClickHouse vs Greenplum


Clickhouse и GreenPlum - известные СУБД для анализа больших данных, которые пользуются большой популярностью. Однако существуют критерии, по которым необходимо однозначно выбирать, какую из СУБД использовать в той или иной ситуации. Для этого рассмотрим их основные преимущества и недостатки.


🙂 Преимущества ClickHouse:

1️⃣ Высокая производительность:

ClickHouse предназначена для решения аналитических задач и обладает высокой скоростью выполнения запросов на чтение больших объемов данных. Это делает его идеальным выбором для аналитики данных и OLAP (Online Analytical Processing).

2️⃣ Эффективное сжатие данных:

ClickHouse использует различные методы сжатия данных, которые позволяют значительно сократить объем хранимой информации без потери производительности.

3️⃣ Горизонтальное масштабирование:

ClickHouse легко масштабируется по горизонтали, что позволяет увеличить производительность системы за счет добавления новых узлов.

☹️ Недостатки ClickHouse:

1️⃣ Ограниченная поддержка транзакций:

ClickHouse ориентирован в основном на аналитические задачи и не имеет полной поддержки транзакций, что может быть проблемой для некоторых приложений.

2️⃣ Ограниченный набор функций:

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


😍 Преимущества Greenplum:

1️⃣ Поддержка транзакций:

Greenplum обеспечивает полную поддержку транзакций и ACID (Atomicity, Consistency, Isolation, Durability), что делает его идеальным выбором для OLTP (Online Transactional Processing) и OLAP-приложений.

2️⃣ Широкий спектр возможностей:

Greenplum предлагает богатый набор встроенных функций и возможностей аналитической обработки, что делает его пригодным для решения различных типов аналитических задач.

3️⃣ Поддержка распределённых транзакций:

Greenplum обеспечивает поддержку распределенных транзакций и горизонтально масштабируется для обработки больших объемов данных.

🙃 Недостатки Greenplum:

1️⃣ Сложность управления:

Greenplum может потребовать больше усилий и опыта для управления и настройки, особенно при работе с большими кластерами.

2️⃣ Менее эффективное сжатие данных:

По сравнению с ClickHouse, Greenplum может не обеспечивать такой же высокий уровень сжатия данных, что может привести к увеличению использования дискового пространства и снижению производительности.

〰️〰️〰️〰️〰️〰️〰️〰️

В конечном итоге выбор между ClickHouse и Greenplum зависит от конкретных потребностей задачи. ClickHouse лучше подходит для аналитических рабочих нагрузок с высокими требованиями к производительности, в то время как Greenplum может быть предпочтительным выбором для приложений, где важна поддержка транзакций и широкий набор функций.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥6😁2
У ребят из PostgresPro есть отличные, а главное бесплатные, книги по PostgreSQL: https://postgrespro.ru/education/books
❤‍🔥101
The state of Apache Airflow

Компания astronomer подготовила отчет о состоянии apache airflow на 2024 год.

Airflow продемонстрировал огромный рост в 2023 году: его загрузили более 165 миллионов раз (+67% по сравнению с прошлым годом). В настоящее время Airflow опережает Spark и Kafka по росту сообщества, и 92% пользователей заявили, что рекомендуют его.

#airflow
🆒6😁5❤‍🔥2
😁11
😁9
This media is not supported in your browser
VIEW IN TELEGRAM
Это я пришел к СЕО с вопросом про квартальный бонус
😁11
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3
🖼️ Загадка

t = (1, 2, [3, 4])
t[2] += [5, 6]
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🆒92
Опросы в телеге не поддерживают форматирование кода, дублирую код для проверки:

t = (1, 2, [3, 4])
try:
t[2] += [5, 6]
except TypeError as err:
print(err)
print(t)


Это патология Python.
Из такого примера ты можешь сделать следующие выводы:

1️⃣ Не помещай изменяемые элементы в кортежи.
2️⃣ Составное присваивание -- не атомарная операция
3️⃣ Иногда следует изучать байт-код, чтобы понять, что происходит под капотом


Удобный ресурс для пошагового исполнения кода с визуализацией - pythontutor.com

#python #quiz #blowmymind
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥32
🖼️
И в дополнение к патологии выше, есть целый репозиторий с подобными штуками - ссылка

#python #wtfpython
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒5❤‍🔥2😁1
🖥 Python-разработчики подверглись сложной атаке на цепочку поставок

Аналитики компании Checkmarx сообщили, что после загрузки вредоносного клона популярной утилиты Colorama несколько Python-разработчиков, включая сопровождающего Top.gg, оказались заражены малварью, похищающей информацию. По мнению специалистов, основной целью кампании, скорее всего, была кража данных и их последующая монетизация.

Атака началась аж в ноябре 2022 года, когда хакеры впервые загрузили вредоносные пакеты в Python Package Index (PyPI). В последующие годы на PyPI было добавлено еще больше пакетов с малварью. Все они были похожи на популярные опенсорсные инструменты, что повышало вероятность их попадания в результаты поисковых систем.

Утилита Colorama, которую в числе прочих подделали злоумышленники, обеспечивает работу последовательностей символов ANSI в Windows и в настоящее время насчитывает более 150 млн загрузок ежемесячно.

Чтобы организовать атаку на цепочку поставок, хакеры клонировали эту утилиту, внедрили в нее вредоносный код и разместили вредоносную версию на поддельном домене. Благодаря тому, что атакующие использовали тайпсквоттинг, сайт хакеров (files.pypihosted[.]org) походил на легитимное зеркало files.pythonhosted.org.

Для распространения вредоносного пакета злоумышленники не только создали вредоносные репозитории под собственными учетными записями, но также взломали ряд известных аккаунтов. В их числе был GitHub-аккаунт editor-syntax, поддерживающий платформу для поиска и обнаружения серверов, ботов и других социальных инструментов в Discord, Top.gg, сообщество которой насчитывает более 170 000 участников.

Аккаунт, скорее всего, был взломан через украденные cookies, которые злоумышленники использовали для обхода аутентификации и выполнения вредоносных действий, при этом не зная пароля аккаунта. В результате взлома пострадали несколько членов сообщества Top.gg.

📎 Читать подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁52
⚡️ Выкатили новую версию 🖼️ Airflow 2.8.4


📦 PyPi

📚 Docs

🛠 Release Notes

🐳 Docker Image:
docker pull apache/airflow:2.8.4

#airflow
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4🆒31
🖼️ Airflow 2.9

Сегодня выкатили новую версия Apache Airflow — 2.9. В релизе много полезных изменений и фиксов, а также новых фич:

▶️ поддержка Python 3.12

▶️ Listener API стабилизировался и его можно использовать в продакшене

▶️ Поддержка multiple executors (AIP-61 Hybrid Execution)

▶️ DatasetOrTimeSchedule, срабатывание по Timetable расписанию и Dataset событиям

▶️ @task.bash декоратор. Возвращаемое значение обёрнутой в этот декоратор функции будет выполнено в виде bash-команды

Полный список изменений смотри по ссылке.

#airflow
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥32🆒1