ExecuteSQL处理器返回损坏的数据

时间:2018-06-11 07:21:38

标签: hive apache-nifi

我在NiFI中有一个流程,我在其中使用ExecuteSQL处理器从hive表中获得一个名为dt的子分区的整合。例如:我的表格由sikiddt分区。所以我在sikid=1, dt=1000下,sikid=2, dt=1000下。 我做的是select * from my_table where dt=1000

不幸的是,我从ExecuteSQL处理器获得的数据是损坏的数据,包括具有dt=NULL的行,而原始表甚至没有dt = NULL的行。

DBCPConnectionPool配置为使用HiveJDBC4 jar。 后来我尝试使用兼容的jar根据CDH版本,也没有解决它。

ExecuteSQL处理器配置如下:

Normalize Table/Column Namestrue

Use Avro Logical Typesfalse

Hive版本:1.1.0

CDH:5.7.1

任何想法发生了什么?谢谢!

编辑: 显然我的返回数据包括额外的行......几千个......这很奇怪。

2 个答案:

答案 0 :(得分:0)

HiveJDBC4(我假设Simba Hive驱动程序)是否从列名解析表名?这是一个与Apache Hive JDBC驱动程序不兼容的地方,它不支持getTableName()因此不能与ExecuteSQL一起工作,即使这样做,也可以从中检索列名在ResultSetMetaData中,他们的表名前面加上句点.分隔符。这是HiveJdbcCommon(由SelectHiveQL使用)和JdbcCommon(由ExecuteSQL使用)中的一些自定义代码。

如果您因为使用身份验证方法时遇到问题而尝试使用ExecuteSQL,那么Simba驱动程序有何缓解?您是否在JDBC URL上指定了auth信息,而不是在hive-site.xml文件中?如果您将您的身份验证问题(使用SelectHiveQL)作为一个单独的SO问题并在此处链接到该问题,我将尽我所能帮助您解决这个问题。

答案 1 :(得分:0)

最终,它通过使用蜂巢属性hive.query.result.fileformat=SequenceFile

得以解决