snowflake-cloud-data-platform - 对跨标准和变体类型列的查询执行聚合函数
问题描述
我希望利用雪花中的变体功能。我是雪花的新手,从文档中看不到它是否支持我想做的事情。我想对一个表执行查询,在该表中我对具有标准类型(varchar、int ... ...)和从变量列中提取的值的列进行聚合(分组)。我的变体列将存储一组对象,如下所示:
{ "container": [
{
"param1": "value1a",
"param2": "value2a",
"param3": "value3a"
},
{
"param1": "value1b",
"param2": "value2b",
"param3": "value3b"
},
{
"param1": "value1c",
"param2": "value2c",
"param3": "value3c"
}
]
}
在传统的 sql 模式中显示我正在尝试做的事情让我们说我有一个 1:n 的关系,其中容器是许多具有 fk(parent_id)的孩子,以指定 rel(对父母说)。这是我尝试在传统 sql/关系模型中表示的变体列上编写的一种查询:
SELECT P.column1, P.column2, C.param1, C.param2
FROM parent P
INNER JOIN Child c ON c.parent_id = p.id
GROUP BY 1, 2, 3
解决方案
您将需要使用FLATTEN命令来访问对象的各个部分。
container
因此,要访问您将使用的三个参数
WITH input_tab AS (
select PARSE_JSON('{ "container": [ { "param1": "value1a", "param2": "value2a", "param3": "value3a" }, { "param1": "value1b", "param2": "value2b", "param3": "value3b" }, { "param1": "value1c", "param2": "value2c", "param3": "value3c" }]}') as json
)
SELECT f.value:param1,
f.value:param2,
f.value:param3
--,f.* -- here so you can see the other parts.
FROM input_tab AS i,
TABLE(flatten(input => i.json, path => 'container')) f;
给予:
F.VALUE:PARAM1 F.VALUE:PARAM2 F.VALUE:PARAM3
"value1a" "value2a" "value3a"
"value1b" "value2b" "value3b"
"value1c" "value2c" "value3c"
您需要使用 TRY_TO_x 或 AS_x 转换函数将其解析为类型数据。
推荐阅读
- javascript - 如何创建移动导航栏 CSS HTML?
- android - 在 IOS 的情况下使用框架阴影效果显示,但在 xamarin 中的 UWP 项目的情况下不使用
- powershell - Jenkinsfile Powershell - 从一个会话到另一个会话的变量?
- javascript - create-react-app 中如何导入自制模块?
- orchardcms - 有没有办法在放置和渲染发生之前改变 Orchard 内容形状的显示类型?
- html - 为我的网站制作简单的图像滑块
- templates - 模板中除最后一项之外的所有内容的 Wagtail 基本菜单分隔符
- kubernetes - 由于 GCP 服务帐户,Pod 在 Kubernetes 中获得了 CrashLoopBackOff
- sql-server - 计数日的 T-SQL 脚本
- python - 如何使对象在 tkinter 中不断移动