我试着在雅典娜创建一个简单的表格:
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
,它们都不起作用
从来没有错误消息。
字段名需要遵循哪些实际规则?
1条答案
按热度按时间pkmbmrz71#
通常,使用serde进行Map是为了将保留字段名Map到非保留字段名。模式如下:
github的示例:
Map如下所示
timestamp
是保留关键字。在您的情况下,应该翻转系统标识。另外,我查过Hive手册
System_ID
不是保留关键字。op update:经过一些额外的实验,我还确定您不能在non\u reserved\u关键字中使用混合大小写。全大写或全小写都可以。