【问题标题】:Create athena table with column as unstructured JSON from S3从 S3 创建列作为非结构化 JSON 的 athena 表
【发布时间】:2019-08-01 18:30:53
【问题描述】:

我目前正在创建一个 Athena 表,如下所示:

 CREATE EXTERNAL TABLE `foo_streaming`(
  `type` string, 
  `message` struct<a:string,b:string,c:string>)
PARTITIONED BY ( 
  `dt` string)
ROW FORMAT SERDE 
  'org.apache.hive.hcatalog.data.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://foo/data'

但是,我不想将 message 结构体视为结构化数据,而是将其读取为 JSON blob,因为数据随时可能发生变化。我该如何使用 Athena?

我尝试了以下方法,但它给了我一个错误。我尝试谷歌搜索,但一无所获。

CREATE EXTERNAL TABLE `foo_streaming`(
      `type` string, 
      `message` JSON)
    PARTITIONED BY ( 
      `dt` string)
    ROW FORMAT SERDE 
      'org.apache.hive.hcatalog.data.JsonSerDe' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.mapred.TextInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      's3://foo/data'

来自 S3 的样本数据如下:

{ "type": "GTF", "message": { "a": 1, "b": 2 } }
{ "type": "GTB", "message": { "c": 1, "d": 2, "x": { "testid": "abc" } } }
{ "type": "GTE", "message": { "error_code": 1 } }

【问题讨论】:

  • 你能发布一些示例 JSON 变化记录吗?
  • 嗨@Prabhakar,它看起来像下面这样:{ "type": "GTF", "message": { "a": 1, "b": 2 } } { "type": "GTB", "message": { "c": 1, "d": 2, "x": { "testid": "abc" } } } { "type": "GTE", "message": { "error_code": 1 } }
  • ^^ 消息部分可能每次都不一样。
  • 我尝试在 jsonlint.com 上验证这是否是有效的 JSON,发现它是无效的 JSON 格式。
  • 我发现解决这个问题的唯一方法是重新编写进入 S3 的 JSON,以便每个“类型”生成它自己的唯一名称。感谢大家的帮助。

标签: amazon-athena


【解决方案1】:

使用string 作为类型,然后使用Athena/Presto's JSON functions 从blob 中提取值。

您可以在the documentation for how to query CloudTrail logs with Athena 中查看此解决方案的实际效果。 requestparametersresponseelements 属性是 JSON,但依赖于服务,因此不能用结构来描述。

json 不能用作类型,因为它不是 Hive 识别的类型,它是 Presto 的东西,IIRC。我发现当类型被支持与否时,或者根据它是 DDL 还是 DML(例如 stringvarchar)而被称为不同的东西时,我发现它通常很混乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 2019-03-23
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2018-10-14
    • 2022-07-05
    • 1970-01-01
    相关资源
    最近更新 更多