我使用sqoop将数据从hive表导出到SQLServer表,但有时所有记录都不会导出。
我不确定如何在没有人工干预的情况下识别此故障。我有一个计划通过编写一个shell脚本来解决这个问题 -
1)在变量中存储配置单元表的计数。 2)将SQL Server表的计数存储在另一个变量中。 3)比较两个变量的值,
if var1 != var 2
{
Delete the rows in SQL Server Server;
Rerun my sqoop script
}
else
exit;
问题: 用我目前的方法, 如何在shell脚本中的变量中存储hive表的行数? 如何在shell脚本中存储SQL-Server-Management工作室中表的行数?
答案 0 :(得分:0)
Sqoop提供了一个开箱即用的验证工具,以确保执行导入/导出的正确性。您可以使用以下标志执行此操作:
set(l1) ^ set(l2)
请参阅https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#validation详细说明所有3个验证界面。
据此,
Validator - 通过将决策委派给ValidationThreshold并将失败处理委托给ValidationFailureHandler来驱动验证逻辑。默认实现是RowCountValidator,它验证来自源和目标的行计数。
您可以通过实现自己的Validator进一步对验证输出执行操作,如下所示:
验证框架是可扩展和可插拔的。它带有默认实现,但接口可以扩展为允许自定义实现,方法是将它们作为命令行参数的一部分传递,如下所述。
答案 1 :(得分:0)
基本上,您在将数据从配置单元导出到sqlserver后尝试进行协调。要从sqlserver获取计数,您可以编写java / scala jdbc程序。
以下是伪代码
hiveCount = `hive -e "select count(*) from foo_table"`
sqlServerCount= java/scala jdbcCount.jar