我在AWS Athena中创建外部表时遇到以下错误:
line 1:8: no viable alternative at input 'create external' (service: amazonathena; status code: 400; error code: invalidrequestexception
我用来创建表的代码如下。它基于现有的雅典娜表。我使用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')
我不确定从AWS Athena中的一个表中获取HiveQL DDL语句并重用它来创建另一个表是否是个好主意。有多个参数不是必需的,也不是专门应用于该表的。
在大多数情况下,不需要参数OUTPUTFORMAT
或TBLPROPERTIES
。例如,如果你的S3存储桶是默认模式加密的,或者使用KMS加密,你不需要提及它,AWS足够聪明,知道如何在需要时解密数据。
使用backtick(`(包装数据库、表和列名是一种很好的做法。
好例子:
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(甚至是复杂的嵌套JSON(、CSV、TSV或Log示例文件转换为Apache HiveQL DDL创建表语句。
链接:https://www.hivetablegenerator.com/
AWS官方参考:https://docs.aws.amazon.com/athena/latest/ug/create-table.html