Как преобразовать строку в массив в ClickHouse
Сегодня я столкнулся с проблемой, что в документации ClickHouse нет функции преобразования строки в массив. Поискав в StackOverflow, я тоже ничего внятно не нашел.
Перед прочтением рекомендую подписаться на мой телеграмм канал, где вы сможете найти актуальные новости, примеры и хаки в мире разработки: @asanov_tech
Попробую объяснить на примере:
У вас есть некая колонка data типа String, которая хранит JSON:
{"user_id":123456,"item_ids":[1203,1204,1205],"count":5}
Вы хотите преобразовать поле item_ids в массив, чтобы в дальнейшем с ним производить любые функции по работе с массивами (ссылка на документацию в конце поста).
Как преобразовать строку в массив из JSON
Строка может содержать не в отдельной колонке, а, например, в поле json. Пример ниже продемонстрирует как этого добиться:
- С помощью функции visitParamExtractRaw достать значение поля item_ids в сыром виде:
visitParamExtractRaw(data, 'item_ids')
- С помощью функции trim убрать лишние квадратные скобки по краям:
trim(BOTH '[]' FROM visitParamExtractRaw(data, 'reward_ids'))
p.s. Можно также убрать и фигурные скобки, просто замените [] на {}
- С помощью splitByChar разделить строку на массив, указав знак , в качестве разделителя:
splitByChar(',', trim(BOTH '[]' FROM visitParamExtractRaw(data, 'reward_ids')))
Итоговый SQL:
SELECT splitByChar(',', trim(BOTH '[]' FROM visitParamExtractRaw(data, 'reward_ids'))) FROM some_table;
Такие нехитрые действия нужны для того, чтобы вытянуть список. Дальше вы можете совершать любые манипуляции с данными.
А если вам нужно разложить массив на несколько строк, то читайте как это сделать в нашем блоге в статье "Как разложить массив на несколько строк в ClickHouse"
Ссылки:
- Документация ClickHouse: https://clickhouse.tech/docs/ru/sql-reference/functions/splitting-merging-functions/
- Функции ClickHouse по работе с массивами: https://clickhouse.tech/docs/ru/sql-reference/functions/array-functions/
- Как разложить массив на несколько строк в ClickHouse: https://asanov.pro/posts/2021-07-02-how-to-ungroup-field-in-clickhouse
Если было полезным, большая просьба подписаться на мой телеграмм канал и рассказать друзьям: @asanovpro