11238
Обсуждаем ClickHouse
ну надо выбирать используя указывая тип
.:"Array(Nullable(Int64))"
https://fiddle.clickhouse.com/da21e811-173a-4c91-8fda-7389838db58c
всем доброго времени суток. имеется странный вопрос: имеется стендэлон сервер клика, куда когда-то давно загрузили бекапы баз данных, и сейчас у них у всех UUID идентичен. как можно сменить uuid у базы данных(нужно для управления через terraform) ?
Читать полностью…
нет, просто баг в пайплайне выполнения
Читать полностью…
для DATABASE ENGINE = Backup
ошибка:
SQL Error [22000]: Code: 87. DB::Exception: Seek in compressed archive is not supported.
запрос вида SELECT * FROM TABLE
что бы могла означать? как полечить?
located on disk backup of type none, from mark 22409 with max_rows_to_read = 8192, offset = 0): While executing MergeTreeSelect(pool: ReadPool, algorithm: Thread). (CANNOT_SEEK_THROUGH_FILE) (version 25.7.1.3997 (official build))
ну так не интересно, так и не попробовали куда нибудь в табличную функцию format() засунуть, возможно об Template как то, или ещё как то извратиться )
Читать полностью…
А откуда они у вас приходят? Тест в фидл неверный, потому что это не данные а литералы. Вот так все валидно - https://fiddle.clickhouse.com/0d92ace6-ba6f-415d-9114-cfdc5a5b8c7e
Если у вас в данных (CSV/Kafka/etc) приедут \n - это нормально. А в литералах надо бекслешить - \\n
тоже пришло такое в голову с ходу, но кажется так только хуже
SELECTЧитать полностью…
query,
mapFilter((x, _) -> ((x ILIKE '%cpu%') OR (x ILIKE '%real%') OR (x ILIKE '%system%') OR (x ILIKE '%user%')), ProfileEvents) AS cpu
FROM system.query_log
WHERE (query_id IN ('8307fc8d-ba0e-4150-b120-f7900d42f0b0', '06e05b19-db96-4629-8fcf-dc926e38e04d')) AND (type = 'QueryFinish')
FORMAT Vertical
Query id: 466324d3-ed7a-41a2-8d8b-2feebc79e734
Row 1:
──────
query: with
'{
"errorNumber": "01f0a8d0-e6d7-15f0-9570-b9d3f0a27ee7",
"errorMessage": "Данные для передачи на Портал\n\tat portal.process пустой набор данных\n",
"processingStage": 128
}' as message
select JSONExtract(replaceRegexpAll(message, '[\n\r\t]', ' '), 'Tuple(errorNumber UUID, errorMessage String, processingStage UInt16)') as parsed_str;
cpu: {'RealTimeMicroseconds':1403,'UserTimeMicroseconds':858,'SystemTimeMicroseconds':277,'OSCPUVirtualTimeMicroseconds':1134}
Row 2:
──────
query: with
'{
"errorNumber": "01f0a8d0-e6d7-15f0-9570-b9d3f0a27ee7",
"errorMessage": "Данные для передачи на Портал\n\tat portal.process пустой набор данных\n",
"processingStage": 128
}' as message
select JSONExtract(replaceAll(replaceAll(replaceAll(message, '\n', ' '),'\t',' '),'\r',' '), 'Tuple(errorNumber UUID, errorMessage String, processingStage UInt16)') as parsed_str
;
cpu: {'RealTimeMicroseconds':1534,'UserTimeMicroseconds':1327,'SystemTimeMicroseconds':31,'OSCPUWaitMicroseconds':53,'OSCPUVirtualTimeMicroseconds':1356}
починить поломатый JSON на входе - хорошая идея. Что вам в ней не нравится? https://fiddle.clickhouse.com/64a2587b-0a58-42ea-8b2f-30ab1f6237a5
Читать полностью…
исчерпывающий список настроек выглядит как-то так в моём понимании:
Читать полностью…
path: '{{ clickhouse_server_storage_path }}/'
tmp_path: '{{ clickhouse_server_storage_path }}/tmp/'
user_files_path: '{{ clickhouse_server_storage_path }}/user_files/'
user_scripts_path: '{{ clickhouse_server_storage_path }}/user_scripts/'
format_schema_path: '{{ clickhouse_server_storage_path }}/format_schemas/'
user_directories: # users/roles/grants/quotas
local_directory:
path: '{{ clickhouse_server_storage_path }}/access/'
named_collections_storage: # credentials for external resources like S3/PostgreSQL
type: local
path: '{{ clickhouse_server_storage_path }}/named_collections/'
user_defined_path: '{{ clickhouse_server_storage_path }}/user_defined/' # user-defined functions (CREATE FUNCTION)
workload_path: '{{ clickhouse_server_storage_path }}/workload/' # workload definitions (CREATE WORKLOAD, CREATE RESOURCE, ...)
trim(BOTH)
https://clickhouse.com/docs/sql-reference/functions/string-functions#trimboth
Можно объявить storage_policy с именем default, с диском который вам дали, остальное оставить на дефолтах. Метаданные будут по привычному пути /var/lib/clickhouse, но они весят копье. Данные будут на вашем диске. Это удобно, если вы хотите перевытянуть например реплику через флажок force_restore_data, или перевытянуть данные одного диска, чтобы не пересоздавать таблицы. Ну и в принципе в много-дисковых сетапах, если вдруг вам ещё дадут диск плюсом вместо расширения текущего.
Если всё таки будет сильно засирать корень какими то external data или другой времянкой, можно ещё докунуть в конфиг <tmp_policy>default</tmp_policy> вместо <tmp_path>.
Я сделал policies, так всё родное в /var/lib/clickhouse, а нужная база на нужном диске
/etc/clickhouse-server/config.d/storage.xml
<clickhouse>
<storage_configuration>
<disks>
<netflow>
<path>/netflow/</path>
</netflow>
</disks>
<policies>
<netflow>
<volumes>
<netflow>
<disk>netflow</disk>
</netflow>
</volumes>
</netflow>
</policies>
</storage_configuration>
</clickhouse>
Это я думал, но там уже есть что-то после запуска клика. Не упадет ничего?
Читать полностью…
Привет. На КХ-инстансе был создан локальный бекап через clickhouse-backup, затем, при попытке удаления бекапа, по ошибке (вместо clickhouse-backup delete`) была вручную удалена директория бекапа из директории `backup, и теперь имеем ситуацию, когда где-то в файлах данных лежат, как я понимаю, файл зафриженных партишенов, но вручную "отделять котлеты от мух" выглядит задачей нетривиальной. Ну и clickhouse-backup list теперь пуст 🙂
Подскажите, пожалуйста, правильно ли я понимаю, что clickhouse-backup clean - это как раз про мой случай? И оно поможет удалить даже вот такие "поврежденные" бекапы?
В system.query_log запросы к удаленным кластерам шифруются и отображаются как remote(XXXXXX), скрывая потенциальные логины и пароли. Нет ли возможности как-то достать конкретные таблицы, к которым делается запрос внутри remote?
Читать полностью…
rm /var/lib/clickhouse/uuid
+restart
ClickHouse сгенерит новый uuid при старте
Добрый день!
Может, кто-то сталкивался с такими проблемами в ClickHouse:
1. Проблема с чтением JSON
Есть колонка с JSON (вложенные массивы), запрос выдает ошибку
argument 2 is of type dynamic while arraySum expects Array
SELECT *
FROM dev.my_table
WHERE
arraySum(step ->
arrayCount(combination ->
arrayCount(activatedCell ->
arrayExists(reel ->
reel.X = activatedCell.X
AND arrayExists(cell ->
cell.Y = activatedCell.Y
AND cell.Symbol.SymbolCode = 'Hi1',
reel.Cells
),
step.EvaluatedBoard.Reels
),
combination.ActivatedCell
) = 4,
step.WonCombinations
),
SpinJson.Spin.Steps
)
AND arraySum(step -> length(step.WonCombinations), SpinJson.Spin.Steps) = 1
AND FeaturesKey = 'None'
AND GameModeName = 'BaseGame'
AND toDecimal32(WinMultiplier,4) = toDecimal32(0.7,4)
LIMIT 1;
2. Если поменять JSON на JSON Object Type то первая проблема пропадает
Но при вставке JSON через .NET клиент (https://github.com/DarkWanderer/ClickHouse.Client)
ловлю:
System.OutOfMemoryException
JSON весом 40гб
Спасибо заранее за любые советы 🙏
А NOT_FOUND_COLUMN_IN_BLOCK это data corruption же уже?
Читать полностью…
не последний раз, может ещё придётся)
Читать полностью…
Блин, точно, всё хорошо и без преобразования. Идёт из Kafka, я решил проверить заранее, взял json как строку и пытался.
Спасибо!
Да как-то не нравится такое недешёвое преобразование. Replace по каждому большому json как-то не очень
Читать полностью…
Можно отдельно обработать это поле
simpleJSONExtractRaw(message, 'errorMessage')
Это же не поможет, у меня не пробельные символы, мне надо как-то эффективно сделать чтобы \n и \t не мешали
Читать полностью…
Всем привет. Подскажите как можно лучше сделать парсинг json-строки, в которой не экранированы символы переводы строки и табуляции?
Не придумал ничего лучше, чем делать replaceRegexpAll, но не хотелось бы так оставлять, хочется избежать лишних трат CPU на парсинг. Входная строка будет длиннее гораздо, не как в этом примере.
https://fiddle.clickhouse.com/4c6e8841-6782-4a15-b6bc-1c67cac4336f
Спасибо большое. Похоже взлетит. Сейчас гоняю на тестовом окружении - все ок. Всех благ!
Читать полностью…
изменить параметр <path> в конфигурационном файле /etc/clickhouse-server/config.xml или файл в директории config.d
<path>/opt/clickhouse/</path>
если данных нет то и переносить ничего не надо
Вечер!
Code: 376. DB::Exception: Cannot parse uuid : Cannot parse UUID from FixedString(16): while converting column `
Это я пытаюсь прочитать айсберг (поле uuid). Подскажите пожалуйста , а есть ишью, когда в кх добавится поддержка uuid ?
ClickHouse Iceberg/Parquet reader не умеет автоматически парсить binary(16) в UUID?
from type Nullable(FixedString(16)) to type Nullable(UUID)
он не всегда работает, можно по запросу посмотреть логи стектрейсов чтобы понять где именно запрос чем занимался.
Читать полностью…