在雪花中展平可变长度 JSON
Posted
技术标签:
【中文标题】在雪花中展平可变长度 JSON【英文标题】:Flatten variable length JSON in Snowflake 【发布时间】:2021-12-18 00:06:29 【问题描述】:我有一个 JSON,其中某些记录的某些属性为空,而某些记录具有所有键值对。当我尝试使用横向展平来展平雪花中的 JSON 时,我会丢失某些属性为空或 JSON 记录中不存在的记录。下面是我拥有的 JSON 示例。
1)
"course":
"className": "CAPSTONE RESEARCH PROJECT",
"courseType": "LECTURE",
"crn": 11223,
"crossListedCourses": [
"className": "CAPSTONE RESEARCH PROJECT",
"courseType": "LECTURE",
"crn": 11230,
"lmsCourseID": "202110_FALL_SOC436_11230",
"partialTermCode": 1,
"subject": "SOC",
"subjectCode": "436",
"term": "202110"
]
'
2)'
"course":
"className": "LALA LAND",
"courseType": "LECTURE",
"crn": 11224,
"crossListedCourses": [
"className": "LALA LAND",
"courseType": "LECTURE",
"crn": 11231,
"lmsCourseID": "202110_FALL_SOC436_11231",
"partialTermCode": 2,
"subject": "SOC",
"subjectCode": "437",
"term": "202110"
]
'
3) '
"course":
"className": "ZOMBIE LAND",
"courseType": "LECTURE",
"crn": 11225
'
当横向展平成一个新表时,我使用以下查询丢失了第三条记录
SELECT
json_string:course.className,
json_string:course.courseType,
json_string:course.crn,
json_string:crossListedCourses,
prod.value:className,
prod.value:courseType,
prod.value:crn,
prod.value:lmsCourseID,
prod.value:partialTermCode,
prod.value:subject,
prod.value:subjectCode,
prod.value:term
FROM variant_example, (LATERAL FLATTEN (input => json_string:course.crossListedCourses)) as
prod
【问题讨论】:
【参考方案1】:FLATTEN - OUTER:
如果为 TRUE,则为零行扩展生成一行(在 KEY、INDEX 和 VALUE 列中为 NULL)。
默认值:假
FROM variant_example
,(LATERAL FLATTEN (input => json_string:course.crossListedCourses, OUTER => TRUE))..
【讨论】:
以上是关于在雪花中展平可变长度 JSON的主要内容,如果未能解决你的问题,请参考以下文章