Athena创建S3分区表报错:mismatched input 'PARTITIONED'
Athena建表报错:mismatched input 'PARTITIONED' 解决方案
错误原因
报错的核心问题是建表语句中数组类型的写法不符合SQL语法规范:你使用了HTML转义字符<代替了SQL中要求的<,导致Athena的SQL解析器无法正确完成列定义的解析,进而将后续的PARTITIONED BY子句判定为非法输入,触发语法错误。
错误位置定位
语句中raw_all_locations和raw_categories列的类型被错误写为array<string>,这是HTML环境下的转义写法,在Athena SQL中必须改为array<string>。
修正后的完整建表语句
CREATE TABLE IF NOT EXISTS boards_raw_fields_v1 ( "uuid" bigint, "source" string, "raw_company_name" string, "raw_contract_type" string, "raw_employment_type" string, "raw_working_hours_type" string, "raw_all_locations" array<string>, "raw_categories" array<string>, "raw_industry" string) PARTITIONED BY ( "year" string, "month" string, "day" string, "hour" string, "version" bigint) 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://my-data/datalake-raw/boards/raw-fields/v1' TBLPROPERTIES ( 'classification'='parquet', 'compressionType'='snappy', 'projection.enabled'='false', 'typeOfData'='file')
额外说明
- S3路径中最后一个文件夹
v1无需提前创建,Athena会在首次写入数据时自动生成。 - 若后续需要加载S3中已有的分区数据,需执行
MSCK REPAIR TABLE boards_raw_fields_v1;让Athena识别分区。
内容的提问来源于stack exchange,提问作者The Dan
相关产品推荐
相关产品推荐

