YTsaurus + Excel
Мы выложили в опенсорс два микросервиса интеграции YTsaurus и MS Excel. Теперь через интерфейс YTsaurus можно:
-
загружать xlsx-файлы в статические таблицы YTsaurus;
-
скачать небольшую статическую таблицу YTsaurus в формате xlsx.
Микросервисы разворачиваются рядом с k8s-кластером YTsaurus отдельным helm-чартом. API сервисов и документация администратора лежат в репозитории, а пользовательскую документацию можно найти тут.
Особенности интеграции
Требования и ограничения микросервисов
-
Работают с небольшими объёмами данных, до 100 MB;
-
Требуют строгой схемы на таблицах YTsaurus;
-
Работают только с одной Excel-таблицой.
Системы типов
В YTsaurus довольно богатая система типов, включающая целочисленные типы разной битности, float, double, байтовые и utf8-строки, даты, таймстемпы и интервалы. В Excel при этом всего три типа данных: Number (double 64 bit), Text и Logical (bool).
Таблицы в YTsaurus больше, строки длинее, a числа точнее, поэтому при скачивании YTsaurus таблички могут получится непредставимые в Excel данные. Сервис использует нетривиальный маппинг типов и позволяет выбирать поведение для конвертации больших целочисленных типов: приводить к строке, терять точность, падать с ошибкой.
Например, в Excel нет встроенного типа данных для дат. Дата — это Number (double) который отображается как дата с помощью выбранного стиля форматирования. Даты похожи на Unix-время с двумя отличиями:
-
Начало отсчёта в Unix — это 01.01.1970, в Excel — 01.01.1900;
-
Размер шага в Unix измеряется в секундах, а в Excel — в сутках.
Время 09.08.2011 22:39:07.776 будет храниться в Excel как 40764.94384, что равно 40746 целым дням, начиная с 01.01.1900, плюс примерно 94 процента дня. По этому примеру видно, что в типе Number нельзя хранить очень точные времена, например, микросекундные.
Размеры таблиц
-
Максимальное количество строк в Excel — один миллион, в YTsaurus — сильно больше;
-
Максимальное количество колонок в Excel — 16 тысяч, в YTsaurus — 32;
-
Максимальная длина строки в Excel — 32 тысячи, в YTsaurus — вплоть до
128 × 10^6^
.
Excel и невозможность стриминга
Файл xlsx — это zip-архив xml файлов:
unzip fruits.xlsx
Archive: fruits.xlsx
inflating: _rels/.rels
inflating: xl/workbook.xml
inflating: xl/styles.xml
inflating: xl/worksheets/sheet1.xml
inflating: xl/_rels/workbook.xml.rels
inflating: xl/sharedStrings.xml
inflating: docProps/core.xml
inflating: docProps/app.xml
inflating: [Content_Types].xml
В нём отдельно хранится метаинформация, данные ячеек, стили каждой ячейки и прочее. Потоковая запись xlsx-документа, поэтому, невозможна и требует материализации в памяти перед ответом. Отсюда, в частности, возникает ограничение на размер файлов, с которым работают сервисы.
Обратная связь
Приходите с вопросами в чат и приносите issues и фичареквесты на GitHub.