【问题标题】:Hive- Quicker way to check for dataHive - 更快地检查数据的方法
【发布时间】:2017-07-12 00:08:36
【问题描述】:

我有一个在 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 进行处理。

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

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

【问题讨论】:

    标签: sql scala apache-spark hive hiveql


    【解决方案1】:

    放弃循环。
    在一个查询中完成所有检查。

    有多种编写查询的方法,这是一种(假设 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
    ;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-07-14
        • 2011-02-07
        • 2014-07-18
        • 2022-01-16
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多