ClickHouse是否支持地图字段?

时间:2020-07-09 10:07:46

标签: clickhouse

我想要一个从字符串映射到嵌套类型的字段:

CREATE TABLE table
(
    // Other fields ...

    MapColumn  Map<String, StructType>
)

例如,我需要有效地进行以下过滤:

WHERE MapColumn['key'].PropertyInt32 > 5

在ClickHouse中执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

Map(key, value) 数据类型存储键:值对。

参数

  • 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/