Выбор структуры таблицы

118 views
Skip to first unread message

Александр Сергеев

unread,
Jan 20, 2018, 8:18:12 AM1/20/18
to ClickHouse
Добрый день!

Имею вот такую структуру данных:
    "mac":"10BF487FE7CC",
    "processor_list":
    [
        {
            "Vendor":"GenuineIntel",
            "Name":"Intel(R) Core(TM) i5-3450 CPU @ 3.10GHz",
            "Socket":"LGA1155",
            "Id":"BFEBFBFF000306A9",
            "CoreCount":"4",
            "CurrentClockSpeed":"3101",
            "LoadPercentage":"15"
        }
    ],
    "gpu_list":
    [
        {
            "Vendor":"NVIDIA",
            "Name":"NVIDIA GeForce GT 610",
            "DriverVersion":"23.21.13.8813",
            "DriverDate":"20171027000000.000000-000",
            "MemoryVolume":"1024",
            "Temperature":"45",
            "CoreClock":"810,0001",
            "MemoryClock":"601,363",
            "ShaderClock":"1620",
            "Fan":"60"
        }
    ],
    "hdd_list":
    [
        {
            "Model":"ST250DM000-1BD141 ATA Device",
            "Size":"250056737280"
        },
        {
            "Model":"ST3500630AS ATA Device",
            "Size":"500105249280"
        },
        {
            "Model":"PLEXTOR PX-128S3C ATA Device",
            "Size":"128034708480"
        }
    ],

Количество массивов в *_list может быть произвольным, параметров в массиве тоже может произвольно. 
Самих массивов и параметров в принципе не так много -- до 20 штук максимум на запись.

Подскажите как разумнее сделать таблицу для этого? 
Планировал сделать вложенные массивы, но в документации не рекомендуют.

Николай Кочетов

unread,
Jan 22, 2018, 7:05:49 AM1/22/18
to ClickHouse
Добрый день!

Если я правильно понял, в структуре встречаются массивы вида *list, содержащие словари определенной структуры. Если структура словарей действительно фиксирована, то, вероятно, самое правильное решение - записывать их в виде Array(Tuple(...)). Например, hdd_list можно было бы представить как Array(Tuple(String, UInt64)).

Если структура не фиксирована, то можно использовать и многомерные массивы строк.
Работа с многомерными массивами можно, но это может быть менее эффективно. Поддержка хранения многомерных массивио в MergeTree была добавлена недавно, поэтому может быть не вполне стабильной.

суббота, 20 января 2018 г., 16:18:12 UTC+3 пользователь Александр Сергеев написал:

Александр Сергеев

unread,
Jan 22, 2018, 3:40:28 PM1/22/18
to ClickHouse
Спасибо! 
Примерно в эту сторону и думал. 
Есть еще вариант сделать отдельные таблицы для *_list c не фиксированной структурой.  И доп. запросом потом доставать данные. Они не всегда нужны для основной логики.

понедельник, 22 января 2018 г., 15:05:49 UTC+3 пользователь Николай Кочетов написал:
Reply all
Reply to author
Forward
0 new messages