Sqoop向Vertica导入数据遇列名'From'/'To'触发VJDBC报错如何解决
报错根因
该问题核心是From、To属于Vertica的SQL保留关键字,Sqoop默认生成的导入语句未对这类保留字列名做标识符转义,导致SQL语法校验不通过。在不修改库表列名的前提下,可通过以下方案解决:
可行解决方案
方案1:开启Sqoop内置保留字转义参数
Sqoop原生提供保留字列名转义支持,执行导入命令时添加--escape-mapping-column-names参数即可,该参数会自动为所有列名加上Vertica支持的双引号标识符引用符,适配语法要求。
参考命令片段:sqoop import \ --connect jdbc:vertica://<Vertica主机地址>:<端口>/<数据库名> \ --username <账号> \ --password <密码> \ --table <源表名> \ --target-table <Vertica目标表名> \ --escape-mapping-column-names \ # 其余自定义参数方案2:自定义查询手动转义列名
旧版本Sqoop对Vertica的转义适配存在缺陷时,可直接用--query参数自定义导入的查询逻辑,手动给From、To列加双引号转义:
参考命令片段:sqoop import \ --connect jdbc:vertica://<Vertica主机地址>:<端口>/<数据库名> \ --username <账号> \ --password <密码> \ --query "select 其他字段1, \"From\", \"To\", 其他字段2 from 源表名 where \$CONDITIONS" \ --target-table <Vertica目标表名> \ --columns "其他字段1,\"From\",\"To\",其他字段2" \ # 其余自定义参数注意Linux命令行环境下双引号需要加反斜杠转义,避免被shell提前解析。
方案3:升级VJDBC驱动版本
部分低版本VJDBC驱动对保留字标识符的自动处理存在兼容问题,升级到Vertica官方发布的最新稳定版JDBC驱动,配合方案1的转义参数也可解决该问题。
内容的提问来源于stack exchange,提问作者John Humanyun
相关产品推荐
相关产品推荐

