CH?
1. Распарсить его на две колонки user_id и country, и повещать индексы на них
2. Хранить как строку
если ключей действительно два как в примере, то распарсить, положить в колонки и не искать себе приключений. Но если ключей сотня, со сложной иерархией/структурой, и вы сами не знаете зачем они вам нужны, то можно положить в строку и парсить по требованию. Или материализовать в столбец, когда захочется быстрого доступа и агрегаций по какому-то из полей. Можно посмотреть например тут - https://altinity.com/webinarspage/2019/12/17/a-practical-introduction-to-handling-log-data-in-clickhouse (и надо добавить, что индексов тут скорее нет, чем есть)
Индексов в json? Просто потом нужно будет группировать по user_id
индексов в КХ. Тут нет индексов, тут есть сортировка данных при хранении. Группировка сама по себе не требует индекса если вы хотите прочитать всю таблицу. Но вы не ответили на вопрос - насколько велик и непредсказуем ваш json.
Тот что скинул это максимум. Есть ещё большой json у которого меняются поля - он будет как строка записан
Ну все равно если данные будет отсортированны по user_id их легче брать будет. Так же?
https://kb.altinity.com/altinity-kb-schema-design/best-schema-for-storing-many-metrics-registered-from-the-single-source/
тогда делайте парсинг перед инсертом и кладите в две колонки. И разбирайтесь с order by. Дело же не в том чтобы "легче брать", а в том чтобы "меньше читать".
Обсуждают сегодня