【问题标题】:AWS Athena (Presto with JsonSerde) fails quietly on some Column Names, which ones are acceptable?AWS Athena(Presto with JsonSerde)在某些列名上悄悄失败,哪些是可以接受的?
【发布时间】:2018-05-16 07:46:46
【问题描述】:

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

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 字段名称更改为_SystemIDf_SystemIDystemIDSystem_I_D,并且它们都不起作用

永远不会出现错误消息。

字段名称需要遵循哪些实际规则?

【问题讨论】:

    标签: hive presto amazon-athena


    【解决方案1】:

    一般来说,使用 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 是保留关键字。

    对你来说,case System_ID 应该被翻转。另外,我检查了Hive manualSystem_ID 不是保留关键字。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2011-10-16
      • 2012-01-23
      • 1970-01-01
      • 2015-02-14
      • 2019-02-17
      相关资源
      最近更新 更多