大数据计算MaxCompute查询rds外表的时候, java.lang.RuntimeException: java.sql.SQLException: Unknown system variable 'query_cache_size',报这个错误是什么原因呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用MaxCompute查询RDS外表时,出现以下错误:
java.lang.RuntimeException: java.sql.SQLException: Unknown system variable 'query_cache_size'
该错误表明MaxCompute在通过JDBC连接RDS数据库时,尝试访问了一个名为query_cache_size
的系统变量,但该变量在目标RDS数据库中不存在或不被支持。这种情况通常发生在以下场景: 1. RDS数据库版本不兼容:某些MySQL或MariaDB版本可能移除了query_cache_size
变量(例如,MySQL 8.0已完全移除了查询缓存功能)。 2. 驱动程序问题:MaxCompute使用的JDBC驱动程序可能与目标RDS数据库版本不匹配,导致驱动程序尝试访问不支持的系统变量。 3. 配置问题:MaxCompute在连接RDS时,可能默认启用了某些与目标数据库不兼容的选项。
根据问题原因,可以采取以下措施解决:
确认目标RDS数据库的版本是否支持query_cache_size
变量: - 如果使用的是MySQL 8.0或更高版本,query_cache_size
已被移除,因此需要调整MaxCompute的连接配置以避免访问该变量。 - 如果使用的是其他数据库(如MariaDB),请查阅对应版本的文档,确认是否支持该变量。
确保MaxCompute使用的JDBC驱动程序与目标RDS数据库版本兼容: - 下载并使用与目标RDS数据库版本匹配的最新JDBC驱动程序。 - 在MaxCompute中配置正确的驱动程序路径,并重新测试连接。
在MaxCompute中,可以通过设置JDBC连接参数来避免访问不支持的系统变量。例如: - 在创建RDS外表时,添加?useServerPrepStmts=false&useInformationSchema=true
等参数,避免驱动程序尝试访问不支持的系统变量。 - 示例SQL语句如下:
CREATE EXTERNAL TABLE IF NOT EXISTS rds_table_name (
column1 STRING,
column2 BIGINT
)
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH SERDEPROPERTIES (
'odps.properties.rolearn'='<your_role_arn>',
'odps.jdbc.driver.class'='com.mysql.cj.jdbc.Driver',
'odps.jdbc.url'='jdbc:mysql://<rds_endpoint>:<port>/<database>?useServerPrepStmts=false&useInformationSchema=true',
'odps.jdbc.username'='<username>',
'odps.jdbc.password'='<password>'
);
如果无法修改MaxCompute的连接配置,可以尝试在RDS数据库中添加兼容性配置: - 对于MySQL 5.x版本,可以通过以下命令检查并设置query_cache_size
:
SHOW VARIABLES LIKE 'query_cache_size';
SET GLOBAL query_cache_size = 0;
query_cache_size
的数据库版本。通过以上步骤,您可以有效解决Unknown system variable 'query_cache_size'
错误,并确保MaxCompute与RDS外表的正常交互。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。