Как преобразовать строку в массив в ClickHouse / How to transform string to array in ClickHouse

Сегодня я столкнулся с проблемой, что в документации ClickHouse нет функции преобразования строки в массив. Поискав в StackOverflow, я тоже ничего внятно не нашел.

Перед прочтением рекомендую подписаться на мой телеграмм канал, где вы сможете найти актуальные новости, примеры и хаки в мире разработки: @asanov_tech

Попробую объяснить на примере:

У вас есть некая колонка data типа String, которая хранит JSON:

{"user_id":123456,"item_ids":[1203,1204,1205],"count":5}

Вы хотите преобразовать поле item_ids в массив, чтобы в дальнейшем с ним производить любые функции по работе с массивами (ссылка на документацию в конце поста).

Как преобразовать строку в массив из JSON

Строка может содержать не в отдельной колонке, а, например, в поле json. Пример ниже продемонстрирует как этого добиться:

  1. С помощью функции visitParamExtractRaw достать значение поля item_ids в сыром виде:
    visitParamExtractRaw(data'item_ids')
  2. С помощью функции trim убрать лишние квадратные скобки по краям:
    trim(BOTH '[]' FROM visitParamExtractRaw(data, 'reward_ids'))

    p.s. Можно также убрать и фигурные скобки, просто замените [] на {}

  3. С помощью 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 – http://greenwebstudio.blogspot.com/2021/07/how-to-ungroup-field-in-clickhouse.html?utm_source=greenwebstudio&utm_content=string_to_array_clickhouse

Если было полезным, большая просьба подписаться на мой телеграмм канал и рассказать друзьям: @asanov_tech

Комментарии

Популярные сообщения из этого блога

Как разложить массив на несколько строк в ClickHouse

Экспорт одной таблицы базы данных или mysqldump одной таблицы (MySQL)