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
的字段在每一行上都是空白的。
然后它变得非常有趣:
- 我将
SystemID
字段名称更改为 WTF
,或 foobar
,或 strawberry
,它工作正常 (数据显示)。
- 我将
SystemID
字段名称更改为 _SystemID
、f_SystemID
、ystemID
、System_I_D
和 none 他们工作
从来没有错误消息。
字段名称需要遵循的实际规则是什么?
一般来说,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 中使用大小写混合。全大写全小写都可以。
我尝试在 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
的字段在每一行上都是空白的。
然后它变得非常有趣:
- 我将
SystemID
字段名称更改为WTF
,或foobar
,或strawberry
,它工作正常 (数据显示)。 - 我将
SystemID
字段名称更改为_SystemID
、f_SystemID
、ystemID
、System_I_D
和 none 他们工作
从来没有错误消息。
字段名称需要遵循的实际规则是什么?
一般来说,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 中使用大小写混合。全大写全小写都可以。