【问题标题】:AWS Athena Fails to Run any WHERE clause on tableAWS Athena 无法在表上运行任何 WHERE 子句
【发布时间】:2020-07-13 13:11:34
【问题描述】:

我在 AWS S3 中设置了一个数据湖,并使用 Athena 在其中创建了一个表。这是我使用的CREATE TABLE 语句:

CREATE EXTERNAL TABLE `controllers`(
  `commandkey` varchar(40), 
  `commandvalue` varchar(5), 
  `container` varchar(15), 
  `containername` varchar(15), 
  `controllerid` varchar(5), 
  `cpupercent` float, 
  `deviceid` varchar(5), 
  `diskpercent` float, 
  `epoch` timestamp, 
  `error` map<varchar(20),array<varchar(10)>>, 
  `errorvalue` map<varchar(15),varchar(20)>, 
  `exceptioninfo` varchar(50), 
  `exceptionname` varchar(8), 
  `funcname` varchar(20), 
  `jouleboxcontrollerid` varchar(5), 
  `key` varchar(40), 
  `level` varchar(8), 
  `linenumber` varchar(5), 
  `linkquality` float, 
  `logtype` varchar(20), 
  `memorypercent` float, 
  `mode` varchar(10), 
  `module` varchar(20), 
  `networkstrength` float, 
  `param` varchar(15), 
  `rc` int, 
  `requesttopic` varchar(50), 
  `response` varchar(5), 
  `responsetopic` varchar(50), 
  `restarttime` timestamp, 
  `rid` varchar(15), 
  `shifttype` char(1), 
  `siteid` varchar(8), 
  `source` varchar(15), 
  `startedat` timestamp, 
  `status` varchar(5), 
  `topic` varchar(50), 
  `ts` timestamp, 
  `type` varchar(15), 
  `val` varchar(20), 
  `value` varchar(5))
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://controller-logs.smartjoules.org/raw'
TBLPROPERTIES (
  'classification'='PARQUET'
)

每当我尝试使用 WHERE 子句运行简单的 SELECT 查询时:

SELECT AVG(networkstrength) 
FROM controllers
WHERE deviceid="123"

它无法抛出错误: SYNTAX_ERROR: line 2:21: Column '123' cannot be resolved

我不确定是CREATE TABLE 语句或数据摄取/存储的问题还是完全不同的问题。

【问题讨论】:

  • 字符串的单引号。

标签: amazon-web-services hive presto amazon-athena


【解决方案1】:

您的查询语法有问题。引用字符串值时使用单引号,因为双引号引用表中的列名

SELECT AVG(networkstrength) 
FROM controllers
WHERE deviceid='123'

【讨论】:

    【解决方案2】:

    用 " 包围字符串会让人认为您指的是列名而不是文字值。使用 ' 作为字符串

    【讨论】:

      猜你喜欢
      • 2021-05-26
      • 2012-10-20
      • 2021-01-14
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多