Почему метка времени SECONDARY stream занимает так много места в файле ORC? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть файл ORC со следующей структурой:

Type: struct<event_ts:timestamp,event_ts_rounded:timestamp>

Первый столбец содержит метки времени с миллисекундами. Второй столбец содержит те же значения меток времени, округленные до полных секунд (без дробной части).

Пример данных:

{"event_ts":"2018-10-08 00:00:00.002","event_ts_rounded":"2018-10-08 00:00:00"}
{"event_ts":"2018-10-08 00:00:00.003","event_ts_rounded":"2018-10-08 00:00:00"}
{"event_ts":"2018-10-08 00:00:00.004","event_ts_rounded":"2018-10-08 00:00:00"}

Orcfiledump отображает следующую информацию о размере потоков:

Stream: column 1 section DATA start: 63802470 length 148475
Stream: column 1 section SECONDARY start: 63950945 length 19840932
Stream: column 2 section DATA start: 83791877 length 148475
Stream: column 2 section SECONDARY start: 83940352 length 761

Размеры потоков данных одинаковы. Это ожидается. Размер ВТОРОГО потока для метки времени без дробной части крошечный. Это также ожидается.

Но почему значения миллисекунд в ВТОРОМ потоке первого столбца занимают такое огромное количество места? Внутренне это максимум 1000 уникальных значений (от .000 до .999).

Кроме того, в соответствии с документацией ORC, ВТОРИЧНЫЙ поток должен быть оптимизирован для использования как можно меньшего пространства, удаляя конечные нули: https://orc.apache.org/specification/ORCv1/

Я создал файл ORC с версией ORCWriter 1.5.2.

Спасибо.

...