【问题标题】:Error when creating external table in AWS Athena在 AWS Athena 中创建外部表时出错
【发布时间】:2021-03-27 07:15:06
【问题描述】:

尝试在 AWS Athena 中创建外部表时出现以下错误:

line 1:8: no viable alternative at input 'create external' (service: amazonathena; status code: 400; error code: invalidrequestexception

我用来创建表的代码如下。它基于现有的 Athena 表。我使用SHOW CREATE 获取DDL 代码。

CREATE EXTERNAL TABLE h_test(
  test string
)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '#' 
  MAP KEYS TERMINATED BY 'undefined' 
WITH SERDEPROPERTIES ( 
  'collection.delim'='undefined') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://cleverea-staging/test/'
TBLPROPERTIES (
  'has_encrypted_data'='false')

【问题讨论】:

    标签: amazon-web-services amazon-athena


    【解决方案1】:

    我不确定从 AWS Athena 中的一个表中获取 HiveQL DDL 语句并重用它来创建另一个表是否是个好主意。有多个参数不需要或专门应用于该表。

    大多数时候不需要参数OUTPUTFORMATTBLPROPERTIES。例如,如果您的 S3 存储桶在默认模式下加密或使用 KMS 您无需提及,AWS 足够聪明,知道如何在需要时解密数据。

    使用反引号 (`) 包装数据库、表和列名是一种很好的做法。

    好例子:

    CREATE EXTERNAL TABLE IF NOT EXISTS `mydb`.`mytable` (
        `test` STRING,
        `test2` STRING
    )
    ROW FORMAT SERDE 
         'org.openx.data.jsonserde.JsonSerDe'
    LOCATION
         's3://awsexamplebucket1-logs/AWSLogs/'
    

    还有一个很棒的在线生成器,您可以轻松地将任何 JSON(甚至是复杂的嵌套的)、CSV、TSV 或日志示例文件转换为 Apache HiveQL DDL 创建表语句。

    链接:https://www.hivetablegenerator.com/

    来自 AWS 的官方参考:https://docs.aws.amazon.com/athena/latest/ug/create-table.html

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 2018-03-09
      • 2019-03-14
      • 2020-09-29
      • 1970-01-01
      • 2019-04-09
      • 2021-02-24
      • 2021-04-30
      相关资源
      最近更新 更多