ЦЕЛИ- Добавить механизм predicate pushdown в hybrid-json
ЗАДАЧИВам необходимо:
- реализовать механизм индексирования, аналогичному в parquet, при использовании которого для каждого файла для каждой колонки необходимо будет посчитать ее минимальное и максимальное значение и сохранить это в index_store.file_index в поле columnStats в следующем формате:
> use index_store switched to db index_store > db.file_index.findOne() { "_id" : ObjectId("619f54f0f93d4b9795eb4606"), "objectName" : "test01", "path" : "/tmp/foo.json/ca8220e2-bd77-4732-a837-9071854086a0.json"
, "commitMillis" : NumberLong("1637831920142"), "columnStats" : [ { "name" : "id2", "min" : 0, "max" : 38 }, { "name" : "id", "min" : 0, "max" : 19 } ] }
- cтруктура поля columnStats - это массив словарей, в каждом словаре name - имя колонки, min - ее минимальное значение в файле, max - ее максимальное значение в файле
- запись columnStats должна происходить после успешной записи файла, вместе с остальными полями документа в index_store.file_index
- для упрощения задачи необходимо реализовать поддержку columnStats только для полей, имеющих тип IntegerType
- реализовать механизм predicate pushdown, при котором будут читаться только те файлы, которые пройдут по columnnStats. Должны поддерживаться следующие фильтры
- EqualTo ( == в DataFrame API)
- GreaterThan ( > в DataFrame API)
- GreaterThanOrEqual ( >= в DataFrame API)
- LessThan ( < в DataFrame API)
- LessThanOrEqual ( <= в DataFrame API)