Teradata PrestoDB Hive Catalog执行CREATE EXTERNAL TABLE报错求助
解决PrestoDB Hive Catalog中
CREATE EXTERNAL TABLE语法报错问题 这个报错no viable alternative at input 'CREATE EXTERNAL'本质是SQL语法解析失败,从你提供的语句来看,最直接的问题是表名后缺少包裹列定义的左括号,同时还有一些语法细节需要调整,具体分析和解决办法如下:
报错核心原因
你的CREATE语句里,表名hive.default.mydata之后直接写了列定义id INT,没有用左括号(把所有列字段包裹起来,这违反了SQL的基本语法规则,导致Presto的解析器无法识别后续的列定义,进而抛出语法错误。
另外,还有一个潜在问题:Presto针对Hive Catalog创建外部表时,虽然支持CREATE EXTERNAL TABLE语法,但更推荐使用标准的Presto语法(同时兼容Hive风格),避免出现兼容性问题。
修正后的SQL语句
下面是调整后的正确语句,我已经修复了语法错误,并优化了部分细节:
CREATE EXTERNAL TABLE hive.default.mydata ( id INT, datetime TIMESTAMP, latitude FLOAT, longitude FLOAT, bookingid VARCHAR, pre_lat FLOAT, pre_long FLOAT, time_hour DECIMAL(6, 1), dist_kms DECIMAL(6, 1), ma6_dist_kms DECIMAL(6, 1), istationary INT, quality_overall VARCHAR, quality_nonstationary VARCHAR, cartype VARCHAR, isbigloss INT, bookregion VARCHAR, iho_road VARCHAR ) STORED AS PARQUET LOCATION 's3://sb.mycompany.com/s...';
额外注意事项
- 确保列定义的括号配对正确:所有列必须放在
()内,这是SQL创建表的基础要求。 - 字符串类型的路径建议使用单引号
':虽然双引号在某些环境下可用,但单引号是SQL标准的字符串分隔符,兼容性更好。 - 如果你遇到
CREATE EXTERNAL TABLE的兼容性问题,可以改用Presto推荐的外部表创建方式,效果完全一致:
CREATE TABLE hive.default.mydata ( -- 列定义同上 ) WITH ( format = 'PARQUET', external_location = 's3://sb.mycompany.com/s...' );
内容的提问来源于stack exchange,提问作者Shubham A.
相关产品推荐
相关产品推荐

