Ivan Begtin
8.09K subscribers
1.61K photos
3 videos
100 files
4.33K 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 ivan@begtin.tech
Download Telegram
В рубрике интересных поисковиков по данным, Lens.org научный поисковик по патентам, авторам и научным работам. Причём научных работ там проиндексировано 272 миллиона из которых 3.8 миллиона - это наборы данных.

Грамотно спроектированный интерфейс, удобный поиск (хотя и в Dateno быстрее) и большой охват источников.

Из минусов:
- существенный дисбаланс в сторону США и мало данных других стран
- многое названное там датасетами таковым не является
- только научные данные и даже не всех отраслей

#opendata #datasearch #datatools
Чем с больше данных тем больше потребности в их эффективном сжатии. Из любопытных продуктов на эту тему:
- llama-zip - LLM-powered lossless compression tool, как уже понятно использует языковую модель LLAMA для сжатия текстов на английском языке. Работает только с текстами, сжимает как-то совсем неимоверно судя по примерам. Хочется дождаться его внешнего тестирования и сравнений с другими.
- ts_zip архиватор от Fabrice Bellard работающий с помощью встроенной языковой модели RWKV 169M v4 . Автор известен тем что создал NNCP, компрессор и прекомпрессор на основе нейросетей и побеждающий несколько лет в конкурсе Large Text Compression Benchmark

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

1. Если у данных есть предопределённые схемы то самый эффективный способ их отдавать - это Parquet.
2. Если хранение данных вообще ничем не ограничено, то сохранять в JSONL
3. Если данные нужны для аналитики и их хочется сохранять сжатыми, то форматы gz, br, xz, zst, lz4 и bz2 если их обрабатывать в Clickhouse и в формате gz если в DuckDB. Фактически надо использовать сжатие GZip'ом при всех его недостатках.
4. Для холодного хранения можно сжимать чем угодно дающим хорошее сжатие, например xz, bz2 или 7z


#thoughts #compression #data #datatools
Свежий open source продукт для каталогизации корпоративных данных, в этот раз от Databricks и под названием Unity Catalog [1]. Обещают что это чуть ли не единственная open source платформа для data governance для data и AI.

Бегло посмотрев его могу сказать что:
- сделан каталог по cloud-first модели, полностью ориентирован на работу через облачных провайдеров
- в основе Delta sharing protocol, для обмена структурированными и неструктурированными данными
- UI сейчас нет, можно сказать этакий headless data catalog, может быть позже добавят
- он совсем не про инвентаризацию данных и про data assets, а скорее про приведение имеющегося к стандартным/популярным форматам
- внутри всё написано на Java

Итого:
1. Если надо сделать единый каталог для нескольких дата команд работающих с разными cloud сервисами и таблицами (Iceberg, Delta, Hudi) - годится
2. Если надо систематизировать работу data science команд с разными ML моделями и данными для обучения - скорее годится
3. Если надо проинвентаризировать корпоративные базы данных и разные данные, особенно унаследованные форматы - не подходит
4. Если надо организовать работу по документированию данных внутри - не подходит

И туда же до кучи, Snowflake тоже пообещали опубликовать код своего каталога данных Polaris [2]. Исходного кода пока нет, но тоже видно что это cloud-first решение на связке Iceberg и разных клауд провайдеров.

Ссылки:
[1] https://www.unitycatalog.io/
[2] https://github.com/snowflakedb/polaris-catalog

#opensource #datacatalogs #datatools
Сугубо техническое и инструментальное. Я на днях обновил исходный код утилиты metacrafter [1] и библиотеки для Python iterabledata [2].

Metacrafter - это утилита и библиотека для Python по выявлению семантических типов данных и далее автодокументирования датасетов. Она изначально поддерживала MongoDB, базовые типы файлов вроде csv, xml, jsonl и тд, а также большую часть SQL баз данных (через SQLAlchemy). Не хватало только поддержки файлов которые могут быть разнообразно сжаты. Эту задачу получилось решить переключившись на библиотеку iterabledata которая поддерживает работу с файлами вроде .csv.bz2, .xml.xz, .jsonl.gz и так далее. Собственно к уже имеющимся алгоритмам сжатия и форматам я добавил ещё Zstandard и Brotli. Из популярных форматов не поддерживаются пока только Snappy и 7z . Но у Snappy неудобная реализация на Python, надо её переписывать, а библиотека для 7z не поддерживает режим открытия файла в контейнере, без обязательного раз сжатия .

Но в остальном оказалось очень удобно . Осталось часть других инструментов переписать с этой библиотекой для простоты обработки условно любых входящих дата файлов с условно любым типом сжатия/контейнеров.

