Amazon Athena CREATE EXTERNAL TABLE 不匹配输入“外部”无效请求异常

问题描述 投票:0回答:8

我正在尝试在 Amazon Athena 中创建外部表。我的查询如下:

CREATE EXTERNAL TABLE priceTable (
  WeekDay STRING,
  MonthDay INT,
  price00 FLOAT,
  price01 FLOAT,
  price02 FLOAT,
  price03 FLOAT,
  price04 FLOAT,
  price05 FLOAT,
  price06 FLOAT,
  price07 FLOAT,
  price08 FLOAT,
  price09 FLOAT,
  price10 FLOAT,
  price11 FLOAT,
  price12 FLOAT,
  price13 FLOAT,
  price14 FLOAT,
  price15 FLOAT,
  price16 FLOAT,
  price17 FLOAT,
  price18 FLOAT,
  price19 FLOAT,
  price20 FLOAT,
  price21 FLOAT,
  price22 FLOAT,
  price23 FLOAT,
  )

  ROW FORMAT DELIMITED
  FIELDS TERMINATED BY ';'
  LINES TERMINATED BY '\n'
  LOCATION 's3://myquicksighttestbucket/C1_SphdemDD_CANARIAS_20190501_20190531_v2'

S3 中的文件只是一个以分号分隔的 csv。 但是,我收到以下错误:

line 1:8: mismatched input 'external'. expecting: 'or', 'schema', 'table', 'view' (service: amazonathena; status code: 400; error code: invalidrequestexception; request id: e524f7e6-39ca-4af7-9e39-f86a4d0a36c8; proxy: null)

有人能告诉我我做错了什么吗?非常感谢任何帮助。

amazon-web-services amazon-athena
8个回答
20
投票

噢!抱歉,错误是最后一个字段后面的逗号!!

而且,也可以代替:

FIELDS TERMINATED BY ';'

我应该像这样使用分隔符的 OCT 代码 (073):

FIELDS TERMINATED BY '073'

9
投票

确保表名称中不包含“-”、空格或表名称中不允许的任何其他字符。


2
投票

我的字段名称无效,其中包含

-
字符。直接从流日志定义复制
flow-direction
等名称时,这是一个相当容易犯的错误。


2
投票

我今天遇到了同样的错误,与其他人不同的是,我有一个分区子句,其中我没有提交列的类型:

CREATE EXTERNAL TABLE IF NOT EXISTS table_name(
  creationtime string,
  anumber bigint,
  somearray array<struct<...>>,
  somestring string)
  PARTITIONED BY (creation_date string)
                                ^^^^^^ <--- 'string' was missing
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
LOCATION
's3://location/';

添加类型后,错误消失并且查询成功。


1
投票

这里已经有很多答案了,但我只是想总结一下,似乎语句中的任何语法错误都可能导致此错误。

就我而言,我的

TBLPROPERTIES

的最后一项后面有一个逗号

1
投票

就像其他人所说的那样,这是各种问题的常见错误。对我来说,我设法使用像

这样的查询
CREATE TABLE IF NOT EXISTS example_table(
  id INT NOT NULL,
  name STRING,
  address STRING
)
;

没有

EXTERNAL
限定符,这意味着我实际上返回了有用的错误,例如(在本例中)

line 2:10: no viable alternative at input 'CREATE TABLE IF NOT EXISTS example_table(\n id INT NOT'

Athena 不会在没有目标位置的情况下构建表,因此一旦出现错误

No location was specified for table. An S3 location must be specified
希望您的查询能够成功。


0
投票

我遇到了同样的错误,将列数据类型 INTEGER 更改为 INT 为我解决了此错误。

https://docs.aws.amazon.com/athena/latest/ug/data-types.html int 和整数 – Athena 根据查询类型使用不同的整数表达式。 int – 在数据定义语言 (DDL) 查询(例如 CREATE TABLE)中,使用 int 数据类型。 整数 – 在 SELECT * FROM 等 DML 查询中,使用整数数据类型。整数表示为二进制补码格式的 32 位有符号值,最小值为 -231,最大值为 231-1。


0
投票

另请确保 DDL 中没有任何评论

© www.soinside.com 2019 - 2024. All rights reserved.