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

BigQuery中Shopify order_line表properties字段键值对转列方案咨询

BigQuery 解析Shopify order_line表properties字段解决方案

核心问题说明

FiveTran同步的Shopify properties字段为字符串类型,通常存在多余转义符导致无法直接被JSON函数识别,需要先做格式清洗再解析。

完整查询语句

WITH cleaned_order_line AS (
  SELECT
    order_line_id,
    -- 清洗properties字符串为合法JSON数组:去除多余转义符、首尾多余引号
    SAFE.PARSE_JSON(
      REGEXP_REPLACE(
        REGEXP_REPLACE(properties, r'^"|"$', ''), -- 去除首尾多余的双引号包裹
        r'\\"', '"' -- 替换转义的双引号为正常双引号
      )
    ) AS properties_json
  FROM `你的项目名.你的数据集名.order_line` -- 替换为你自己的表路径
)
SELECT
  order_line_id,
  -- 逐个提取目标字段,不存在则返回NULL
  MAX(IF(prop.name = 'shipping_interval_unit_type', prop.value, NULL)) AS shipping_interval_unit_type,
  MAX(IF(prop.name = 'charge_on_day_of_week', prop.value, NULL)) AS charge_on_day_of_week,
  MAX(IF(prop.name = 'charge_interval_frequency', prop.value, NULL)) AS charge_interval_frequency,
  MAX(IF(prop.name = 'charge_on_day_of_month', prop.value, NULL)) AS charge_on_day_of_month,
  MAX(IF(prop.name = 'subscription_id', prop.value, NULL)) AS subscription_id,
  MAX(IF(prop.name = 'number_charges_until_expiration', prop.value, NULL)) AS number_charges_until_expiration,
  MAX(IF(prop.name = 'shipping_interval_frequency', prop.value, NULL)) AS shipping_interval_frequency
FROM cleaned_order_line,
UNNEST(IFNULL(properties_json, [])) AS prop -- 避免空数组报错
GROUP BY order_line_id

关键逻辑说明

  • 使用SAFE.PARSE_JSON替代直接JSON函数,解析失败时会返回NULL不会中断查询
  • 用REGEXP_REPLACE处理FiveTran同步时产生的多余转义字符,适配Shopify导出的properties格式
  • 采用条件聚合+GROUP BY order_line_id的方式,保证每个order_line_id只输出一行,无需额外JOIN操作
  • 目标字段不存在时自动返回NULL,兼容properties中缺少对应name的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:06:03