跳到主要内容

Map

概览

MAP(K, V)ARRAY(TUPLE(key, value)) 存储键值对。键类型 K 需在建表时声明(布尔、数值、字符串、日期或时间戳等),必须非 NULL 且唯一;值类型 V 可为任意类型。字面量可写为 {key: value},也可使用 MAP(keys, values) 函数将两个数组合并。

SELECT
{'k1': 1, 'k2': 2} AS literal_map,
MAP(['x', 'y'], [10, 20]) AS from_arrays;

结果:

┌───────────────────────┬──────────────────┐
│ literal_map │ from_arrays │
├───────────────────────┼──────────────────┤
│ {'k1':1,'k2':2} │ {'x':10,'y':20} │
└───────────────────────┴──────────────────┘

示例

创建并查询

CREATE TABLE web_traffic_data (
id INT64,
traffic_info MAP(STRING, STRING)
);

INSERT INTO web_traffic_data VALUES
(1, {'ip': '192.168.1.1', 'url': 'example.com/home'}),
(2, {'ip': '192.168.1.2', 'url': 'example.com/about'}),
(3, {'ip': '192.168.1.1', 'url': 'example.com/contact'});

SELECT
id,
traffic_info['ip'] AS ip_address,
traffic_info['url'] AS url
FROM web_traffic_data
ORDER BY id;

结果:

┌────┬─────────────┬───────────────────────┐
│ id │ ip_address │ url │
├────┼─────────────┼───────────────────────┤
│ 1 │ 192.168.1.1 │ example.com/home │
│ 2 │ 192.168.1.2 │ example.com/about │
│ 3 │ 192.168.1.1 │ example.com/contact │
└────┴─────────────┴───────────────────────┘
SELECT
traffic_info['ip'] AS ip_address,
COUNT(*) AS visits
FROM web_traffic_data
GROUP BY traffic_info['ip']
ORDER BY visits DESC;

结果:

┌─────────────┬────────┐
│ ip_address │ visits │
├─────────────┼────────┤
│ 192.168.1.1 │ 2 │
│ 192.168.1.2 │ 1 │
└─────────────┴────────┘

布隆过滤器索引

支持的值类型(数值、字符串、时间戳、日期)的 MAP 列会自动维护布隆过滤器,加速基于 map['key'] 的过滤。

CREATE TABLE nginx_log (
id INT,
log MAP(STRING, STRING)
);

INSERT INTO nginx_log VALUES
(1, {'ip': '205.91.162.148', 'url': 'test-1'}),
(2, {'ip': '205.91.162.141', 'url': 'test-2'});
SELECT * FROM nginx_log WHERE log['ip'] = '205.91.162.148';

结果:

┌────┬─────────────────────────────────────────┐
│ id │ log │
├────┼─────────────────────────────────────────┤
│ 1 │ {'ip':'205.91.162.148','url':'test-1'} │
└────┴─────────────────────────────────────────┘
SELECT * FROM nginx_log WHERE log['ip'] = '205.91.162.200';

结果:

┌────┬────┐
│ id │ log │
├────┼────┤
└────┴────┘
欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验