【发布时间】:2018-06-11 07:21:37
【问题描述】:
我在 NiFI 中有一个流程,其中我使用 ExecuteSQL 处理器从hive 表中获得一个名为 dt 的子分区的整体合并。例如:我的表被sikid 和dt 分区。所以我在sikid=1, dt=1000 和sikid=2, dt=1000 下。
我所做的是select * from my_table where dt=1000。
不幸的是,我从 ExecuteSQL 处理器得到的回报是损坏的数据,包括具有 dt=NULL 的行,而原始表甚至没有一行 dt=NULL。
DBCPConnectionPool 配置为使用HiveJDBC4 jar。
后来我根据CDH版本尝试使用兼容的jar,也没有修复。
ExecuteSQL 处理器配置如下:
Normalize Table/Column Names:true
Use Avro Logical Types:false
Hive 版本:1.1.0
CDH:5.7.1
有什么想法吗?谢谢!
编辑: 显然我返回的数据包括额外的行......其中几千......这很奇怪。
【问题讨论】:
-
很确定这是 jdbc 驱动程序的问题。您能否检查其他基于 jdbc 的工具返回的结果集。例如,您可以使用squirrel-sql 并尝试执行相同的查询。
-
您可能还想尝试 SelectHiveQL 而不是 ExecuteSQL,前者已经包含 Hive 1.2.1 驱动程序,后者不“正式”支持 Hive,即使使用第三方驱动程序
-
@daggett 好点,我没有尝试更改驱动程序。我目前正在使用
HiveJDBC4,但我会尝试不同的版本。 -
@mattyb 其实我一开始就尝试过使用
hive-nar,但是在我的hadoop 集群和hive 中使用我的身份验证方法时遇到了问题。所以我宁愿使用 ExecuteSQL 处理器,这样它也可以通用
标签: hive apache-nifi