2017-05-04 200 views
1

我们目前正在使用sqoop将数据从SAP Hana移动到Hadoop。 SAP Hana表在表名和列名中使用'\'字符。我们的命令sqoop命令正在工作,但是当我使用“Split by”时它失败了。任何人都可以帮忙。从SAP HANA导入数据时出现sqoop问题

代码:

/usr/hdp/sqoop/bin/sqoop import \ 
--connect "jdbc:sap://***-***.**.*****.com:30015" \ 
--username DFIT_SUPP_USR --password **** \ 
--driver com.sap.db.jdbc.Driver \ 
--query "select '\"/BA1/C55LGENT/\"' FROM \"_SYS_BIC\".\"sap.fs.frdp.300.RDL/BV_RDL_ZAFI______Z_SLPD\" where \$CONDITIONS and (\"/BA1/C55LGENT\") IN ('0000000671','0000000615') and (\"/BA1/C55LGENT\" != '0000000022') AND (\"/BIC/ZCINTEIND\" ='01') AND (\"/BA1/IGL_ACCOUNT\") IN ('0000401077', '0000401035') AND (\"/BA1/C55POSTD\">= '20170101' AND \"/BA1/C55POSTD\" <='20170101')" \ 
--target-dir /user/arekapalli/pfit_export_test12 \ 
--delete-target-dir \ 
--split-by //BA1//C55LGENT// \ 
-m 10 

下面是我们得到了错误..

所致:com.sap.db.jdbc.exceptions.JDBCDriverException:SAP DBTech JDBC:[257](在12 ):SQL语法错误:不正确的语法附近 “/”:行1列12(在pos 12)

+0

你看过[这个](http://stackoverflow.com/questions/37356777/using-sqoop1-with-sap-hana-using-a-table-name-that-c​​ontains-forward-slash-ca/ )或[this](http://stackoverflow.com/questions/40633666/sqoop-import-to-hive-from-hana-with-special-characters-in-table-name)?两种不同的方案。搜索了一下,任何地方都没有好的答案,甚至发布了[bug](https://issues.apache.org/jira/browse/SQOOP-1722),这是未解决的。 – szako

回答

0

你的问题很可能是在这里

--query "select '\"/BA1/C55LGENT/\"' FROM \"_SYS_BIC\".\"sap.fs.frdp.300.RDL/BV_RDL_ZAFI______Z_SLPD\" where \$CONDITIONS and (\"/BA1/C55LGENT\") IN ('0000000671','0000000615') and (\"/BA1/C55LGENT\" != '0000000022') AND (\"/BIC/ZCINTEIND\" ='01') AND (\"/BA1/IGL_ACCOUNT\") IN ('0000401077', '0000401035') AND (\"/BA1/C55POSTD\">= '20170101' AND \"/BA1/C55POSTD\" <='20170101')" \ 

您假设“\”是从终端使用的转义字符,可能是错误的。请尝试以下

--query 'select "/BA1/C55LGENT/" FROM "_SYS_BIC"."sap.fs.frdp.300.RDL/BV_RDL_ZAFI______Z_SLPD" where \$CONDITIONS and ("/BA1/C55LGENT") IN ("0000000671","0000000615") and ("/BA1/C55LGENT" != "0000000022") AND ("/BIC/ZCINTEIND" ="01") AND ("/BA1/IGL_ACCOUNT") IN ("0000401077", "0000401035") AND ("/BA1/C55POSTD">= "20170101" AND "/BA1/C55POSTD" <="20170101")' \ 

我不是一个SAP用户,所以也许可以与查询不对劲,反正你可以看到,我删除了所有的“从查询和我用作为查询

的分隔符