开发者社区 > 大数据与机器学习 > 实时数仓 Hologres > 正文

想实现mc的get_json_object之类功能 在hologres里面查不出来呀?

lQLPJwFU6IWHsKfM4M0ETLDIAgiNDfaA1gaoSsF-occA_1100_224.pnglQLPKG-dz_wZTqfNA7bNA0SwxxkiI4BEPEQGqErsA3mkAA_836_950.png这样都是正常的我只是想实现mc的get_json_object之类的功能
mc里面等价的是这个 在holo里面查不出来呀iwEcAqNwbmcDAQTRCFgF0QMaBrCdHy58Jqs_QwaoS8BhCAIAB9Ic842yCAAJomltCgAL0gAEiVo.png_720x720q90.jpg 这种是什么情况呢

展开
收起
防火防爆 2024-08-18 17:09:09 53 0
2 条回答
写回答
取消 提交回答
  • c7abc3c32565c87946d43b4cb26c3c1d.png
    这个报错是说JSON有非法字符 不要直接::jsonb。此回答整理自钉钉群“实时数仓Hologres交流群”

    2024-08-28 11:28:25
    赞同 展开评论 打赏
  • 技术浪潮涌向前,学习脚步永绵绵。

    如果您希望在 Hologres 中实现类似于 MySQL 的 GET_JSON_OBJECT 这样的功能来处理 JSON 数据,Hologres 提供了一些内置的 JSON 函数来帮助您完成这项工作。这些函数可以让您轻松地从 JSON 字符串中提取数据。

    Hologres 中处理 JSON 数据

    在 Hologres 中,您可以使用 jsonb_extract_path_textjsonb_extract_path 函数来从 JSON 字符串中提取值。这两个函数都非常有用,尤其是当您需要从嵌套的 JSON 数据中提取特定字段时。

    1. jsonb_extract_path_text

    此函数用于从 JSONB 类型的列中提取单个值,并返回文本形式的结果。

    语法:

    SELECT jsonb_extract_path_text(json_column, 'path', 'to', 'value');
    

    示例:
    假设您有一个名为 orders 的表,其中包含一个名为 details 的 JSONB 列,如下所示:

    CREATE TABLE orders (
      id INT PRIMARY KEY,
      details JSONB
    );
    
    INSERT INTO orders (id, details) VALUES
    (1, '{"product": "laptop", "price": 1200, "quantity": 2}'),
    (2, '{"product": "keyboard", "price": 100, "quantity": 1}');
    

    如果要从 details 列中提取 product 的值,可以使用以下 SQL 查询:

    SELECT id, jsonb_extract_path_text(details, 'product') AS product
    FROM orders;
    

    2. jsonb_extract_path

    此函数也用于从 JSONB 类型的列中提取值,但它返回的是 JSON 形式的值。

    语法:

    SELECT jsonb_extract_path(json_column, 'path', 'to', 'value');
    

    示例:
    如果您想要以 JSON 格式返回 details 列中的 product 字段,可以使用以下查询:

    SELECT id, jsonb_extract_path(details, 'product') AS product
    FROM orders;
    

    示例代码

    让我们通过一个具体的例子来看一下如何使用这些函数:

    -- 创建表
    CREATE TABLE orders (
      id INT PRIMARY KEY,
      details JSONB
    );
    
    -- 插入数据
    INSERT INTO orders (id, details) VALUES
    (1, '{"product": "laptop", "price": 1200, "quantity": 2}'),
    (2, '{"product": "keyboard", "price": 100, "quantity": 1}');
    
    -- 使用 jsonb_extract_path_text 获取文本结果
    SELECT id, jsonb_extract_path_text(details, 'product') AS product
    FROM orders;
    
    -- 使用 jsonb_extract_path 获取 JSON 结果
    SELECT id, jsonb_extract_path(details, 'product') AS product
    FROM orders;
    

    注意事项

    • 确保您的 JSON 数据是有效的 JSONB 类型。
    • 如果 JSON 路径不存在,jsonb_extract_path_text 将返回 NULL,而 jsonb_extract_path 将返回一个空 JSON 对象 {}
    • 当处理复杂的 JSON 数据结构时,请确保路径正确无误。

    通过上述方法,您应该可以在 Hologres 中实现类似 GET_JSON_OBJECT 的功能来处理 JSON 数据。如果您有更复杂的需求,例如处理数组或更深层级的嵌套数据,可以继续使用 Hologres 提供的其他 JSON 函数。

    2024-08-18 17:25:35
    赞同 11 展开评论 打赏

本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975

相关产品

  • 实时数仓 Hologres
  • 相关电子书

    更多
    实时数仓Workshop(广州站)- 李佳林 立即下载
    阿里云实时数仓Hologres技术揭秘2.0 立即下载
    实时数仓Hologres技术实战一本通2.0版(下) 立即下载