【发布时间】:2021-12-29 01:36:53
【问题描述】:
我在 Snowflake 中有一个外部表 INV_EXT_TBL(1 个变量列名为“VALUE”),它有 6000 行(每行都是 json 文件)。 json 记录具有双引号作为 dynamo_json 格式。 解析所有 json 文件并将其转换为表格式以运行 sql 查询的最佳方法是什么。我给出了前 3 个 json 文件的示例格式。
"{
""Item"": {
""sortKey"": {
""S"": ""DR-1630507718""
},
""vin"": {
""S"": ""1FMCU9GD2JUA29""
}
}
}"
"{
""Item"": {
""sortKey"": {
""S"": ""affc5dd0875c-1630618108496""
},
},
""vin"": {
""S"": ""SALCH625018""
}
}
}"
"{
""Item"": {
""sortKey"": {
""S"": ""affc5dd0875c-1601078453607""
},
""vin"": {
""S"": ""KL4CB018677""
}
}
}"
我创建了本地表并通过转换数据类型从外部表中插入数据。这是正确的方法还是我应该对 json 文件使用 parse_json 函数将数据存储在本地表中。
insert into DB.SCHEMA.INV_HIST(VIN,SORTKEY)
(SELECT value:Item.vin.S::string AS VIN, value:Item.sortKey.S::string AS SORTKEY FROM INV_EXT_TBL);```
【问题讨论】:
-
您是否有理由不在外部表上使用物化视图?此外,您的数据实际上是否在每个 JSON 记录周围都有双引号?开头和结尾的 * 只是一个堆栈溢出的东西还是你数据的一部分?
-
Mike Walton - 它是从 dynamoDB 导出的,因此它是 dynamo_json 格式,这就是为什么在每个 json 记录周围加上双引号的原因。我将探索外部表上的物化视图。但是现有的方法效率不高?
-
这取决于您在 S3 上的数据是如何更新的。如果您有一些其他系统更新数据并操作各种文件,那么带有 MV 的外部表是使用 Snowflake 的最佳方式。如果您只是将新数据加载到 Snowflake 中,那么您可能需要查看 Snowpipe 到一个表中,然后在它上面有一个 MV 将其展平。
-
另外,我认为您可能需要使用 parse_json 或强制转换为变量以在读取属性时摆脱那些外部双引号。不过,我不明白您所描述的更新和丢失数据的情况。这对我来说没有意义。
-
@MikeWalton,谢谢你,我用外部表上的 MV 方法解决了这个问题。
标签: snowflake-cloud-data-platform snowflake-schema