【问题标题】:Is it possible to remove certain characters in a particular column while creating an Athena table?创建 Athena 表时是否可以删除特定列中的某些字符?
【发布时间】:2023-04-10 07:14:01
【问题描述】:

我想删除列中某些不必要的字符,以便将数据拆分为数组。
原始数据是这样的json格式:

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

我想将listL 属性解析为像[N09jk, KLpp1] 这样的数组。
但是考虑到当前格式,它将整个字符串作为一个元素,如下所示:

[["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');

【问题讨论】:

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


    【解决方案1】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多