You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SingleStore(MemSQL)中使用JSON_TO_ARRAY扁平化JSON数组?

嵌套JSON数组扁平化实现方案

要把source表中嵌套的JSON数组展开成结构化的dest表,核心是先定位到目标数组,再将数组拆分为单独行,最后提取字段。以下是不同SQL引擎的具体实现:

Hive SQL 实现

CREATE TABLE dest AS
SELECT
    -- 从数组元素中提取title字段
    get_json_object(row_element, '$.title') AS title,
    -- 提取count字段并转为数值类型(可选,根据需求调整)
    cast(get_json_object(row_element, '$.count') AS int) AS count
FROM
    source
-- 先取出results.rows的JSON字符串,转成数组后炸开
LATERAL VIEW EXPLODE(JSON_TO_ARRAY(get_json_object(data, '$.results.rows'))) exploded_rows AS row_element;

步骤说明:

  1. get_json_object(data, '$.results.rows'):从data字段中提取results下的rows数组JSON字符串
  2. JSON_TO_ARRAY(...):将JSON字符串转换为Hive可识别的数组类型
  3. LATERAL VIEW EXPLODE(...):把数组的每个元素拆分成独立的行
  4. 最后从每个数组元素中提取title和count,并按需转换类型

Spark SQL 实现

如果用Spark SQL,也可以用更简洁的写法:

CREATE TABLE dest AS
SELECT
    title,
    count
FROM
    source,
    -- 直接解析数组为结构体并展开
    inline(from_json(get_json_object(data, '$.results.rows'), 'array<struct<title:string,count:int>>'));

MySQL 实现

MySQL用JSON_TABLE函数直接解析数组:

CREATE TABLE dest AS
SELECT
    j.title,
    j.count
FROM
    source,
    JSON_TABLE(
        source.data,
        '$.results.rows[*]' COLUMNS(
            title VARCHAR(255) PATH '$.title',
            count INT PATH '$.count'
        )
    ) AS j;

注意事项:

  • 确保source表的data字段JSON格式合法,无语法错误
  • 根据实际使用的SQL引擎调整函数,部分引擎的JSON函数命名可能不同(比如有的用json_extract替代get_json_object)
  • 如果count需要数值运算,记得将提取出的字符串转为对应数值类型

内容的提问来源于stack exchange,提问作者star67

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:02:22