AWS Athena执行SQL差集查询报mismatched input 'from'错求助
SQL报错根因
原SQL存在4个核心问题,直接触发语法报错和逻辑错误:
- TRIM函数使用完全错误:Athena基于Presto引擎,移除字符串前缀的正确写法是
trim(LEADING '待移除前缀' FROM 字段名),原代码把整张表、WHERE过滤条件直接写进TRIM参数里,直接触发mismatched input 'from'的解析错误。 - SELECT子句存在冗余逗号:
as origin_file,后直接接FROM关键字,逗号后无查询字段,属于基础语法错误。 - 关联逻辑写反:需求是找landing表独有的文件,原代码以sales表为左表做左连接,永远无法返回landing表存在、sales表不存在的记录。
- 关联字段不匹配:sales表存的是带完整路径的文件地址,landing表存的是纯文件名,直接用两个字段相等做关联条件,即使语法修正也无法匹配到正确记录;同时run_id的过滤条件被错误写进TRIM参数,没有生效。
正确可执行SQL
SELECT l.filename FROM "landing"."ejpos_landing_files" l LEFT JOIN ( -- 筛选对应批次的销售数据,将完整路径裁剪为纯文件名 SELECT trim(LEADING '/datarite/ejpos/8023/20220706/' FROM origin_file) AS sale_filename FROM "validated"."datarite_ejpos_itemsale" WHERE run_id = '8035' ) s ON l.filename = s.sale_filename WHERE s.sale_filename IS NULL;
执行上述语句会返回预期结果
filename4。如果后续文件路径前缀不固定,可以把裁剪文件名的逻辑替换为split_part(origin_file, '/', -1),直接取路径最后一段的纯文件名,不需要硬编码路径前缀,兼容性更强。
内容的提问来源于stack exchange,提问作者user3476582
相关产品推荐
相关产品推荐