А поддержку сжатых файлов в metacrafter пришлось добавлять не просто так, а потому что хранение бесконечного числа CSV'шек и других первичных файлов в Dateno сжирает очень много места, а обрабатывать их надо. И обрабатывать достаточно быстро и с достаточно небольшими ресурсами памяти, процессора и тд.

Один из способов такой экономии это обновление инструментария для поддержки сжатых файлов на всех этапах. Причём не только на этапе обработки данных, но и на этапе извлечения и загрузки. Импорт в СУБД тоже нужен не в чистых .csv или .json, файлах, а в том числе, сжатыми тоже.

Ссылки:
[1] https://github.com/apicrafter/metacrafter
[2] https://github.com/apicrafter/pyiterable

#opensource #datatools #data #metacrafter #dateno
Свежий инструмент Amphi для визуальных ETL процессов, с low-code проектированием труб данных (data pipelines) через интерфейс в Jupyter lab

Из плюсов:
- low code
- не cloud-first
- базовый набор для обработки структурированных и неструктурированных данных
- всё можно делать в UI прямо в Jupyter Lab
- открытый код

Из минусов:
- low-code (для кого-то минус)
- не cloud-first (для кого-то минус)
- мало разнообразия в источниках получения данных
- лицензия Elastic, недоопенсорс

Мне чем-то напомнило Apache Nifi, но только отчасти.

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

В целом из разработки дата инструментов мне нравятся не только продукты, но и команды Clickhouse и Duckdb.

Хочется дождаться ETL сделанное по аналогии с Duckdb. Удобным ядром и большим числом хорошо написанных расширений. Какое-то время назад мне казалось что Meltano на эту роль подходит, но с тех пор как они отдали свои публичные ресурсы довольно хреновым маркетологам читать их стало тяжело. Развитие продукта сложно оценивать.

#etl #opensource #datatools
Подборка ссылок на продукты публикации датасетов для API и аналитики:

С открытым кодом:
- SQLite Studio [1] быстро первращает базы SQLite в веб интерфейс. Можно смотреть структуру таблиц и делать запросы. А также есть демо [2]. По ощущениям очень простой и удобный для этой небольшой задачи.
- Datasette [3] хорошо известный в узких кругах продукт, очень быстро превращающий датасеты в веб интерфейс. Умеет в разные данные, разные API, разные интерфейсы и куча расширений. Когда хочется конструктор и разного
- CSVBase [4] простой до безобразия для превращения CSV файлов в API. Внутри всё Python, одновременно и сервис для публикации данных онлайн для тех кто очень хочет делать это за деньги
- APIReady [5] написанный мной 11 лет назад очень простой движок по превращению CSV файлов в API. Честно говоря с той поры я его даже не развивал, просто как демонстрация самой идеи.
- APICrafter [6] тоже написанная мной утилита по публикации API к базам MongoDB. Развитие APIReady и необходимость поскольку MongoDB по умолчанию не давало и не даёт приемлимое API в их Community Server. Только в облачном сервисе есть уже что-то удобное. Всё на Python, управляется развесистыми YAML конфигами которые строятся автоматически на основе просканированных баз данных [7]

Если Вы знаете другие open source инструменты для публикации датасетов, о них можно рассказать в чатике.

А я через какое-то время напишу про то какие есть бесплатные и коммерческие, не open source, онлайн инструменты делиться датасетами.

Ссылки:
[1] https://github.com/frectonz/sqlite-studio
[2] https://sqlite-studio.frectonz.io/
[3] https://datasette.io/
[4] https://github.com/calpaterson/csvbase
[5] https://github.com/ivbeg/apiready
[6] https://github.com/apicrafter/apicrafter
[7] https://github.com/apicrafter/apicrafter/blob/main/examples/rusregions/apicrafter.yml


#opensource #datatools #data #api
За много лет у меня накопилось множество инструментов для командной строки которые я создавал для разных дата задач:
- undatum [1] утилита для обработки данных с акцентом на JSONl файлы
- datadiff [2] утилита для создания патчей для датасетов
- mongo2md [3] утилита по автогенрации markdown документации к коллекциям mongodb
- metacrafter [4] утилита и библиотека по идентификации семантических типов данных
- docx2csv [5] утилита по превращению таблиц в файлах DOCX в CSV
- lazyscraper [6] утилита по быстрому и автоматическому извлечению данных из HTML таблиц и другой разметки

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

Сейчас я задумался не пора ли многие из них перенести в один инструмент. Тот же undatum.

Тем более что много есть задач в которых такой инструмент требуется. И есть незакрытые задачи

Вот примерно такое я хочу сделать с undatum добавив туда разные функции и поддерживая работу с NoSQL как приоритет.

