我正在进行spark-hive-hbase集成。这里使用了phoenix hbase表进行集成。
Phoenix : **apache-phoenix-4.14**
HBase : **hbase-1.4**
spark : **spark-2.3**
hive : **1.2.1**
我正在使用Spark Thrift服务器,并使用 jdbc访问表。
我测试的几乎所有基本功能都运行良好。但是当我从spark 带有条件的地方提交查询时,它被提交给phoenix而没有where条件的查询,并且所有过滤都发生在spark侧。
如果表中有数十亿数据,我们将无法使用它。
示例:
Input-query: select * from hive_hbase where rowid=0;
Query-submitted: PhoenixQueryBuilder: Input query : select /*+ NO_CACHE */ "rowid","load_date","cluster_id","status" from hive_hbase
是错误吗? 请建议是否有任何方法可以强制使用where condition(filter)提交查询(仅适用于jdbc)。
感谢与问候 拉胡尔
答案 0 :(得分:1)
上述行为不是bug,而是spark的功能,它将确保不在DB端发生过滤器,而是在spark的末端完成过滤器,从而确保非行键过滤器的性能和执行可以快速完成。如果您仍然想为所有意图和目的推送谓词,则可以使用phoenix-spark或自己编辑spark的谓词下推代码。以下是供您参考的链接