AWS Athena 无法 运行 table 上的任何 WHERE 子句
AWS Athena Fails to Run any WHERE clause on table
我在 AWS S3 中设置了一个数据湖,并使用 Athena 在其中创建了一个 table。这是我使用的 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
语句或数据 ingetion/storage 的问题还是完全不同的问题。
您的查询语法有问题。引用字符串值时使用单引号,因为双引号引用 table
中的列名
SELECT AVG(networkstrength)
FROM controllers
WHERE deviceid='123'
用 " 包围字符串会让它认为您指的是列名而不是文字值。使用 ' 作为您的字符串
我在 AWS S3 中设置了一个数据湖,并使用 Athena 在其中创建了一个 table。这是我使用的 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
语句或数据 ingetion/storage 的问题还是完全不同的问题。
您的查询语法有问题。引用字符串值时使用单引号,因为双引号引用 table
中的列名SELECT AVG(networkstrength)
FROM controllers
WHERE deviceid='123'
用 " 包围字符串会让它认为您指的是列名而不是文字值。使用 ' 作为您的字符串