Ivan Begtin
7.99K subscribers
1.88K photos
3 videos
101 files
4.58K links
I write about Open Data, Data Engineering, Government, Privacy, Digital Preservation and other gov related and tech stuff.

Founder of Dateno https://dateno.io

Telegram @ibegtin
Facebook - https://facebook.com/ibegtin
Secure contacts [email protected]
Download Telegram
Свежие и полезные инструменты с открытым кодом для загрузки и обработки данных:
- PyAirbyte [1] библиотека для Python от команды Airbyte для того чтобы перенести логику этого движка по сбору данных в Python. Поддерживает все коннекторы Airbyte ранее написанные на Python
- dlt [2] Data Load Tool, явно созвучное dbt, библиотека для Python для реализации принципа Extract-Load-Transform. Выглядит довольно целостно, стоит изучить внимательнее
- ingestr [3] утилита командной строки по переносу баз данных из одного источника в другой. Поддерживает основные SQL СУБД
- sling [4] инструмент для выгрузки/загрузки данных с большинства основных СУБД включая облачные, файловых систем и различных дата файлов. Реализован на Go, важное ограничение GPL 2 лицензия (для сравнения у dlt лицензия Apache 2, а у ingestr MIT).

И конечно остаются такие инструменты как Meltano, Dagster, CloudQuery и многие другие

Ссылки:
[1] https://airbyte.com/blog/announcing-pyairbyte
[2] https://dlthub.com
[3] https://github.com/bruin-data/ingestr
[4] https://github.com/slingdata-io/sling-cli

#opensource #dataengineering
Фразы которыми можно пугать дата инженеров на собеседованиях и не только:
- данные у нас в CSV и Excel на FTP сервере
- наши Excel файлы обновляются в реальном времени на сетевом диске
- требуется работать с большим числом серверов и таблиц из SAP/1С/Oracle Application (нужное тяжелое легаси подставить)
- данные в личных папках пользователей в Sharepoint, надо их синхронизировать
- мы хотим сделать наше озеро данных на Hadoop'е
- большая часть данных у нас в PDF, мы не знаем тексты там или сканы
- требуется 10-летний опыт с dbt cloud

А чем Вы пугаете, чем пугают Вас ?

#humor #dataengineering
Свежий доклад State of Data Engineering 2024 от команды LakeFS.

Подмечают три ключевых тренда:
1. Генеративный ИИ влияет на инструментарий в Modern Data Stack
2. Конкуренция дата продуктов растёт и, соответственно, моё дополнение, цена выхода на рынок с новым продуктом.
3. Открытые форматы создают закрытые заборы. В центре конфликт между Databricks и Snowflake.

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

Что характерно в таких обзорах State of ... так то что от 75 до 95 процентов инструментов, по разным категориям, это облачные продукты. К российским реалиям, к примеру, они не применимы. Как и ко многим особо закрытым не-российским стекам данных.

И, кстати, чтобы не забыть, составители таких State of продолжают путать открытые данные и каталоги открытых данных и корпоративные каталоги. А это очень разные продукты под очень разные задачи.

А если бы я выпускал свой State of data ... то делал бы два отдельных. Один для облака, а другой для корп оффлайна. А может быть даже и три. Ещё один для корп оффлайна открытого кода.

#datatools #opensource #stateof #dataengineering #moderndatastack #readings
Хорошая статья [1] о том как добиться высокой производительности Python при обработке очень больших файлов с данными на примере данных конкурса One Billion Row Challenge [2].

Ключевое что можно из статьи вынести:
- да, по умолчанию Python медленный, но есть много способов его очень сильно ускорить
- Polars и DuckDB дают сильнейшее ускорение, буквально 30кратное и делают обработку данных особенно быстрой
- Pandas - это медленно, пора отказываться от него где возможно
- замена CPython на PyPy заметно ускоряет процесс
- всё это без использования GPU, на ноутбуке

А я не могу не вспомнить что уже есть One Trillion Rows Challenge [3] где Dask претендуют на лучшую скорость обработки данных [4]

Больше соревнований хороших и разных!

Ссылки:
[1] https://towardsdatascience.com/python-one-billion-row-challenge-from-10-minutes-to-4-seconds-0718662b303e
[2] https://1brc.dev
[3] https://t.iss.one/begtin/5529
[4] https://docs.coiled.io/blog/1trc.html

