我想要一个从字符串映射到嵌套类型的字段:
CREATE TABLE table
(
// Other fields ...
MapColumn Map<String, StructType>
)
例如,我需要有效地进行以下过滤:
WHERE MapColumn['key'].PropertyInt32 > 5
在ClickHouse中执行此操作的最佳方法是什么?
答案 0 :(得分:0)
Map(key, value) 数据类型存储键:值对。
参数
警告
目前地图数据类型是一项实验性功能。使用它 你必须设置allow_experimental_map_type = 1。
要从 Map('key', 'value') 列中获取值,请使用 ['key'] 语法。此查找现在以线性复杂度工作。
示例
考虑表格:
CREATE TABLE table_map (a Map(String, UInt64)) ENGINE=Memory;
INSERT INTO table_map VALUES ({'key1':1, 'key2':10}), ({'key1':2,'key2':20}), ({'key1':3,'key2':30});
选择所有 key2 值:
SELECT a['key2'] FROM table_map;
结果:
┌─arrayElement(a, 'key2')─┐
│ 10 │
│ 20 │
│ 30 │
└─────────────────────────┘
参考链接:https://clickhouse.tech/docs/en/sql-reference/data-types/map/