AWS Athena(带有 JsonSerde 的 Presto)在某些列名称上悄悄失败,哪些是可以接受的?

AWS Athena (Presto with JsonSerde) fails quietly on some Column Names, which ones are acceptable?

我尝试在 Athena 中创建这个简单的 table:

CREATE EXTERNAL TABLE ctc.rets (
  `SystemID` string,
  `blah` string
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'mapping.SystemID' = 'L_ListingID',
  'mapping.blah' = 'Ext_Char10_11' 
) 
LOCATION 's3://xyz.bucket/mydata/'
TBLPROPERTIES ('has_encrypted_data'='false');

名为 blah 的字段映射正常,但名为 SystemID 的字段在每一行上都是空白的。

然后它变得非常有趣:

从来没有错误消息。

字段名称需要遵循的实际规则是什么?

一般来说,SerDe映射是为了将保留字段名映射到非保留字段名。模式如下:

WITH SERDEPROPERTIES (
  'mapping.NON_RESERVED_KEYWORD' = 'RESERVED_KEYWORD'
)

来自 github 的真实示例:

CREATE TABLE mytable (
    myfield string, ts string
) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( "mapping.ts" = "timestamp" )
STORED AS TEXTFILE;

映射完成,因为 timestamp 是保留关键字。

你的情况System_ID应该翻转。另外,我检查了 Hive manual 并且 System_ID 不是保留关键字。

OP 更新: 经过一些额外的实验,我还确定你不能在 NON_RESERVED_KEYWORD 中使用大小写混合。全大写全小写都可以。