sql-server - 无法使用 Sqoop 将 SQL Server 视图中的所有记录导入 HDFS
问题描述
我无法使用 Sqoop 将 SQL Server View 中的所有记录导入 HDFS。
SQL Server VIEW v_callDetail
是使用JOINS
其他几个表创建的:
CREATE view testdb.dbo.v_callDetail AS
select
i.callkey,
i.col1,
i.col2,
i.col3,
i.col4,
i.inc_datetime_col
from testdb.dbo.callDetail i (nolock)
inner join [dbo].[tabl2] rt (nolock)
on i.callKey = rt.id
inner join [dbo].[tabl3] et (nolock)
on i.col1 = et.id
left join testdb.dbo.lob l (nolock)
on i.col2 = l.id
left join testdb.dbo.division d (nolock)
on i.col3 = d.id
left join testdb.dbo.region r (nolock)
on i.col4 = r.id;
这个v_callDetail有 3.5 亿条记录。但是只有2000万是进口的。
但是当我从任何表中导入数据时,我可以导入所有记录。
例如,一个表有大约 7 亿个,并且都使用下面给出的相同 sqoop 命令导入,其他几个表也是如此。
Sqoop 命令:
$> export SQOOP_DELIM=$( printf "\x01" )
$> sqoop import \
$> --options-file /path/to/sqoop_property.txt \
$> -D mapreduce.map.memory.mb=6144 -D mapreduce.map.java.opts=-Xmx6144m -D mapred.job.queue.name=L3_queue -D mapred.job.name="job_Import_sqlServer_View" \
$> --connect jdbc:sqlserver://hostname:1433 \
$> --username u123 --P \
$> --fields-terminated-by ${SQOOP_DELIM} \
$> --map-column-java col1=String,col2=String \
$> --null-string '' --null-non-string '' \
$> --query "select callkey,col1,col2,col3,col4,inc_datetime_col from testdb.dbo.v_callDetail WHERE inc_datetime_col<'2020-02-06 00:00:00' \
$> --delete-target-dir \
$> --target-dir /hdfs/path/to/landing/dir \
$> --hive-drop-import-delims \
$> --split-by callkey \
$> -m 20
这仅发生在 VIEW 中。我必须设置一些 SQLServer 或 Sqoop 参数吗?
解决方案
推荐阅读
- spring - 如何在 PublishSubscribeChannel 中测试交付?
- soapui - 如何添加动态资源路径或端点,如下所示
- node.js - 嵌套多个异步等待
- c - 打印平方等于给定数字的所有数字组合的程序
- regex - 如何在飞镖中使用正则表达式转换时间格式
- python - 比较两个集合列表
- arrays - PostgreSQL:检索多个数组元素
- javascript - 如何在不同的 onChange 函数中处理相同的 id?
- javascript - Easiest and shortest way to reacreate page layout in a single page dynamic web app?
- javascript - stub doesn't return the resolve data in proxyquire getting undefined