AWS Glue读取Oracle大小写敏感表报错“表或视图不存在”问题咨询
问题根因
Oracle默认对未加双引号的标识符会自动转换为大写,而你使用的Employee_Salary是大小写敏感表,必须用双引号包裹才能正常识别。AWS Glue从数据目录读取表信息生成查询语句时,默认不会主动给表名加双引号,因此触发"no table or view exists"报错。
解决方案
方案1:修改Glue数据目录中表的配置(无需改任务代码,推荐)
- 进入AWS Glue控制台,找到对应数据库
orctest4下的表orcl_orcl_Employee_Salary,编辑表的SerDe参数 - 添加参数:
quoteIdentifiers,值设为true - 保存前确认表的实际名称字段与Oracle中的
"Employee_Salary"大小写完全一致,如有偏差可手动修改后再保存 - 重新运行Glue任务即可
方案2:直接在Glue代码中指定自定义查询
如果不想修改表配置,可以放弃从数据目录读取表结构,改用from_options直接连接Oracle并指定带双引号的查询语句,示例代码如下:
# 替换原有datasource0创建逻辑即可,其余代码无需变动 datasource0 = glueContext.create_dynamic_frame.from_options( connection_type = "oracle", connection_options = { "url": "jdbc:oracle:thin:@//<Oracle实例地址>:<端口>/<服务名>", "user": "<数据库用户名>", "password": "<数据库密码>", "query": 'Select * from myschema."Employee_Salary"' }, transformation_ctx = "datasource0" )
注意:数据库密码建议存储在AWS Secrets Manager中,不要硬编码在代码里
方案3:修改Glue Crawler配置(适合后续新增大量大小写敏感表的场景)
- 编辑对应的Crawler,找到Oracle数据源的配置项
- 开启保留标识符大小写配置,部分Glue版本配置名为
useLowerCaseNames,设为false即可 - 重新运行Crawler爬取元数据后,再运行Glue任务
内容的提问来源于stack exchange,提问作者M Ravi
相关产品推荐
相关产品推荐