Но самое интересная это думать над тем как это реализовать. Я всё чаще склоняюсь к тому что Duckdb правильнее воспринимать как data transformation движок, а не как хранилище. Можно очень многое ускорить с его помощью. Но не всё и тут важны альтернативы. Силами языка или встроенным DB движком.

А ещё у меня есть экспериментальный код mongorefine и код утилиты datacrafter которые живут несколько иначе и связать всё вместе сложнее.

В общем вот такие мысли в последнее время, и открытый код который хочется развивать. А вот код из Dateno можно раскрывать только ограниченно, потому что там много специфичного know how.

Ссылки:
[1] https://github.com/datacoon/undatum
[2] https://github.com/datacoon/datadifflib
[3] https://github.com/datacoon/mongo2md
[4] https://github.com/apicrafter/metacrafter
[5] https://github.com/ivbeg/docx2csv
[6] https://github.com/ivbeg/lazyscraper

#opensource #datatools #data
Подборка полезных инструментов для работы с данными и не только:
- GROBID [1] библиотека и набор утилит для разбора PDF научных статей. Извлекает таблицы, ссылки, заголовки, цитаты, даты и именованные сущности. Используется внутри проекта Semantic Scholar. Открытый код под Apache 2.
- sqleton [2] универсальная библиотека для Python для доступа к разным SQL СУБД. Альтернатива SQLAlchemy, но выглядит как более простая в использовании
- reladiff [3] библиотека для Python для сравнения больших таблиц, сравнительно легко её можно доработать для сравнения больших датасетов
- Daft [4] распределенная библиотека для датафреймов на Rust и Python. Внутри Apache Arrow и язык запросов в виде функций для Python

Ссылки:
[1] https://github.com/allenai/grobid
[2] https://github.com/erezsh/sqeleton
[3] https://github.com/erezsh/reladiff
[4] https://github.com/Eventual-Inc/Daft

#opensource #datatools #data #pdf #sql #dataframes
Ещё один симпатичный бенчмарк сравнений обработки данных на Python с использованием чистого Python и разных библиотек.

Безоговорочный лидер Duckdb и близкий к нему по скорости Polars, но всё равно отстающий.

Вполне ожидаемо, от Duckdb многие в восторге именно из-за комбинаций скорости и функций.

Причём в текущем состоянии Duckdb ещё и может быть идеальным инструментом для ETL/ELT трансформации данных. Его можно рассматривать не как базу для хранения, а как инструмент быстрой обработки данных. А в нынешних облачных реалиях быстрый значит и дешёвый.

У меня вот есть штук пять внутренних и open source инструментов про которые я понимаю что если их на duckdb (или polars) смигрировать, то они станут удобнее и практичными многократно.

#opensource #datatools #data #duckdb #benchmarks
В качестве лирического отступления. Если бы я был писателем пишущим по методу Хэмингуэя, без исправления текста, то сказал бы что "аллилуйя", пришёл настоящий вызов. Но я не такой писатель, и художественное творчество моё куда как скромно, но вот работа с нефункционирующей кнопкой бэкспейса на клавиатуре и ещё рядом других кнопок накладывает свои ограничения, как минимум на скорость печати. К сожалению замена клавиатуры будет только через несколько дней, так что это писать также часто как раньше пока не выходит.

Но даже так я слегка пробежался по старому коду движка metacrafter'а [1], инструмента для идентификации семантических типов данных, или более простым языком, инструмент идентификации того что за колонка в наборе данных или в базе данных и что с ней можно делать. Инструмент я потихоньку начал приводить в целевое состояние - усиление поисковых возможностей у Dateno и автодокументирование датасетов.

Что нового:
- правила для metacrafter'а перенесены теперь в новый репозиторий metacrafter-rules [2], их стало больше, в основном за счёт правил для других языков отличных от английского и русского;
- обновился серверный и клиентский режимы работы. Теперь можно ускорить сканирование данных запустив metacrafter как сервер и обращаясь к нему через параметр remote при вызовах сканирования файлов или баз данных. Это важно для ускорения процесса поскольку правила инициализируются только один раз
- добавилась команда просмотра правил 'metacrafter rules list'
- и так далее

Главный недостаток сейчас - это скорость работы на больших датасетах. Чем больше колонок тем дольше анализ, до нескольких минут. Это не так критично для задач вроде сканирования корпоративных СУБД, но тяжко для задач Dateno когда миллионы датасетов.

На самом деле чтобы всё ускорить нужно просто много ресурсов: процессорных, хранения и памяти. А прикрутив LLM'ку можно сильно повысить качество автодокументирования данных.

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

Ссылки:
[1] https://github.com/apicrafter/metacrafter/
[2] https://github.com/apicrafter/metacrafter-rules/

#opensource #data #datatools #dateno #metacrafter