代码之家  ›  专栏  ›  技术社区  ›  NealWalters

Athena/Glue—解析简单的JSON(但将其视为CSV)

  •  0
  • NealWalters  · 技术社区  · 4 年前

    根据我以前的经验 question 我仍然感到震惊,因为这不是有效的JSON,因为它周围没有方括号。

    {"firstName": "Neal",    "lastName": "Walters", "city": "Irving", "state", "TX"  }
    {"firstName": "Fred",    "lastName": "Flintstone",   "city": "Bedrock",  "state", "TX"}
    {"firstName": "Barney",  "lastName": "Rubble",   "city": "Stillwater",   "state", "OK"}
    

    在运行完GLUE之后,这是我的第一个查询,非常令人失望。

    enter image description here

    CREATE EXTERNAL TABLE `flattb_testflatjson`(
      `col0` string, 
      `col1` string, 
      `col2` string, 
      `col3` string, 
      `col4` string)
    ROW FORMAT DELIMITED 
      FIELDS TERMINATED BY ',' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.mapred.TextInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      's3://relatix/polygonData/history/testflatjson/'
    TBLPROPERTIES (
      'CrawlerSchemaDeserializerVersion'='1.0', 
      'CrawlerSchemaSerializerVersion'='1.0', 
      'UPDATED_BY_CRAWLER'='FlatJsonTestForAthena', 
      'areColumnsQuoted'='false', 
      'averageRecordSize'='83', 
      'classification'='csv', 
      'columnsOrdered'='true', 
      'compressionType'='none', 
      'delimiter'=',', 
      'objectCount'='1', 
      'recordCount'='3', 
      'sizeKey'='255', 
      'typeOfData'='file')
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   Theo    4 年前

    一般来说,Glue很糟糕,但这让我很惊讶,直到我看到Achyut的评论:您的JSON格式不正确。

    JSON是一种数据格式,而不是文件格式。没有格式正确的JSON文件,因为规范没有涵盖这一点。Spark、Hadoop和Athena等工具要求JSON数据位于每行一个文档的文件中,因为这样可以方便地高效地处理数据。有时这被称为“JSON流”(这不是一个好名字,因为我们谈论的是文件),或“行分隔的JSON”。

    我想你最好还是手动创建表。您可以在文档中找到一个示例: https://docs.aws.amazon.com/athena/latest/ug/json-serde.html

    您还应该使用适当的JSON序列化库来编写JSON,这样就不会出现像逗号而不是冒号这样的语法错误。