AWS Athena не может выполнить любое предложение WHERE для таблицы - PullRequest
0 голосов
/ 01 апреля 2020

Я настроил озеро данных в 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'
)

Всякий раз, когда я пытаюсь выполнить простой запрос SELECT с предложением WHERE, например:

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

, он не выдает ошибку: SYNTAX_ERROR: line 2:21: Column '123' cannot be resolved

Я не уверен, является ли это проблемой с оператором CREATE TABLE, загрузкой / хранением данных или чем-то совершенно другим.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2020

У вас проблема с синтаксисом запроса. Используйте одинарные кавычки, когда вы ссылаетесь на строковые значения, потому что двойные кавычки ссылаются на имя столбца в вашей таблице

SELECT AVG(networkstrength) 
FROM controllers
WHERE deviceid='123'
1 голос
/ 02 апреля 2020

окружение строки символом "заставляет вас думать, что вы ссылаетесь на имя столбца, а не на буквальное значение. Используйте 'для вашей строки

...