【问题标题】:Does ClickHouse support map fields?ClickHouse 是否支持地图字段?
【发布时间】:2020-07-09 10:07:46
【问题描述】:

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

CREATE TABLE table
(
    // Other fields ...

    MapColumn  Map<String, StructType>
)

例如,我需要高效地做以下过滤:

WHERE MapColumn['key'].PropertyInt32 > 5

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

【问题讨论】:

标签: clickhouse


【解决方案1】:

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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多