如何在 Snowflake 中将 json 转换为表格格式

Posted

技术标签:

【中文标题】如何在 Snowflake 中将 json 转换为表格格式【英文标题】:How to convert json to table format in Snowflake 【发布时间】: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 方法解决了这个问题。 【参考方案1】:

我通过在外部表的变体列上使用强制转换来创建物化视图来解决此问题。这有助于摆脱外部双引号,性能提高了多倍。我没有使用表创建方法取得进展。

CREATE OR REPLACE MATERIALIZED VIEW DB.SCHEMA.MVW_INV_HIST 
AS 
SELECT value:Item.vin.S::string AS VIN, value:Item.sortKey.S::string AS SORTKEY 
FROM DB.SCHEMA.INV_HIST;

【讨论】:

以上是关于如何在 Snowflake 中将 json 转换为表格格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在雪花中将时间戳转换为日期

如何在 Xcode 中将 JSON 数组转换为数组?

如何在python中将json转换为csv?

如何在 Ruby 中将 JSON 转换为 XML?

如何在python中将JSON转换为数据框

在 Django 中将 QuerySet 转换为 JSON