H3 индексирования в Clickhouse где можно почитать про примеры использования? Моя задача состоит в том, чтобы с бекенда принимать выделенную область и быстро (+ точно, не выходя за рамки) фильтровать из большого массива данных по этим координатам. Заранее благодарю за ответы!
В целом рабочий вариант, на счет примеров наверное нет
очень мало информации удалось найти в сети... как например организовывать данные в таблице? Делать 15 столбцов по каждому resolution индекса H3 или обойтись одним столбцов? Как передавать в фильтр WHERE координаты выбранной области?
ну логично хранить самое маленькое разрешение
> Делать 15 столбцов по каждому resolution индекса H3 Точно нет, думаю одного с какой то разумной точностью хватит. (например 9) > Как передавать в фильтр WHERE координаты выбранной области? Кодируя их в H3 число
почему? Что если будет передана область огромного размера, как оптимально выбрать данные?
можете дать пример, как кодировать координаты в H3, чтобы эффективно произвести поиск?
Сгенерировать список H3 тайлов что перекрывают эту область
если будет один столбец с маленьким разрешением --> высокая кардинальность и придется сканировать больше данных, я правильно понимаю?
Маленькое разрешение -> низкая кардинальность. С одной стороны да, с другой суть H3 индекса. что он "хорошим" образом заметает поверхность, так что скорее всего будет читать данные из одного диапазона гранул
т.е. в таблице хранить родительский H3 (маленькое разрешение, к примеру, H3_3) индекс и каждый раз на лету получать от него список дочерних и сравнивать их с тем, что приходит в запросе на фильтрацию?
да, потом дополнительно отфильтровывать по попаданию координат в ваш полигон
но в этом случае будет происходит полное сканирование таблицы?
Почему? вы по H3 отсечете те гексы что вообще не попадают
ага, понял. Условие фильтрации комплексное - сперва отсекаю по H3, который большой родительский и находится в PRIMARY KEY, затем дополнительно получаю список дочерних H3 в этом диапазон и сравниваю с тем, что пришло в запросе
Не совсем SELECT * FROM table WHERE h3_index IN (list_of_h3_covers_your_polygon) AND pointInPolygon(polygon_arr,lat,log) > бекенда принимать выделенную область
Обсуждают сегодня