sql - 带有 ORDER BY 的雪花 JSON 扁平化
问题描述
我有一个工作查询将嵌套的 JSON 对象展平为数据行。但是,我想做的是保留嵌套了几层的一组对象的原始顺序。
我曾尝试ROW_NUMBER
与 anORDER BY NULL
和 an一起使用ORDER BY (SELECT NULL)
,但似乎都没有保留顺序。
关于如何做到这一点的任何想法?下面的例子。我选择屏蔽真实数据,但结构的重要部分是相同的。JSON 格式的数据没有等级识别信息,但我在这里使用数字作为示例来显示奇怪的结果。
原始结构(屏蔽):
{
"topNode: {
"childNode": {
"list": [
{
"title": "example title 1",
},
{
"title": "example title 2",
},
{
"title": "example title 3",
},
{
"title": "example title 4",
},
{
"title": "example title 5",
}
]
}
}
}
示例查询(屏蔽):
SELECT
A.VALUE:"title"::VARCHAR AS "TITLE",
ROW_NUMBER() OVER(ORDER BY NULL) AS RANK
FROM
DB.SCHEMA.TABLE as A,
lateral flatten(input=>A.JSON:topNode.childNode.list) "list_flatten"
示例输出:
TITLE RANK
"example title 3" 1
"example title 5" 2
"example title 2" 3
"example title 1" 4
"example title 4" 5
解决方案
可以使用INDEX
,它返回数组中元素的索引:
SELECT A.VALUE:"title"::VARCHAR AS "TITLE",
"list_flatten".index AS "RANK"
FROM DB.SCHEMA.TABLE as A,
lateral flatten(input=>A.JSON:topNode.childNode.list) "list_flatten"
推荐阅读
- kubernetes - 谁创建了命名空间?
- mathematical-optimization - 使用 CP Optimizer 时 CPLEX 内存不足
- css - 我们是否需要将 scss 编译为 css - React
- node.js - 页面未显示 - 无法获取/存储 EJS 问题
- octobercms - October CMS: Custom Plugin - 从组件中引用当前 RainLab.Blog 帖子
- spring - DropDown List 未在 Spring Boot Mysql 中填充数据
- php - 尝试在 null 上分配属性“referer_uid”
- php - 如何使用laravel过滤所有人的记录?
- python - 从 Pandas df 和 Type Error unhashable type 中绘制集合:'set'
- android - 如何使用云功能删除 Firestore 集合