Сообщения

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

Изображение
Иногда возникает ситуация, когда нужно разложить поле, содержащее столбец-массив на несколько строк, то есть вынести в столбец каждый отдельный элемент массива. Другими словами: как разгруппировать колонку в несколько строк. Например, разложить колонку room_number на несколько строк.  В примере ниже мы разложили колонку room_number на несколько строк для  consumer_id = 1694953573. Получаем следующий результат: Как видим из примера выше, каждый элемент массива room_numbers теперь на отдельной строке. Делается это при помощи конструкции ARRAY JOIN. Синтаксис следующий: [ LEFT ] ARRAY JOIN < array > Вместо <array> вы должны указать колонку или выражение, которое возвращает массив. Для нашего примера запрос будет таким: SELECT consumer_id, room_number, order_date FROM orders ARRAY JOIN room_numbers as room_number WHERE consumer_id = 1694953573; Profit! Приветствуются конструктивные комментарии. Спасибо. P.S. А если поле у вас не массив, а строка, т

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

Сегодня я столкнулся с проблемой, что в документации ClickHouse нет функции преобразования строки в массив. Поискав в StackOverflow , я тоже ничего внятно не нашел. Попробую объяснить на примере: У вас есть некая колонка 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. Можно также убрать и фигур

How to group from file by some condition or get count of unique data

For example you have file which contains log of some events. Input data: Dec  9 00:33:42 some log Dec  9 00:56:49 some log Dec  9 01:13:12 some log Dec  9 01:22:02 some log Dec  9 01:35:52 some log Dec  9 03:15:52 some log Dec  9 12:17:52 some log And you want group this file by hours. The code below will help group and display data: grep -oP "Dec\s+9\s(\d{2})" | sort | uniq -c  Output data: 2 Dec 9 00 3 Dec 9 01 1 Dec 9 03 1 Dec 9 12 First column - it's count of unique lines with the date. Flag -o is required to output only the requested substring (Dec\s+9\s(\d{2})) Flag -P  is required for enable  perl-style regexes Command sort  sorts the data. And uniq -c  find count of unique lines. Thank you for reading. Best regards, Ildar.

Как очистить файл [Linux/Debian/Ubuntu]

Чтобы очистить файл до нулевого размера, то есть очистить весь файл, нужно выполнить очнь простую команду: > file.txt Второй способ очистить файл: echo -n "" > file.log Также вы можете удалить содержимое файла следующей конструкцией: truncate -s 0 test.txt Надеюсь эта очень краткая статья поможет вам разобраться с вашей проблемой. Очищайте файлы, но не забывайте создавать бекапы.

Замена подстроки в файле при помощи sed, Linux

Замена подстроки в файле в Linux легко осуществляется при помощи встроенной утилиты sed. $ sed -e 's/ red / blue /g' filename.txt Из вышеприведенной конструкции: red - подстрока, которую нужно найти в файле blue -  подстрока, на которую нужно заменить filename.txt -  файл, в котором осуществляется поиск Чтобы сохранить изменения, нужно направить вывод в файл $  sed  -e 's/ red / blue /g'  filename.txt > filename_new.txt

Удалить все таблицы в базе данных Mysql | Drop all tables in mysql

Всем привет! Сегодня я вам кратко расскажу, как удалить все таблицы разом в MySQL, не удаляя базу данных. Есть два способа это сделать. Самый простой способ удалить таблицы MySQL, заключается в использовании mysqldump: mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE] Переменные, которые указаны выше, [USERNAME], [PASSWORD] и [DATABASE] это опции вашей базы данных. Вы можете менять USERNAME, PASSWORD и DATABASE, как вам угодно. Второй способ, используя некоторые конструкции MySQL для формирования списка таблиц и последующего их удаления SET FOREIGN_KEY_CHECKS = 0 ; SET @ tables = NULL ; SELECT GROUP_CONCAT ( table_schema , '.' , table_name ) INTO @ tables FROM information_schema . tables WHERE table_schema = 'database_name' ; -- specify DB name here. SET @ tables = CONCAT ( 'DROP TABLE IF EXISTS ' , @ tables ); PREPARE stmt FROM @ tables

MySQL: Загрузка данных в таблицу из файла

Вам когда-нибудь приходилось загружать данные из файла в таблицу из файла? Если нет, то я попробую кратко рассказать вам об одном способе это сделать. Загрузить данные в таблицу из файла LOAD DATA INFILE 'data.csv' INTO TABLE my_table Такая конструкция поможет вам загрузить данные из файла в вашу таблицу. Если вы хотите загрузить отформатированные данные, скажем разделенные запятой, то вам поможет следующая конструкция: LOAD DATA INFILE 'data.csv' INTO TABLE my_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' Что это означает? Искать концы строк в виде символов '\r\n' Разбивать строки на поля по символам запятой (,). Ожидать, что поля могут быть заключены в символы цитирования. Интерпретировать встречающиеся символы табуляции, новой строки или '\', предваренные '\', как литералы, являющиеся частью значения поля. Конструкция LOAD