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

Snowflake中Airbyte同步的Java Document对象转标准JSON方案咨询

Snowflake中Document格式字符串转标准JSON操作方案

Airbyte同步MongoDB数据至Snowflake时,Java侧的Document序列化字符串会被直接存储为文本格式,可通过Snowflake内置的正则替换+JSON解析函数完成转换,操作如下:

转换逻辑说明

原始字符串的固定冗余格式为外层双引号、Document{{开头、}}结尾、键值对用=分隔,我们逐层替换冗余内容后解析为标准JSON(VARIANT类型)即可。

单次转换SQL示例

假设存储Document格式数据的列名为cost,所属表为your_table,转换代码如下:

SELECT 
  PARSE_JSON(
    -- 第四步:将处理完的标准JSON格式字符串解析为Snowflake VARIANT类型,支持直接用JSON路径提取属性
    REGEXP_REPLACE(
      -- 第三步:将所有 键=值 格式替换为 "键": "值"
      REGEXP_REPLACE(
        -- 第二步:将所有 }} 替换为 }
        REGEXP_REPLACE(
          -- 第一步:删除字符串首尾包裹的双引号
          REGEXP_REPLACE(cost, '^"|"$', ''),
          'Document\\{\\{', '{'
        ),
        '\\}\\}','}'
      ),
      '(\\w+)=(\\w*[0-9.]+\\w*|\\w+)', '"\\1": "\\2"'
    )
  ) AS cost_standard_json
FROM your_table;

封装为UDF长期复用

如果需要频繁执行该转换,可封装为自定义函数直接调用:

CREATE OR REPLACE FUNCTION DOCUMENT_STRING_TO_JSON(input_str STRING)
RETURNS VARIANT
LANGUAGE SQL
AS $$
PARSE_JSON(
    REGEXP_REPLACE(
        REGEXP_REPLACE(
            REGEXP_REPLACE(
                REGEXP_REPLACE(input_str, '^"|"$', ''),
                'Document\\{\\{', '{'
            ),
            '\\}\\}','}'
        ),
        '(\\w+)=(\\w*[0-9.]+\\w*|\\w+)', '"\\1": "\\2"'
    )
)
$$;

封装完成后调用方式:

SELECT DOCUMENT_STRING_TO_JSON(cost) AS cost_standard_json FROM your_table;

后续属性提取示例

转换完成后的cost_standard_json为VARIANT类型,可直接用JSON路径语法提取属性,比如提取第一条的USD金额:

SELECT TRY_CAST(cost_standard_json[0]:value::STRING AS NUMBER(18,2)) AS usd_amount
FROM (
  SELECT DOCUMENT_STRING_TO_JSON(cost) AS cost_standard_json FROM your_table
) t;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:13