#data #dataengineering #contests #python
Разное, дата инженерное:
1. При работе с JSON lines (NDJSON) по прежнему MongoDB поглощает любой скормленный файл, DuckDB лучше умеет считывать схемы и Clickhouse включая Clickhouse-local оказался самым "капризным". Для ситуаций данных с большим числом NoSQL данных и множеством схем clickhouse применим ограниченно и надо делать специальный инструментарий/надстройку чтобы иvмпортировать уже по предраспознанным схемам, что сильно замедлит импорт на больших файлах. По прежнему очень не хватает высокопроизводительного инструмента для работы с NoSQL.
2. DuckDB примечателен в плане й удобства разработчика, доступных примеров и документации, расширяемости и тд. DuckDB - это очень крутой инструмент. Причём можно смотреть на него как на вещь в себе и подспорье для аналитика, а можно как один из компонентов создаваемого дата-продукта.
3. Ценность Parquet'а начинаешь понимать когда взаимодействуешь с командами публикующими плохо документированные CSV файлы с кучей ошибок из-за того что они в CSV файлы упихивают иерархические структуры из первоисточника. Такие файлы или очень неудобно или совсем нормально не импортируются стандартными средствами. Parquet должен быть форматом для данных по умолчанию, остальное производится из него быстро.
4. Clickhouse или DuckDB были бы хорошими инструментами для замены движка внутри OpenRefine. Но, похоже, этого не дождаться. Разве что, сделать всё же, инструмент для headless data refine, я такой когда-то смастерил для MongoDB, но скорость там оставляет желать лучшего. Скорее это был прототип для оценки возможности реализации.
5. Классические ETL/ELT инструменты для геоданных не то чтобы совсем непригодны, но не заточены ни разу. Создавать / адаптировать существующие ETL движки под них? Или использовать что-то целенаправленно созданное в этой области? Пока не очень впечатляет всё что я видел.

#notes #dataengineering #data #datatools
Собрал свои публичные презентации по нескольким темам и понял что получится большой пост если перечислять все. Вот тут самые основные:

Открытые данные
-
Раскрытие данных о госфинансах как часть государственной политики - про проекты открытости госфинансов и их значимости
- Открытые данные как основа госполитики - о том как устроены открытые данные в мире
- Как искать данные с помощью каталогов данных. Проект Datacatalogs.ru - об одном из первых каталогов-каталогов данных
- Sharing Data for Disaster Response and Recovery Programs - об открытых данных в вопросах чрезвычайных ситуаций и восстановления
- Открытость информационных систем нормотворчества - об открытости/закрытости систем нормотворчества в России

Data engineering
-
Dateno. Global Data Discovery search engine - презентация проекта поиска по данным Dateno
-
Datacrafter. Каталог и озеро данных на базе MongoDB - презентация для выступления на конференции SmartData, о внутренностях продукта Datacrafter и куча технических подробностей

Open Data Armenia
-
Open Finances. International and Armenia overview - обзор проектов по открытости госфинансов в мире и в Армении
- Open Data, Open Code, Open Licenses - о разных компонентах открытости

Открытый код
- Открытый код в других странах - Как и в каком объёме и кто именно публикует открытый код, почему это важно и почему это становится всё более популярным

Приватность
-
Слежка через государственные мобильные приложения - о том как государственные органы следят за гражданами с помощью мобильных приложений и сливают информацию о их передвижении и действиях коммерческим компаниям
- Термины и объекты регулирования: ADM-системы - о том что такое системы для автоматического принятия решения и как они описываются в разных странах
- О необходимости контроля и аудита ADM- систем - о том как регулировать ИИ используемый для автоматического принятия решений

Веб архивация
- Организация веб-архивов - о том как устроены современные интернет архивы и Национальный цифровой архив (ruarxive.org)
- Дата инженерия и цифровая гуманитаристика - о том какие большие цифровые гуманитарные проекты есть в мире и про Национальный цифровой архив

Понятный язык
- Простой и понятный русский язык - о простоте русского языка и её измерении
- Простота нормативно-правового языка - о подходах к оценке нормативно-правовых текстов

P.S. Всего у меня 200+ неразобранных презентаций за последние 15 лет, в онлайне не больше 30. Что-то устаревает, что-то нельзя публиковать, что-то бессмысленно без самого выступления, но, по мере разбора завалов, буду выкладывать дальше.

#opendata #opensource #plainlanguage #webarchives #digitalpreservation #dataengineering #armenia
Прямо интересное явление последних лет - это восхождение декларативного программирования когда дело касается данных и инфраструктуры в первую очередь. Вместо написания кода, пишутся YAML или TOML файлы и на их основе бегают конвейеры данных, разворачивается инфраструктура, создаются базы данных или API сервера.

