如何在 JSON 中分解多个列表值 JSON,并在 Snowflake 中横向展平?

问题描述

我有一个包含 24 个 JSON 的变体表,如下所示(每行一个):

{
  "context": "marketplace","metadata": {
    "app_version": "1.0.4 (166)",},"params": {
    "filter": {
      "brands": [],"categories": [
        "f28c7c9f-09ae-4218-821a-bec344998289"
      ],"manufacturers": [],"page": 1,"product_name": "","page": "product_list","results": 3
  },"user_id": "6443a2db-4526-4fc5-8084-290fc78e5336"
}

我希望所有东西都成排爆炸。我已经设法拥有所有东西,但可以根据需要使用代码进行过滤:

SELECT data:event::string,data:user_id::string,data:metadata.app_version::string,data:context::string,data:params.page::string,data:params.filter.page::string,data:params.results::string
FROM ods.stg_tanimis_events

列表品牌、类别和制造商可以为空,但如果是这种情况,我需要一个空值。我想要一个包含以下列的表格:

event,user_id,app_version,context,param_page,filter_page,results,manufacturer,brand,category

我尝试了几次横向展平但没有成功:

select * FROM table,lateral flatten (data:params:filter:categories) j2;

select * FROM table,lateral flatten (data:params:filter.brands) j1

select * FROM table,lateral flatten (data:params:filter:brands) j1,lateral flatten (data:params:filter:categories) j2;

select user_id,filter,flat.*
from table,lateral flatten(parse_json(filter)) flat;


WITH j as (
SELECT *
FROM table,lateral flatten(data:params:filter))

SELECT *
from j,lateral flatten (j.value) j2;

无论哪种方式,我都会得到 8 行或 0 行,或错误。我怎么能做到?谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)