【问题标题】:Parse data in bigquery using split or regex使用 split 或 regex 解析 bigquery 中的数据
【发布时间】:2021-08-12 01:53:36
【问题描述】:

我在platforminfo列有这种数据

[{'df': {}, 'badKs': ['+81312277629'], 'objectId': 'JoF3NUHVYxDAoirH4e6i3g','平台':'Web'},{'df':{},'badKs': ['+81312277629'], 'objectId': '-vfa995e3b5d384b7dbfd8919bad17c28a', '平台':'iOS','os_version':'14.1','app_version':'3.16.2', 'make': 'Apple', 'model': 'iPhone12,3'}]

[{'df': {}, 'objectId': 'elQ8JEW2klEQFMZ0vXZDhw', 'platform': 'Web', '电话':5370002731},{'df':{},'objectId': '__da533f19d1e040bea2b2b58fa6d2ecad','平台':'Android','手机': 5370002731,“os_version”:“10”,“app_version”:“3.6.4”,“make”: '三星','型号':'SM-A605G'}]

我想要的是将这些数据解析成多列,但实际上定义相同但命名不同 badKs=phone

我的期望是这样的:

phone         platform  os_version  make 
+81312277629  iOS       14.1        Apple
5370002731    Android   10          Samsung

我已经处理过这个查询

split(REGEXP_REPLACE(platforminfo, r'([\{\}\]\'\"])', ''), 'phone:')[SAFE_OFFSET(ARRAY_LENGTH(SPLIT(platforminfo, ']')) - 1)] end

然而,这个查询不足以解析数据,如果你能在这个案例上帮助我,将会很有帮助。谢谢

【问题讨论】:

    标签: sql regex split google-bigquery


    【解决方案1】:

    使用下面的方法

    select 
      translate(coalesce(json_extract(el[offset(0)], '$.badKs'), json_extract(el[offset(0)], '$.phone')), "[]\"", "") as phone,
      json_extract_scalar(el[offset(1)], '$.platform') as platform,
      json_extract_scalar(el[offset(1)], '$.os_version') as os_version,
      json_extract_scalar(el[offset(1)], '$.make') as make
    from `project.dataset.table`, unnest([struct(json_extract_array(platforminfo, '$') as el)])    
    

    如果应用于您问题中的样本数据 - 输出是

    【讨论】:

    • 谢谢它的工作!但不知何故,我试图使用相同的方法来提取另一列,但它不起作用。 json_extract 有什么特殊用途吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2017-05-04
    • 2012-05-16
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多