通过带有包含各种文本的字段的 sqoop 从 SQL 服务器导入和导出数据

Importing and exporting data from SQL Server via sqoop with fields containing various text

我正在尝试通过 HDFS/Sqoop 从 SQL 服务器向 DB2 导入和导出表。

我正在使用

--fields-terminated-by '[=11=]1' 
--lines-terminated-by '[=11=]2' 
--hive-replace-delims '<hivedelims>' 
and/or --hive-drop-import-delims 

我几乎可以完成所有事情,但是.....

SQL 服务器中的某些列属于 nvarchar(max) 类型,并且包含文本形式的数据,例如

"...[CR][LF] ..." 

或 XML-包含竖线字符的文本:“|”

或包含 \n 或 [LF] 或 [CR] 等的简单文本等

显然该列可以容纳任何类型的文本....

我想将这些类型的单元格作为一个块导入到 HDFS 中,然后将它们同样作为一个块导出到 DB2 中...

我正在使用 import-all-tables 而不是一个一个地导入,否则我想过使用 --map-column-java 来处理那些特定的 tables/columns ..?

但是,由于上述原因,我尝试过的任何组合都会给我留下一些无法导出的表格,因为它们是用不同数量的列解释的。

我希望它有意义,否则我非常愿意详细说明一些实际数据(匿名,因为它们包含敏感数据)

提前感谢您提出任何建议。

好的,我终于用以下方法解决了它:

在 sqoop import-all-tables 部分:

--hive-drop-import-delims \
--fields-terminated-by '[=10=]1' \
--lines-terminated-by '\n' \

在 sqoop 导出部分:

--input-fields-terminated-by '[=11=]1' \
--input-lines-terminated-by '\n' \

一切都搞定了。

现在我 运行 失忆了,但这完全是另外一回事了 ;-)

希望对其他人有所帮助。