我使用sqoop从db2中提取数据。有没有一种方法可以在sqoop命令中使用动态计算为split by的列?例如:如果我在sqoop查询中计算行\u number(),并将其用作拆分依据:
sqoop import -m 40 --boundary-query "select 1, count(*) from tablename" --query "select t.*, row_number() over(ORDER BY columnname) had_key from tablename t WHERE \$CONDITIONS" --split-by had_key
我得到以下错误:
Error: java.io.IOException: SQLException in nextKeyValue
Caused by: com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-968, SQLSTATE=57011, SQLERRMC=null, DRIVER=4.14.88
2条答案
按热度按时间js81xvg61#
我在尝试不同的事情,所以我原来问题中的错误是另一种情况。当我把这个问题作为
错误是
此错误的原因是找不到had\ U key列。当我将查询更改为如下,并将默认Map器保留为4时
该问题已解决,我能够成功地使用计算列had\ U键进行拆分。如果我在上面的查询中使用40个Map器,它会抛出表空间错误
因此,我只需要根据源数据库上可用的资源来确定Map器的正确数量
fivyi3re2#
我不认为,sqoop使用计算列来划分源表。它必须是一个物理柱。