我在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
知道发生了什么吗?谢谢!
编辑:显然我返回的数据包含额外的行。。。几千个。。这很奇怪。
2条答案
按热度按时间jmo0nnb31#
最后利用Hive特性解决了这个问题
hive.query.result.fileformat=SequenceFile
fiei3ece2#
做
HiveJDBC4
(我假设simba配置单元驱动程序)从列名中解析表名?这是一个与apachehivejdbc驱动程序不兼容的地方,它不支持getTableName()
因此不适用于executesql,即使它确实适用,当从resultsetmetadata检索列名时,它们的表名前面会加上句点.
分离器。这是hivejdbccomon(由selecthiveql使用)与jdbccomon(由executesql使用)中的一些自定义代码。如果您试图使用executesql是因为您在身份验证方法上遇到了问题,那么simba驱动程序如何减轻这种情况呢?例如,您是否在jdbc url上而不是在hive-site.xml文件中指定身份验证信息?如果您将auth问题(使用selecthiveql)作为单独的so问题提出并链接到此处,我将尽我所能帮助您解决这一问题。