184 похожих чатов

Добрый день! Подскажите пожалуйста. В источнике условно есть две таблицы master

и detail связанные один ко многим. Мы хотим данные в detail упаковать в массив и положить в одну таблицу с master в Clickhouse. И вот я на распутье какую структуру выбрать: Array Nested (...) или Array(Tuple())?
В первом случае все колонки таблицы detail выглядят как отдельные колонки-массивы. Во втором - это массив кортежей.
Провел разные эксперименты. Объем занимаемого места одинаковый в обоих вариантах, производительность запросов тоже идентична. Способы работы с данными примерно одинаковы. Может есть какие то подводные камни о которых не написано в документации? Какую же структуру все таки выбрать?

10 ответов

16 просмотров

Nested сам по себе массив, его заворачивать в Array не нужно

Берите tuple и не парьтесь, потом проще будет.

Какие могут возникнуть трудности с nested? Я в своё время выбрал его и пока не столкнулся с тем, что tuple был бы проще...

Николай-Новик Автор вопроса
Алексей Фирсов
Берите tuple и не парьтесь, потом проще будет.

Нашел один минус у tuple. Нет возможности изменить структуру, например добавить колонку. В случае с Nested - без проблем alter table add column и новая колонка встраивается в структуру nested. Но думаю это можно обойти созданием новой структуры tuple и миграцией данных из старой.

Николай-Новик Автор вопроса
Alexey Oparin
Какие могут возникнуть трудности с nested? Я в сво...

Алексей, а можно поподробнее, в чем nested оказался сложнее? Мне структура tuple больше по душе. Как то более понятно выглядит. Но вот что скажут архитекторы кликхауза?

Николай Новик
Нашел один минус у tuple. Нет возможности изменить...

В release 23.8 LTS, 2023-08-31 появился tupleConcat https://clickhouse.com/docs/en/sql-reference/functions/tuple-functions

Николай Новик
Алексей, а можно поподробнее, в чем nested оказалс...

Мне просто проще работать с tuple, воспринимаешь его как псевдомассив. А с Nested надо заморачиваться со столбцами, не гибко как то...

Николай Новик
Алексей, а можно поподробнее, в чем nested оказалс...

Для меня nested оказался вполне удобным. В кортеже нужно постоянно высчитывать индексы, а в нестед просто по именам пишу. Плюс у меня нестед вложенные, с вложенными кортежами было бы ну очень трудно разбираться в запросах.

Алексей Фирсов
Мне просто проще работать с tuple, воспринимаешь е...

с нестедом точно так же можно работать как с кортежем. т.е. обращаться к полям по номерам. а вот с кортежем по именам не обратиться.

Николай-Новик Автор вопроса
Alexey Oparin
Для меня nested оказался вполне удобным. В кортеже...

Да, тоже заметил эту особенность. Если в запросе array join добавить алиас к структуре tuple, то потом к элементам этой структуры можно обратиться только по индексу. А если без алиаса, то вполне имена прокатывают. Вот пример: CREATE TABLE default.test_array_tuple_s ( id UInt32, transaction_conduction Array(Tuple( id Int16, name Nullable(String) )) ) ENGINE = MergeTree() ORDER BY id; SELECT transaction_conduction.name FROM test_array_tuple_s; SELECT t.transaction_conduction.2 FROM test_array_tuple_s t;

Похожие вопросы

Обсуждают сегодня

https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Ребят в СИ можно реализовать ООП?
Николай
33
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
core\config\database\connections\default.php На всякий случай проверь всё же файл <?php return [ 'driver' => env('DB_TYPE', 'mysql'), //$database_type 'host' => env('D...
Andrey K
2
Всем доброго вечера. Разрабатываю 32 раз. приложение в Delphi. Столкнулся с тем, что стандартный  TFilestream  не работает с большим файлом > 2 ГБайт (после вызова функции see...
Vadim Gl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
добрый день. Подскажите, есть сайт на 1.4.7 и я хочу обновиться, особо ничего не меняя. мне выбирать версию 1.4.35 или третью ветку? и можно ли обновлять "как есть", или нужно...
Digital Cat
12
народ, плиз хелп, всю голову сломал себе уже... разве может быть так, что GetProcAddress( GetModuleHandle( "kernel32.dll" ), "SetThreadDescription" ) вернёт ненулевое значение...
Iluha Companets
12
Кто кодит под Лазарем на винде, у вас аналогично VCL переопределяются CreateWnd и CreateParams для конкретных классов контролов и все заданные флаги влияют?
А Андрей
11
Карта сайта