You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Modin调用read_sql查询Oracle时出现ORA-00933语法错误

Modin read_sql 读取Oracle数据触发ORA-00933语法错误问题

问题现象

调用Modin实现的read_sql接口读取数据时触发SQL语法错误,初步判断问题来自read_sql内部自动生成的count统计查询的子查询别名写法,暂无法确认是自身使用方式问题,还是Modin与Oracle数据库存在兼容性问题。
验证对比:传入完全相同的参数调用pandas.read_sql()不会触发该错误。

复现代码

import modin.pandas as pd
query = """select distinct col_a, col_b FROM test_table"""
df = pd.read_sql(query, conn)

报错信息

sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) ORA-00933: SQL command not properly ended
[SQL: SELECT COUNT(*) FROM (select distinct col_a, col_b FROM test_table) AS _]

问题根因

属于Modin与Oracle的语法兼容性问题:Oracle数据库语法不支持子查询别名前添加AS关键字,Modin内部为了统计数据总量自动生成count查询时,统一使用了AS _的子查询别名写法,刚好违反Oracle语法规则;而pandas原生read_sql不会自动生成这类前置count统计语句,因此不会触发报错。

临时解决方式

  • 读取Oracle数据时先使用原生pandas的read_sql接口拉取数据,得到DataFrame后再转为Modin格式做后续分布式处理
  • 提前手动执行count查询拿到结果集总条数,通过read_sql的对应参数传入预统计的行数,跳过Modin内部自动生成count查询的逻辑
  • 本地修改Modin SQL生成逻辑的源码,去掉子查询别名前的AS关键字,适配Oracle语法规则

内容的提问来源于stack exchange,提问作者kjmena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:27:48