如何在JDBC中不使用表或Schema的通配符模式查询Snowflake表列
Snowflake查询带特殊字符表列信息的标准方案
使用JDBC标准转义接口(优先推荐)
JDBC规范原生提供DatabaseMetaData#getSearchStringEscape()方法,用于获取当前JDBC驱动的模式匹配转义字符。调用该接口拿到Snowflake JDBC对应的转义字符后,将待查询的表名、Schema名中所有LIKE保留字符(_、%)以及转义字符本身,统一用该转义字符做前缀转义,再传入getColumns方法即可。该方案完全遵循JDBC通用标准,不受驱动版本迭代的规则变动影响,不会出现后续失效的问题。直接查询 INFORMATION_SCHEMA 系统视图
如果需要完全避开JDBC层的模式转义逻辑,可以直接执行SQL查询Snowflake内置的INFORMATION_SCHEMA.COLUMNS系统视图,使用等值匹配过滤表名、Schema名即可,示例逻辑如下:
SELECT * FROM 目标数据库名.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '目标Schema名' AND TABLE_NAME = 'abc\def';
该方案直接适配Snowflake原生SQL的标识符规则,不会触发JDBC驱动的额外转义处理,结果完全符合Snowflake官方规范。
你提到的3.13.3版本Snowflake JDBC对反斜杠的额外转义问题属于已知驱动缺陷,官方在3.14.0及之后的稳定版本已完成修复,升级到最新正式版驱动也可直接解决该问题。
内容的提问来源于stack exchange,提问作者Kineolyan
相关产品推荐
相关产品推荐

