You need to enable JavaScript to run this app.
导航
JSONB 类型
最近更新时间:2025.05.28 10:28:22首次发布时间:2025.05.28 10:28:22
我的收藏
有用
有用
无用
无用

本文将介绍 ByteHouse 中 JSONB 数据类型的语法和使用方法。

背景信息

JSONB 数据类型用于储存 Binary 格式的数据,支持高效查询和索引,相比文本格式 JSON 具有更高的处理性能,适用于存储半结构化数据(如用户行为日志、配置信息等)。

语法

建表

CREATE TABLE t_jsonb
{
    id INT,
    data JSONB
}
ENGINE = CnchMergeTree
ORDER BY tuple();

查询

使用函数提取特定类型值

ByteHouse 支持提取 JSONB、String、Int64、Float64、Bool 等类型的值。类型匹配时,将返回对应类型的值,否则返回该类型对应的默认值。

  • 提取 JSONB 类型
    类型匹配时,将返回对应类型的值,否则返回该类型对应的默认值。

    SELECT 
        jsonb_extract('{"a":1, "b":2}'::JSONB, '$.a') AS a,
    FROM t_jsonb; 
    
  • 提取 String 类型
    类型匹配时,将返回对应类型的值,否则返回该类型对应的默认值空字符串。

    SELECT 
        jsonb_extract_string('{"a":"test", "b":2}'::JSONB, '$.a') AS a,b
    FROM t_jsonb; 
    
  • 提取 Int64 类型
    类型匹配时,将返回对应类型的值,否则返回该类型对应的默认值 0。

    SELECT 
        jsonb_extract_int64('{"a":1, "b":2}'::JSONB, '$.a')
    FROM t_jsonb; 
    
  • 提取 Float64 类型
    类型匹配时,将返回对应类型的值,否则返回该类型对应的默认值 0.0。

    SELECT 
        jsonb_extract_float64('{"a":1.0, "b":2}'::JSONB, '$.a')
    FROM t_jsonb;
    
  • 提取 Bool 类型
    类型匹配时,将返回对应类型的值,否则返回该类型对应的默认值 false。

    SELECT 
        jsonb_extract_bool('{"a":true, "b":2}'::JSONB, '$.a')
    FROM t_jsonb; 
    

JSONB 合并

ByteHouse 支持合并两个 JSONB 对象,并返回合并后的 JSONB,如果两者中有重复的 key,则右边对象覆盖左边对象。

SELECT 
    jsonb_merge_patch('{"a":true, "b":2}'::JSONB, '{"c":3}'::JSONB)
FROM t_jsonb;