Вижу всё больше и больше таких продуктов, особенно в областях devOps, dataOps и в продуктах типа ELT/ETL и других в области современного стека данных. Я и сам в инструментах что создавал или создаю делаю такое же.

Очень скоро работа с данными не потребует знаний даже SQL потому что всё будет в этом самом декларативном программировании. Из известных мне популярных ETL/ELT движков разве что Dagster не на декларативных языках, а по модели data-as-a-code, все написано на Python.

Внутри Dateno тоже используется декларативный сбор данных с помощью движка datacrafter [1] который я изначально делал для совсем других задач по извлечению данных из API и по преобразованию файлов. А также вместе с datacrafter там работает движок apibackuper [2] в котором тоже декларативный язык но в виде конфига для Python. Его, по хорошему, надо переписать для работы с конфигом в YAML и ещё многое поправить.

Достоинство декларативных языков в том что легко генерировать эти конфиги. В Dateno краулер создаёт тысячи конфигов под каждый сайт и запускает сбор данных вызовом datacrafter'а, и уже потом собирает результаты и складывает в базу данных.

Большая часть источников данных там - это API, для каждого из которых свой шаблон и свои правила выгрузки. Иногда довольно непростые, но стандартизованные. И из имеющихся ETL движков только dlt такое может. По сути миграция кода - это преобразование одних YAML файлов в другие, при соблюдении ряда условий конечно, что схожие операции можно воспроизвести в другом движке.

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

Ссылки:
[1] https://github.com/apicrafter/datacrafter/
[2] https://github.com/ruarxive/apibackuper

#opensource #dataengineering #thoughts
Симпатичные цифры и графики развития производительности DuckDB со временем и версиями продукта [1]

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

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

Особенно для задач дата инжиниринга на базе открытого кода.

Ссылки:
[1] https://duckdb.org/2024/06/26/benchmarks-over-time

#opensource #duckdb #dataengineering
Ещё немного про всякое сугубо техническое, сейчас в Dateno постепенно идёт переход от индексирования тысяч маленьких порталов с общедоступными данными и метаданными, к охвату крупных каталогов. Ключевое отличие таких крупных каталогов данных в том что необходимо писать скрейперы под каждый индивидуально, а это хоть и несложно, но означает увеличение кода скрейпинга многократно что постепенно будет усложнять сопровождение кода и так далее. Но это не проблема, это вполне измеримая техническая задача.

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

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

А в случае индикаторов, хорошие владельцы таких баз данных всё чаще дают возможность выкачать их целиком в режиме bulk download. Как минимум это ECB, Eurostat, FAO, Ilostat и ещё многие. Данные там почти всегда CSV или сжатые CSV и вот тут то срабатывает магия инструментов вроде duckdb. Во всех ситуациях когда CSVшки в кодировке utf8 и имеют предсказуемые схемы данных, с помощью duckdb можно многократно ускорять их обработку заменяя обработку через датафреймы на прямые SQL запросы к CSV, даже без копирования данных в БД и не строя ни одного индекса.

В общем могу сказать что в роли "дешёвого ETL инструмента для бедных" duckdb работает прекрасно. К примеру DISTINCT по разреженному полю по CSV файлу в 15GB и 22 миллиона записей без индекса отрабатывается на 19.8 секунд. Это в режиме когда совсем без оптимизаций, без преобразований в parquet. А если в parquet преобразовать то, ожидаемо, DISTINCT отрабатывает за 0.5 секунд. Выбор очевиден 🛠 надо использовать!

Например, про данные из другого проекта, если кто-то надумает использовать данные по госконтрактам [1], то они вполне себе читаются с помощью duckdb особенно после преобразований в parquet. Например, jsonl файл с госзаказчиками вполне себе легко преобразуется в parquet после всего операции по преобразованиям занимают сотые доли секунд. В этом смысле единственный недостаток открытых данных из Госзатрат только в том что они сжаты в zip, а если сжать их в gz или публиковать в parquet, то можно ещё и ускорить подготовку данных.

Таких примеров много, главный вывод в том что можно удешевить ресурсные требования во многих задачах и многие R&D задачи решать без дополнительных серверных ресурсов, экспериментируя локально.

Ссылки:
[1] https://clearspending.ru/opendata/

#duckdb #tech #dataengineering #etl
Спасибо Константину Рядову, телеграм канал Знай и умей ИТ, у него вышел подкаст с моим участием и разговором про дата инженерию и дата анализ. Я к подкасту много не готовился, поэтому у меня там лёгкое естественное косноязычие, но надеюсь слушателям будет полезно.

#podcasts #data #dataengineering