Fivetran официально объединились с dbt Labs, а до этого они поглотили Tobiko Data, создателей SQLMesh. У них теперь под контролем аж две команды создававшие продукты номер 1 и номер 2 по корпоративной обработке данных, что чертовски похоже на монополию (на самом деле нет) и вызывает вопросы по перспективам открытых версий dbt и SQLMesh потому что два конкурирующих продукта под одной крышей.
К тому же и крыша такая что не всем нравится Fivetran из-за его новой ценовой политики основанной на числе обрабатываемых строк.
Поэтому новость не могу отнести к хорошим, но будем ждать новых свежих открытых продуктов в этой области если dbt протухнут.
#dataengineering #data #datatools
К тому же и крыша такая что не всем нравится Fivetran из-за его новой ценовой политики основанной на числе обрабатываемых строк.
Поэтому новость не могу отнести к хорошим, но будем ждать новых свежих открытых продуктов в этой области если dbt протухнут.
#dataengineering #data #datatools
Fivetran
Fivetran and dbt Labs Unite to Set the Standard for Open Data Infrastructure | Press | Fivetran
Together, Fivetran and dbt are simplifying enterprise data management with a unified foundation that powers analytics and AI at scale.
🔥4❤2
Полезные ссылки про данные, технологии и не только:
- A Deep Dive into DuckDB for Data Scientists о том как дата сайентистам использовать DuckDB. Если коротко, то всё довольно просто и понятно.
- ClickHouse welcomes LibreChat: Introducing the open-source Agentic Data Stack Clickhouse поглотил LibreChat, инструмент с открытым кодом для создания ИИ чатботов. Инструмент был хороший, надеюсь таким и останется.
- Hannes Mühleisen - Data Architecture Turned Upside Down отличное выступление Hannes Mühleisen про ключевые изменения в архитектуре данных последних лет. Полезно и по смыслу и по визуальному представлению хорошо
- agor: Next-gen agent orchestration for AI coding ИИ агент для управления ИИ кодированием, автор его создатель Superset и позиционирует этот проект как думай об асситентах для кодирования как о Figma. С открытым. кодом. Любопытно, но ИМХО автор плохо объясняет преимущества, как подхода, так и интерфейса.
#opensource #data #datatools #dataengineering #ai
- A Deep Dive into DuckDB for Data Scientists о том как дата сайентистам использовать DuckDB. Если коротко, то всё довольно просто и понятно.
- ClickHouse welcomes LibreChat: Introducing the open-source Agentic Data Stack Clickhouse поглотил LibreChat, инструмент с открытым кодом для создания ИИ чатботов. Инструмент был хороший, надеюсь таким и останется.
- Hannes Mühleisen - Data Architecture Turned Upside Down отличное выступление Hannes Mühleisen про ключевые изменения в архитектуре данных последних лет. Полезно и по смыслу и по визуальному представлению хорошо
- agor: Next-gen agent orchestration for AI coding ИИ агент для управления ИИ кодированием, автор его создатель Superset и позиционирует этот проект как думай об асситентах для кодирования как о Figma. С открытым. кодом. Любопытно, но ИМХО автор плохо объясняет преимущества, как подхода, так и интерфейса.
#opensource #data #datatools #dataengineering #ai
CodeCut
A Deep Dive into DuckDB for Data Scientists
Discover how DuckDB simplifies data querying with zero configuration and outperforms pandas for large datasets.
✍2
Полезные ссылки про данные, технологии и не только:
- quackstore расширение для DuckDB для кеширования облачных дата файлов, позволяет сильно ускорить выполнение запросов к облачным файлам благодаря их частичному сохранению. Полезная штука, её можно бы и сразу внутрь DuckDB ибо логично
- Catalog of Patterns of Distributed Systems для тех разработчиков кто хотят не только кодировать, но и двигаться в сторону архитектуры ПО.
- The Data Engineering Agent is now in preview Гугл запустили ИИ агента для дата инженеров внутри BigQuery, конечно же на базе Gemini. Дайте мне такой же только с открытым кодом и без инфраструктуры Google и с поддержкой всех основных инструментов и СУБД!
- Diseño del V Plan de Gobierno Abierto 2025-2029 5-й план по открытости гос-ва опубликовали власти Испании. Сейчас проходят публичные консультации и далее он будет утвержден. Открытые данные там, конечно же, присутствуют
#opendata #opensource #rdbms #datatools #dataengineering #ai
- quackstore расширение для DuckDB для кеширования облачных дата файлов, позволяет сильно ускорить выполнение запросов к облачным файлам благодаря их частичному сохранению. Полезная штука, её можно бы и сразу внутрь DuckDB ибо логично
- Catalog of Patterns of Distributed Systems для тех разработчиков кто хотят не только кодировать, но и двигаться в сторону архитектуры ПО.
- The Data Engineering Agent is now in preview Гугл запустили ИИ агента для дата инженеров внутри BigQuery, конечно же на базе Gemini. Дайте мне такой же только с открытым кодом и без инфраструктуры Google и с поддержкой всех основных инструментов и СУБД!
- Diseño del V Plan de Gobierno Abierto 2025-2029 5-й план по открытости гос-ва опубликовали власти Испании. Сейчас проходят публичные консультации и далее он будет утвержден. Открытые данные там, конечно же, присутствуют
#opendata #opensource #rdbms #datatools #dataengineering #ai
GitHub
GitHub - coginiti-dev/QuackStore
Contribute to coginiti-dev/QuackStore development by creating an account on GitHub.
🔥4✍2
Ещё одна совсем-совсем свежая спецификация PLOON для отправки данных в ИИ агенты с максимальной экономией токенов. Экономит до 60% в сравнении с JSON и до 14.1% в сравнении с TOON. Автор написал бенчмарк показывающий что PLOON сильно экономнее других форматов. Уже прям любопытно что дальше, когда наступит момент что ИИ агенты смогут нормально употреблять бинарные данные и тогда все эти оптимизации будет очень легко заменить.
#ai #data #dataengineering #specifications
#ai #data #dataengineering #specifications
👍4❤1
После экспериментов с простым кодом, я постепенно добрался до тех инструментов которые используются внутри Dateno для сбора данных. Один из них это утилита apibackuper которая помогает вытащить данные публикуемые через API и сохранять их в виде датасета. Фактически это инструмент скрейпинга API через декларативное описание параметров скрейпинга (да, я люблю декларативные описания). У инструмента был ряд недостатков которые я исправлял и думаю что исправил, вот перечень изменений:
- переход от декларативного описания скрейперов с INI (.cfg) файлов на YAML, читать легче, синтаксис приятнее
- валидация YAML описаний через JSON схему
- поддержка ограченичений и таймаутов на число запросов в минуту (Rate Limiting)
- поддержка аутентификации к API
- экспорт данных не только в JSONL, но и в Parquet
- автоопределение формата экспорта данных по расширению файла
- массовое обработка исключений и понятные сообщения об ошибках везде где возможно
- тесты для покрытия большей части кода
- подробная документация
- и всякое по мелочи
Я этот инструмент изначально разрабатывал для для архивации данных публикуемых через API, но сейчас он используется в части кода Dateno для выгрузки метаданных из каталогов данных. Может его даже пора уже перенести из ruarxive в dateno на Github'е, ещё не решил.
На скриншоте то как это выглядит на примере реестра лекарственных средств ЕСКЛП
Для сбора данных достаточно выполнить две команды
- apibackuper run
- apibackuper export current.parquet
Первая выгрузит все данные постранично, вторая сохранит выгруженные данные в parquet файл.
#opensource #datatools #data #dataengineering
- переход от декларативного описания скрейперов с INI (.cfg) файлов на YAML, читать легче, синтаксис приятнее
- валидация YAML описаний через JSON схему
- поддержка ограченичений и таймаутов на число запросов в минуту (Rate Limiting)
- поддержка аутентификации к API
- экспорт данных не только в JSONL, но и в Parquet
- автоопределение формата экспорта данных по расширению файла
- массовое обработка исключений и понятные сообщения об ошибках везде где возможно
- тесты для покрытия большей части кода
- подробная документация
- и всякое по мелочи
Я этот инструмент изначально разрабатывал для для архивации данных публикуемых через API, но сейчас он используется в части кода Dateno для выгрузки метаданных из каталогов данных. Может его даже пора уже перенести из ruarxive в dateno на Github'е, ещё не решил.
На скриншоте то как это выглядит на примере реестра лекарственных средств ЕСКЛП
Для сбора данных достаточно выполнить две команды
- apibackuper run
- apibackuper export current.parquet
Первая выгрузит все данные постранично, вторая сохранит выгруженные данные в parquet файл.
#opensource #datatools #data #dataengineering
✍4⚡2
Я ранее писал про применение ИИ агентов для рефакторингка кода и про декларативное программирование, а теперь а теперь расскажу про декларативное создание баз данных.
Когда я только-только начинал вести список каталогов с данными в мире я делал это в в Excel файле с парой десятков колонок и сотнями записей, потом Excel стал неудобен и я перенес все в Airtable что было удобнее в течение длительного времени, там можно было настраивать разные view на одну и ту же таблицу и целенаправленно вносить новые записи с по странам или темам. С автоматизацией было не очень, зато ручная работа облегчалась.
И вот когда у меня в голове уже созрела мысль что не попробовать ли сделать поисковик по датасетам, я понял что надо перестать думать об этих данных как о таблицах (сложно перестать, конечно) и начать думать как о реестре. Для меня тогда выбор был в том чтобы:
- перенести этот реестр в СУБД и создать поверх интерфейс для редактирования. Например, загрузить в Postgres и поверх сделать быстро интерфейс с помощью Strapi или Directus'а или других no-code инструментов
- или начать смотреть на этот реестр как на код и поместить все в Github. Не так удобно для работы вручную, но хорошо автоматизируется
В итоге я пошёл вторым путем и разрезал таблицы на индивидуальные карточки дата каталогов сохраненные как YAML файлы согласно предопределенной схеме данных. Например, вот такая карточка. Эти записи можно редактировать вручную, а можно и автоматически. Можно автоматизировать обогащение метаданных, проверку API, доступность сайтов, проверку ошибок и так далее. Чтобы собственно и происходит внутри этого репозитория. От изначальный 2 тысяч каталогов до текущего их числа в более чем 10+ тысяч дата каталогов он вырос за счет автоматизированной загрузки в него большого числа дата каталогов из их агрегаторов.
Теперь я подключил последнюю версию Cursor'а к обновлению этого репозитория и оказывается он очень хорош в массовом обновлении YAML файлов и понимает команды сформулированные в стиле:
- "Проанализируй все записи, найди те у которых веб сайт владельца не указан, найди веб сайт и заполни поля owner.name и owner.link"
- "Проверь все записи относящиеся к Бельгии и проверь доступны ли указанные там сайты"
- "Создай JSON схему для YAML файлов дата каталогов и проверь все их записи на соответствие этой схеме"
и так далее.
Магия начала работать когда реестр достиг некоторой критической массы которая "помогает" ИИ агенту понимать схемы данных, предназначение репозитория и находить несоответствия. Ручная работа всё еще необходима, но для проверки сделанного, и её тоже можно автоматизировать.
Итого сейчас в обновленных данных реестра Dateno 10 905 каталогов. Они все пока в репозитории реестра в виде YAML файлов и parquet файла слепка с данными. Это на 794 каталога данных больше чем пока есть в общедоступном реестре (всего 10 111 каталогов).
Были добавлены:
- каталоги данных на базе GBIF IPT
- большие списки каталогов данных во Франции, Испании и Нидерландах
- по мелочи каталоги данных в других странах
А также огромное число исправлений в метаданных всех каталогов.
Фактически ИИ агенты для разработки прекрасно подходят для работы с данными упакованными таким образом. Я начинаю склоняться к мысли что такое обогащение данных работает лучше чем инструменты вроде OpenRefine.
Чуть позже я буду писать об этом всем лонгрид, но это уже после завершения чистки и обогащения репозитория которое уже сильно ускорилось.
#opendata #datacatalogs #dateno #dataengineering #dataanalysis
Когда я только-только начинал вести список каталогов с данными в мире я делал это в в Excel файле с парой десятков колонок и сотнями записей, потом Excel стал неудобен и я перенес все в Airtable что было удобнее в течение длительного времени, там можно было настраивать разные view на одну и ту же таблицу и целенаправленно вносить новые записи с по странам или темам. С автоматизацией было не очень, зато ручная работа облегчалась.
И вот когда у меня в голове уже созрела мысль что не попробовать ли сделать поисковик по датасетам, я понял что надо перестать думать об этих данных как о таблицах (сложно перестать, конечно) и начать думать как о реестре. Для меня тогда выбор был в том чтобы:
- перенести этот реестр в СУБД и создать поверх интерфейс для редактирования. Например, загрузить в Postgres и поверх сделать быстро интерфейс с помощью Strapi или Directus'а или других no-code инструментов
- или начать смотреть на этот реестр как на код и поместить все в Github. Не так удобно для работы вручную, но хорошо автоматизируется
В итоге я пошёл вторым путем и разрезал таблицы на индивидуальные карточки дата каталогов сохраненные как YAML файлы согласно предопределенной схеме данных. Например, вот такая карточка. Эти записи можно редактировать вручную, а можно и автоматически. Можно автоматизировать обогащение метаданных, проверку API, доступность сайтов, проверку ошибок и так далее. Чтобы собственно и происходит внутри этого репозитория. От изначальный 2 тысяч каталогов до текущего их числа в более чем 10+ тысяч дата каталогов он вырос за счет автоматизированной загрузки в него большого числа дата каталогов из их агрегаторов.
Теперь я подключил последнюю версию Cursor'а к обновлению этого репозитория и оказывается он очень хорош в массовом обновлении YAML файлов и понимает команды сформулированные в стиле:
- "Проанализируй все записи, найди те у которых веб сайт владельца не указан, найди веб сайт и заполни поля owner.name и owner.link"
- "Проверь все записи относящиеся к Бельгии и проверь доступны ли указанные там сайты"
- "Создай JSON схему для YAML файлов дата каталогов и проверь все их записи на соответствие этой схеме"
и так далее.
Магия начала работать когда реестр достиг некоторой критической массы которая "помогает" ИИ агенту понимать схемы данных, предназначение репозитория и находить несоответствия. Ручная работа всё еще необходима, но для проверки сделанного, и её тоже можно автоматизировать.
Итого сейчас в обновленных данных реестра Dateno 10 905 каталогов. Они все пока в репозитории реестра в виде YAML файлов и parquet файла слепка с данными. Это на 794 каталога данных больше чем пока есть в общедоступном реестре (всего 10 111 каталогов).
Были добавлены:
- каталоги данных на базе GBIF IPT
- большие списки каталогов данных во Франции, Испании и Нидерландах
- по мелочи каталоги данных в других странах
А также огромное число исправлений в метаданных всех каталогов.
Фактически ИИ агенты для разработки прекрасно подходят для работы с данными упакованными таким образом. Я начинаю склоняться к мысли что такое обогащение данных работает лучше чем инструменты вроде OpenRefine.
Чуть позже я буду писать об этом всем лонгрид, но это уже после завершения чистки и обогащения репозитория которое уже сильно ускорилось.
#opendata #datacatalogs #dateno #dataengineering #dataanalysis
GitHub
dataportals-registry/data/entities/AE/Federal/opendata/databayanatae.yaml at main · commondataio/dataportals-registry
Registry of data portals, catalogs, data repositories including data catalogs dataset and catalog description standard - commondataio/dataportals-registry
✍7🔥4👍3❤1
Для тех кто анализирует данные и тд. я масштабно обновил инструмент metacrafter https://github.com/apicrafter/metacrafter по идентификации семантических типов данных, включая персональные данные по многим странам и языка.
Что изменилось:
- добавлено много новых правил и обновлены имеющиеся
- сильно оптимизирован код для ускорения мэтчинга правил
- добавлена возможность фильтрации правил по стране (страна указывается в файле правил)
- добавлено множество опций для командной строки
Изменений много, они могут давать ложные срабатывания потому что некоторые правила таковы что много что под них может подпасть, поэтому управление правилами и улучшилось с точки зрения фильтрации по стране.
Собственно сами правила тоже обновились https://github.com/apicrafter/metacrafter-rules
Это не финальные изменения, а подготовка кода к интеграцию в Dateno.
#opensource #datatools #dataengineering
Что изменилось:
- добавлено много новых правил и обновлены имеющиеся
- сильно оптимизирован код для ускорения мэтчинга правил
- добавлена возможность фильтрации правил по стране (страна указывается в файле правил)
- добавлено множество опций для командной строки
Изменений много, они могут давать ложные срабатывания потому что некоторые правила таковы что много что под них может подпасть, поэтому управление правилами и улучшилось с точки зрения фильтрации по стране.
Собственно сами правила тоже обновились https://github.com/apicrafter/metacrafter-rules
Это не финальные изменения, а подготовка кода к интеграцию в Dateno.
#opensource #datatools #dataengineering
GitHub
GitHub - apicrafter/metacrafter: Metadata and data identification tool and Python library. Identifies PII, common identifiers,…
Metadata and data identification tool and Python library. Identifies PII, common identifiers, language specific identifiers. Fully customizable and flexible rules - apicrafter/metacrafter
👍3❤1🔥1
Ещё один полезный инструмент для дата инженера и аналитика data-peek SQL клиент для десктопа под Windows, Mac и Linux с поддержкой PostgreSQL, MySQL и Microsoft SQL. Для личного пользования лицензия MIT и открытый код, для коммерческого отдельная лицензия и платное использование.
В целом ничего нового, кроме построителя SQL запросов через ИИ модели, поддерживает многие модели включая локальные через Ollama.
Как же много таких клиентов появилось в последнее время, кто бы сделал аналогичное для NoSQL: Elasticsearch, OpenSearch, MongoDB и тд.
А еще лучше для SPARQL'я потому что программировать SPARQL запросы это боль для психически неподготовленной личности. Именно очеловечивание запросов способно придать SPARQL'ю новую жизнь, по моему разумению.
Но понятно, на самом деле, почему таких инструментов нет, потому что ёмкость рынка инструментов для SQL превышает все остальные. Но тогда уж надо добавлять поддержку не Microsoft SQL, а Clickhouse, SQLite, DuckDB и тд.
#opensource #datatools #dataengineering #tools
В целом ничего нового, кроме построителя SQL запросов через ИИ модели, поддерживает многие модели включая локальные через Ollama.
Как же много таких клиентов появилось в последнее время, кто бы сделал аналогичное для NoSQL: Elasticsearch, OpenSearch, MongoDB и тд.
А еще лучше для SPARQL'я потому что программировать SPARQL запросы это боль для психически неподготовленной личности. Именно очеловечивание запросов способно придать SPARQL'ю новую жизнь, по моему разумению.
Но понятно, на самом деле, почему таких инструментов нет, потому что ёмкость рынка инструментов для SQL превышает все остальные. Но тогда уж надо добавлять поддержку не Microsoft SQL, а Clickhouse, SQLite, DuckDB и тд.
#opensource #datatools #dataengineering #tools
👏5👍2❤1🔥1🤝1
Forwarded from Dateno
We’ve launched Dateno API v2 -- a major upgrade to our data search platform
We’re excited to announce the release of Dateno API v2, one of the most important components of our dataset search engine. This new version is a significant step forward for everyone who integrates Dateno into analytics platforms, data pipelines, and AI/LLM workflows.
What's new in API v2?
1. A clear and stable contract model: all responses are strictly typed and consistent across endpoints
2. Predictable pagination and metadata, making it easier to build UIs, exports, and analytics
3. A much more powerful search, built on a unified index with full-text search, facets, sorting, and relevance scoring
4. A richer, normalized data model for catalogs, datasets, and resources — ready for automation and analysis, not just display
5. Consistent error handling, with clearly separated client, infrastructure, and internal errors
6. Improved performance and reliability, with an asynchronous architecture and health-check endpoints
7. Designed for future growth without breaking changes, thanks to built-in versioning and extensibility
Important: The new API v2 is available in test mode until the end of January. During this period, we encourage developers and teams to explore it, integrate it, and share feedback before it becomes the default production version.
API v2 makes Dateno easier to integrate, more predictable to work with, and better suited for professional use cases - from data analytics to machine learning and AI-powered applications.
Learn more and start testing: https://api.dateno.io
#Dateno #API #DataEngineering #OpenData #SearchAPI #Analytics
We’re excited to announce the release of Dateno API v2, one of the most important components of our dataset search engine. This new version is a significant step forward for everyone who integrates Dateno into analytics platforms, data pipelines, and AI/LLM workflows.
What's new in API v2?
1. A clear and stable contract model: all responses are strictly typed and consistent across endpoints
2. Predictable pagination and metadata, making it easier to build UIs, exports, and analytics
3. A much more powerful search, built on a unified index with full-text search, facets, sorting, and relevance scoring
4. A richer, normalized data model for catalogs, datasets, and resources — ready for automation and analysis, not just display
5. Consistent error handling, with clearly separated client, infrastructure, and internal errors
6. Improved performance and reliability, with an asynchronous architecture and health-check endpoints
7. Designed for future growth without breaking changes, thanks to built-in versioning and extensibility
Important: The new API v2 is available in test mode until the end of January. During this period, we encourage developers and teams to explore it, integrate it, and share feedback before it becomes the default production version.
API v2 makes Dateno easier to integrate, more predictable to work with, and better suited for professional use cases - from data analytics to machine learning and AI-powered applications.
Learn more and start testing: https://api.dateno.io
#Dateno #API #DataEngineering #OpenData #SearchAPI #Analytics
✍2👍2🔥2
Я как то уже рассуждал здесь и вслух о том что ИТ профессии часто формируют устойчивые когнитивные искажения, например, когда все окружающее воспринимается как таблицы или как данные, лично я считаю что в этом нет ничего зазорного и сам иногда впадаю в состояние автоматического построения структур данных в голове и доведение их до 3NF.
Но то что кто-то может назвать когнитивным искажением, можно назвать и способом взгляда на те или иные явления. И вот один из таких способов восприятия реальности - это смотреть на все как на список. Список дел, список строк в файле, список записей в БД и так далее. А если по списку можно проходить и что-то делать с тем что в нем находится то он является перебираемым или на английском языке iterable.
Собственно под восприятия мира данных того что большая часть структур данных, форматов дата файлов и тд - это перебираемые списки я когда-то создал, а недавно обновил библиотеку iterabledata для Python.
Изначально она создавалась для того чтобы реализовать для JSON/JSON lines файлов логику перебора содержимого по принципу csv.DictReader, стандартной библиотеки в Python в которой перебираемые объекты возвращаются как словари. Заодно добавив к этому что чаще всего эти файлы с данными сжаты чем-то Gzip, LZMA, Zstandard и тд.
А в этот раз я обновил эту библиотеку для большей универсальности и поддержки десятков новых форматов данных DBF, JSON-LD, KML, GML, CSVW, Annotated CSV, MessagePack и еще много, полный список.
Включая некоторые экзотические форматы такие как WARC для веб-архивации, которые тоже можно рассматривать как объекты со списками для перебора.
А в качестве наглядного примера, преобразование дампа Википедии из сжатого XML в Parquet.
Особенность Iterable Data именно в универсальности инструмента, но не в скорости обработки данных. Для супербыстрой обработки, например, CSV файлов есть и другие инструменты, но CSV лишь один из десятков встречающихся форматов данных.
Так что инструмент полезный и обновлялся мной сейчас в контенте задач в Dateno, в открытые репозитории которого я и перенес его из личных пэт проектов.
#opensource #dateno #datatools #dataengineering
Но то что кто-то может назвать когнитивным искажением, можно назвать и способом взгляда на те или иные явления. И вот один из таких способов восприятия реальности - это смотреть на все как на список. Список дел, список строк в файле, список записей в БД и так далее. А если по списку можно проходить и что-то делать с тем что в нем находится то он является перебираемым или на английском языке iterable.
Собственно под восприятия мира данных того что большая часть структур данных, форматов дата файлов и тд - это перебираемые списки я когда-то создал, а недавно обновил библиотеку iterabledata для Python.
Изначально она создавалась для того чтобы реализовать для JSON/JSON lines файлов логику перебора содержимого по принципу csv.DictReader, стандартной библиотеки в Python в которой перебираемые объекты возвращаются как словари. Заодно добавив к этому что чаще всего эти файлы с данными сжаты чем-то Gzip, LZMA, Zstandard и тд.
А в этот раз я обновил эту библиотеку для большей универсальности и поддержки десятков новых форматов данных DBF, JSON-LD, KML, GML, CSVW, Annotated CSV, MessagePack и еще много, полный список.
Включая некоторые экзотические форматы такие как WARC для веб-архивации, которые тоже можно рассматривать как объекты со списками для перебора.
А в качестве наглядного примера, преобразование дампа Википедии из сжатого XML в Parquet.
Особенность Iterable Data именно в универсальности инструмента, но не в скорости обработки данных. Для супербыстрой обработки, например, CSV файлов есть и другие инструменты, но CSV лишь один из десятков встречающихся форматов данных.
Так что инструмент полезный и обновлялся мной сейчас в контенте задач в Dateno, в открытые репозитории которого я и перенес его из личных пэт проектов.
#opensource #dateno #datatools #dataengineering
👍10✍4❤🔥1❤1👌1🗿1
У меня есть довольно давняя отложенная нерабочая задача - это извлечь с каталога музейного фонда РФ (goskatalog.ru) материалы по армянскому культурному наследию для чего я когда-то выгружал с портала данных Минкультуры РФ битый датасет этого реестра и преобразовывал 88ГБ текстовый файл в 2.7ГБ файл Parquet с 31.7 записями о культурных объектах. А также есть примерно 100 регулярных выражений позволяющих найти записи в которых есть прямое или косвенное упоминание Армении или армянской культуры.
Задача универсальная, можно вместо поиска армянской культуры искать культуру еврейскую, чувашскую, адыгскую - вариаций много. Ключевое в том что есть большой файл с данными, много регулярных выражений и надо найти все идентификаторы записей в которых присутствует хотя бы одно совпадение. При этом искать надо не по всем полям, а буквально по 4-м: название, описание, место, авторы
А теперь о подходах как такую задачу можно решить.
Ленивое программирование. Пишешь простой перебор записей, а в записях по каждому полю по каждому регулярному выражению до первого матча. Один раз описываешь и запускаешь, а дальше неважно займет задача час или неделю, просто запускаешь и ждешь если нет срочности.
Облачное программирование (неэкономное). То же самое только арендуешь сервер в облаке на котором запускаешь, после отработки кода сохраняешь результаты и сервер отключаешь.
Неэкономное продвинутое программирование. Обращаешь внимание что записи в данных не зависят друг от друга и находишь компьютер с большим объемом памяти и множеством ядер или арендуешь дорогой облачный сервер, разрезаешь оригинальный файл с данными на 100 по 370 тысяч записей каждый и запускаешь их обработку параллельно по числу доступных ядер
Экономное хардкорное программирование. Обращаешь внимание что регулярные выражения - это медленно почти всегда и на то что не все поля в оригинальных данных нужны. Оптимизируешь и пересобираешь оригинальный файл с данными так чтобы он содержал только id записи и поля с нужными текстами, переписываешь регулярные выражения на pyparsing или разворачиваешь их в текст для полного мэтчинга и, конечно, тоже разрезаешь файл с данными на 100 (или сколько нужно) и параллельно запускаешь обработку не обязательно на продвинутом железе. Думаешь о том не переписать ли все это на Rust
Управленческое решение. Находишь человека с нужными навыками в своей команде и предаешь ему эту задачу. Как он это сделает тебя волнует не особенно, главное чтобы результат был к ожидаемому сроку.
Поиски волонтера. Описываешь целесообразность и нужность задачи в виде мини ТЗ. Закидываешь с сообщества где могут быть потенциальные волонтеры готовые ее решить. Задача не самая сложная, не самая простая, как раз по силам.
Вайб-кодирование. Описываешь эту задачу ИИ агенту и он за тебя генерирует код (скорее всего не самый высокопроизводительный) и дальше уже по аналогии с ленивым программированием
Продвинутое вайб кодирование. Ставишь задачу нескольким ИИ агентам и сравниваешь результаты. Долго тюнишь лучший из результатов уточняющими запросами по оптимизации кода.
—
Можно придумать еще какое-то количество подходов, ИИ агенты добавили несколько опций которые оказываются полезными и ускоряют работу, но в работе с данными даже такого небольшого объёма это пока не такой оптимальный вариант как что-то другое.
#thoughts #programming #dataengineering
Задача универсальная, можно вместо поиска армянской культуры искать культуру еврейскую, чувашскую, адыгскую - вариаций много. Ключевое в том что есть большой файл с данными, много регулярных выражений и надо найти все идентификаторы записей в которых присутствует хотя бы одно совпадение. При этом искать надо не по всем полям, а буквально по 4-м: название, описание, место, авторы
А теперь о подходах как такую задачу можно решить.
Ленивое программирование. Пишешь простой перебор записей, а в записях по каждому полю по каждому регулярному выражению до первого матча. Один раз описываешь и запускаешь, а дальше неважно займет задача час или неделю, просто запускаешь и ждешь если нет срочности.
Облачное программирование (неэкономное). То же самое только арендуешь сервер в облаке на котором запускаешь, после отработки кода сохраняешь результаты и сервер отключаешь.
Неэкономное продвинутое программирование. Обращаешь внимание что записи в данных не зависят друг от друга и находишь компьютер с большим объемом памяти и множеством ядер или арендуешь дорогой облачный сервер, разрезаешь оригинальный файл с данными на 100 по 370 тысяч записей каждый и запускаешь их обработку параллельно по числу доступных ядер
Экономное хардкорное программирование. Обращаешь внимание что регулярные выражения - это медленно почти всегда и на то что не все поля в оригинальных данных нужны. Оптимизируешь и пересобираешь оригинальный файл с данными так чтобы он содержал только id записи и поля с нужными текстами, переписываешь регулярные выражения на pyparsing или разворачиваешь их в текст для полного мэтчинга и, конечно, тоже разрезаешь файл с данными на 100 (или сколько нужно) и параллельно запускаешь обработку не обязательно на продвинутом железе. Думаешь о том не переписать ли все это на Rust
Управленческое решение. Находишь человека с нужными навыками в своей команде и предаешь ему эту задачу. Как он это сделает тебя волнует не особенно, главное чтобы результат был к ожидаемому сроку.
Поиски волонтера. Описываешь целесообразность и нужность задачи в виде мини ТЗ. Закидываешь с сообщества где могут быть потенциальные волонтеры готовые ее решить. Задача не самая сложная, не самая простая, как раз по силам.
Вайб-кодирование. Описываешь эту задачу ИИ агенту и он за тебя генерирует код (скорее всего не самый высокопроизводительный) и дальше уже по аналогии с ленивым программированием
Продвинутое вайб кодирование. Ставишь задачу нескольким ИИ агентам и сравниваешь результаты. Долго тюнишь лучший из результатов уточняющими запросами по оптимизации кода.
—
Можно придумать еще какое-то количество подходов, ИИ агенты добавили несколько опций которые оказываются полезными и ускоряют работу, но в работе с данными даже такого небольшого объёма это пока не такой оптимальный вариант как что-то другое.
#thoughts #programming #dataengineering
🔥4✍3❤1
Я довольно много писал про разные форматы файлов в дата инженерии и не только, с одной стороны это кажется очень внутренне-технической темой, неочевидной для тех кто не работает с данными постоянно, с другой стороны в обзоре от Andy Pavlov про СУБД за 2025 год активная конкуренция форматов явно упоминается. Потому что (внезапно!) оказалось что то как ты хранишь данные и то как хранят данные кто-то ещё и которые тебе необходимо использовать может быть как очень удобно и практично, так и создавать ничем не обоснованные дополнительные издержки.
Я привожу в пример как часто на порталах открытых данных публикуют CSV или XML файлы внутри ZIP архивов в формате: один файл - один архив. Но данные/файлы внутри ZIP архивов не приспособлены (без шаманства) для потоковой обработки. Их надо вначале распаковать куда-то как временные файлы, а потом уже обрабатывать и временные файлы удалять. Если файлы небольшие то и ладно, а если это десятки и сотни гигабайт и таких задач много, то возникает вопрос: А отчего же так? Это решается распространением датасетов не в виде ZIP архивов, а сжатием из GZip, LZMA, Zstandard, LZ4 и тд., способами и форматами сжатых данных изначально приспособленных под потоковую обработку. Собственно под такие форматы я делал iterabledata, библиотеку для Python. Она про то чтобы условно любой файл с таблицами или объектами можно было бы перебирать как это принято в Python в csv.DictReader. Последовательный перебор с возвращанием каждой записи как словаря (dict).
Но это лишь один уровень оптимизации, далее вопрос в выборочной обработке данных. Почему в какой-то момент так выстрелил довольно старый формат Parquet? Помимо хорошей компресии и возможности быстрого чтения данных он ещё и дает возможность выборочного чтения и фильтрации данных. К примеру, в отношении XML файлов это уже не работает, в отношении JSON, с большими ограничениями (для JSONl да, в остальных случаях нет) и так далее. А ещё есть огромное число форматов имеющих предметное и отраслевое применение где всё что можно - это, либо считывать их в память целиком, или перебирать содержание по каждой записи.
Вот примеры таких форматов: WARC (файлы веб архивов), PCAP (файлы перехвата сетевого трафика), SAS (файлы статпакета SAS), и еще много что: BSON, KML, GML, XLS, ODS и так далее. Реально огромное число форматов не поддаются фильтрации без загрузки в память или не через фильтрацию при тотальном переборе.
Поэтому когда доходит до их обработки, приходится преобразовывать их полностью или частично в parquet. К примеру, для WARC файлов я всегда их преобразую в один или несколько parquet файлов с метаданными, а оригинальные файлы рассматриваю как контейнеры для контента. И это я не сам придумал, а подсмотрел когда-то у Common Crawl, они поступают аналогично поскольку без этой процедуры собирать статистику сложно, надо перелопачивать каждый WARC файл, а это гигабайты-терабайты-петабайты.
Однако и сам формат Parquet'а неидеален и об этом регулярно пишут в разных местах и появляются такие форматы как Lance, Vortex, Nimble, Vortex, FastLanes и другие. Пока они довольно редки в открытом доступе, но постепенно проявляются. Впрочем parquet оказался достаточно эффективным чтобы эта замена длилась ещё какое-то количество леь
А вот чтобы я бы предсказал так то что грядет тренд на parquet'изацию данных, когда просто сильно удобнее распространять их в структурированном подобным образом виде. Возможно через рассмотрения parquet файлов как контейнеры, а возможно как файлы-сателлиты с метаданным к файлам контейнерам. К примеру, можно вполне заменить VCF файлы (генетика) на Parquet или файлы LDIF (директории пользователей LDAP) на Parquet или файлы KML и GML (геоданные) и тд.
#thoughts #data #dataengineering #fileformats
Я привожу в пример как часто на порталах открытых данных публикуют CSV или XML файлы внутри ZIP архивов в формате: один файл - один архив. Но данные/файлы внутри ZIP архивов не приспособлены (без шаманства) для потоковой обработки. Их надо вначале распаковать куда-то как временные файлы, а потом уже обрабатывать и временные файлы удалять. Если файлы небольшие то и ладно, а если это десятки и сотни гигабайт и таких задач много, то возникает вопрос: А отчего же так? Это решается распространением датасетов не в виде ZIP архивов, а сжатием из GZip, LZMA, Zstandard, LZ4 и тд., способами и форматами сжатых данных изначально приспособленных под потоковую обработку. Собственно под такие форматы я делал iterabledata, библиотеку для Python. Она про то чтобы условно любой файл с таблицами или объектами можно было бы перебирать как это принято в Python в csv.DictReader. Последовательный перебор с возвращанием каждой записи как словаря (dict).
Но это лишь один уровень оптимизации, далее вопрос в выборочной обработке данных. Почему в какой-то момент так выстрелил довольно старый формат Parquet? Помимо хорошей компресии и возможности быстрого чтения данных он ещё и дает возможность выборочного чтения и фильтрации данных. К примеру, в отношении XML файлов это уже не работает, в отношении JSON, с большими ограничениями (для JSONl да, в остальных случаях нет) и так далее. А ещё есть огромное число форматов имеющих предметное и отраслевое применение где всё что можно - это, либо считывать их в память целиком, или перебирать содержание по каждой записи.
Вот примеры таких форматов: WARC (файлы веб архивов), PCAP (файлы перехвата сетевого трафика), SAS (файлы статпакета SAS), и еще много что: BSON, KML, GML, XLS, ODS и так далее. Реально огромное число форматов не поддаются фильтрации без загрузки в память или не через фильтрацию при тотальном переборе.
Поэтому когда доходит до их обработки, приходится преобразовывать их полностью или частично в parquet. К примеру, для WARC файлов я всегда их преобразую в один или несколько parquet файлов с метаданными, а оригинальные файлы рассматриваю как контейнеры для контента. И это я не сам придумал, а подсмотрел когда-то у Common Crawl, они поступают аналогично поскольку без этой процедуры собирать статистику сложно, надо перелопачивать каждый WARC файл, а это гигабайты-терабайты-петабайты.
Однако и сам формат Parquet'а неидеален и об этом регулярно пишут в разных местах и появляются такие форматы как Lance, Vortex, Nimble, Vortex, FastLanes и другие. Пока они довольно редки в открытом доступе, но постепенно проявляются. Впрочем parquet оказался достаточно эффективным чтобы эта замена длилась ещё какое-то количество леь
А вот чтобы я бы предсказал так то что грядет тренд на parquet'изацию данных, когда просто сильно удобнее распространять их в структурированном подобным образом виде. Возможно через рассмотрения parquet файлов как контейнеры, а возможно как файлы-сателлиты с метаданным к файлам контейнерам. К примеру, можно вполне заменить VCF файлы (генетика) на Parquet или файлы LDIF (директории пользователей LDAP) на Parquet или файлы KML и GML (геоданные) и тд.
#thoughts #data #dataengineering #fileformats
Telegram
Ivan Begtin
Полезный ежегодный обзор баз данных в тексте Databases in 2025: A Year in Review от Andy Pavlov.
Всем кто работает с данными большого объёма будет полезно, вот ключевые выдержки:
1. Доминирование PostgreSQL продолжается. Многие экспериментируют со многими…
Всем кто работает с данными большого объёма будет полезно, вот ключевые выдержки:
1. Доминирование PostgreSQL продолжается. Многие экспериментируют со многими…
👍6✍1
В качестве регулярных напоминаний, большое количество открытого кода который я лично создавал и поддерживаю:
- iterabledata библиотека для Python по работе с любыми файлами с записями с помощью прямого их перебора и возвращением каждой записи как словаря (dict). Фактически реализация интерфейсов csv.DictReader и csv.DictWriter для десятков форматов файлов таких как JSON, JSON lines, XML, Parquet, ORC и множества более специфических и отраслевых таких как PCAP, WARC и др.
- internacia-db референсная база данных с базовыми данными по странам и по страновым блокам. Распространяется в форматах JSONL, Parquet, DuckDB, YAML. Полезно для задач обогащения данных, поиска и фильтрации результатов в территориальной привязке, сравнении стран и территориальных блоков.
- undatum это инструмент командной строки для работы с файлами со сложной иерархией так как работают с CSV файлами. Он умеет считать статистику, преобразовывать файлы, анализировать их, разрезать на части и тд. Внутри используется библиотека iterabledata и большое число форматов файлов поддерживаются
- metacrafter библиотека для Python и инструмент командной строки для работы с семантическими типами данных, используется для выявления персональных идентификаторов и иных объектов (кодов организаций, кадастровых и почтовых кодов и так далее)
А также много другого открытого кода о котором я регулярно тут пишу.
#opensource #data #dataengineering #datatools
- iterabledata библиотека для Python по работе с любыми файлами с записями с помощью прямого их перебора и возвращением каждой записи как словаря (dict). Фактически реализация интерфейсов csv.DictReader и csv.DictWriter для десятков форматов файлов таких как JSON, JSON lines, XML, Parquet, ORC и множества более специфических и отраслевых таких как PCAP, WARC и др.
- internacia-db референсная база данных с базовыми данными по странам и по страновым блокам. Распространяется в форматах JSONL, Parquet, DuckDB, YAML. Полезно для задач обогащения данных, поиска и фильтрации результатов в территориальной привязке, сравнении стран и территориальных блоков.
- undatum это инструмент командной строки для работы с файлами со сложной иерархией так как работают с CSV файлами. Он умеет считать статистику, преобразовывать файлы, анализировать их, разрезать на части и тд. Внутри используется библиотека iterabledata и большое число форматов файлов поддерживаются
- metacrafter библиотека для Python и инструмент командной строки для работы с семантическими типами данных, используется для выявления персональных идентификаторов и иных объектов (кодов организаций, кадастровых и почтовых кодов и так далее)
А также много другого открытого кода о котором я регулярно тут пишу.
#opensource #data #dataengineering #datatools
GitHub
GitHub - datenoio/iterabledata: Python library to read, write and convert data files with formats BSON, JSON, NDJSON, Parquet,…
Python library to read, write and convert data files with formats BSON, JSON, NDJSON, Parquet, ORC, XLS, XLSX, XML and many others - datenoio/iterabledata
👍13