创建Athena表时是否可以删除特定列中的某些字符?

时间:2019-08-07 18:50:14

标签: sql amazon-web-services amazon-athena

我想删除列中某些不必要的字符,以便可以将数据拆分为数组。
原始数据采用json格式,如下所示:

{
    "id":"xyz",  
    "listL":"[\"N09jk\",\"KLpp1\"]",  
    "timestamp":"2019-01-04 05:33:02",  
}

我想将listL属性解析为类似于[N09jk, KLpp1]的数组。
但是,考虑到当前格式,它将整个String作为一个元素,如下所示:

[["N09jk","KLpp1"]]  

我想知道在解析文件时将字符[ , ]"删除然后拆分为数组是否可行。

我的创建表查询是:

CREATE EXTERNAL TABLE IF NOT EXISTS db.table (  
  \`id\` string,  
  \`listL\` array<string>,  
  \`timestamp\` timestamp   
)  
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'  
WITH SERDEPROPERTIES (  
  'serialization.format' = '1'  
) LOCATION 's3://path/'  
TBLPROPERTIES ('has_encrypted_data'='false');

1 个答案:

答案 0 :(得分:0)

使用列listL作为string创建表,并在查询过程中使用json_parse将其解析为数组:

SELECT
  id,
  json_parse(listL) as listL,
  timestamp
FROM table

您还可以创建一个视图,这样就不必在每个查询中都包含json_parse

CREATE VIEW table_with_list AS
SELECT
  id,
  json_parse(listL) as listL,
  timestamp
FROM table