Hive-检查数据的更快捷方式

时间:2017-02-22 05:01:37

标签: sql scala apache-spark hive hiveql

我有一个在Hive数据库上运行的scala / spark包。它运行一个循环,运行查询以检查某些特定值是否存在数据

SELECT * FROM myTable WHERE col1 = 7879 AND col2= 1071 AND col3= 3027 LIMIT 1;

然后根据它是否返回一行继续。执行大约需要25秒。

我已经看到这种方式比

更快
SELECT COUNT(*) FROM myTable WHERE col1 = 7879 AND col2= 1071 AND col3= 3027;

并根据计数是否为0继续进行。

是否有更快的方法来检查表中是否存在某些约束的数据?

编辑 - 循环基于另一个查询的结果行运行(产生100多行)。

2 个答案:

答案 0 :(得分:0)

抛弃循环。
在单个查询中执行所有检查。

有多种方法可以编写查询,这是一种方法(假设result_set_of_another_query只是(col1,col2,col3)的唯一组合)。

select      q.col1
           ,q.col2
           ,q.col3
           ,t.cnt

from                    result_set_of_another_query as q

            join       (select      col1
                                   ,col2
                                   ,col3
                                   ,count(*)    as cnt

                        from        mytable

                        group by    col1
                                   ,col2
                                   ,col3
                        ) t

            on          t.col1 = q.col1
                    and t.col2 = q.col2
                    and t.col3 = q.col3
;

答案 1 :(得分:0)

如果您的表被分区,则不能使用where clasue。为了确保每个分区都有正确的数据,您只能在表中运行count(*)。如果要签入多个表,还可以使用union all,