YTsaurus + Excel

Рассказываем, как работать с Excel-таблицами через YTsaurus

Мы выложили в опенсорс два микросервиса интеграции 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.

Войдите, чтобы сохранить пост