executesql处理器返回损坏的数据

mitkmikd  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(279)

我在nifi中有一个流,我使用executesql处理器从 hive table。例如:我的表按 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 配置单元版本:1.1.0
cdh:5.7.1
知道发生了什么吗?谢谢!
编辑:显然我返回的数据包含额外的行。。。几千个。。这很奇怪。

jmo0nnb3

jmo0nnb31#

最后利用Hive特性解决了这个问题 hive.query.result.fileformat=SequenceFile

fiei3ece

fiei3ece2#

HiveJDBC4 (我假设simba配置单元驱动程序)从列名中解析表名?这是一个与apachehivejdbc驱动程序不兼容的地方,它不支持 getTableName() 因此不适用于executesql,即使它确实适用,当从resultsetmetadata检索列名时,它们的表名前面会加上句点 . 分离器。这是hivejdbccomon(由selecthiveql使用)与jdbccomon(由executesql使用)中的一些自定义代码。
如果您试图使用executesql是因为您在身份验证方法上遇到了问题,那么simba驱动程序如何减轻这种情况呢?例如,您是否在jdbc url上而不是在hive-site.xml文件中指定身份验证信息?如果您将auth问题(使用selecthiveql)作为单独的so问题提出并链接到此处,我将尽我所能帮助您解决这一问题。

相关问题