aws-athena(带jsonserde的presto)在一些列名上悄然失败,哪些是可以接受的?

t98cgbkg  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(443)

我试着在雅典娜创建一个简单的表格:

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 Map很好,但是 SystemID 每行都是空白。
然后它变得非常有趣:
我换了衣服 SystemID 字段名到 WTF ,或 foobar ,或 strawberry ,工作正常(数据显示)。
我换了衣服 SystemID 字段名到 _SystemID , f_SystemID , ystemID , System_I_D ,它们都不起作用
从来没有错误消息。
字段名需要遵循哪些实际规则?

pkmbmrz7

pkmbmrz71#

通常,使用serde进行Map是为了将保留字段名Map到非保留字段名。模式如下:

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;

Map如下所示 timestamp 是保留关键字。
在您的情况下,应该翻转系统标识。另外,我查过Hive手册 System_ID 不是保留关键字。
op update:经过一些额外的实验,我还确定您不能在non\u reserved\u关键字中使用混合大小写。全大写或全小写都可以。

相关问题