2017-02-22 3 views
1

У меня есть пакет scala/spark, который работает в базе данных Hive. Он запускает цикл, в котором запрос выполняется, чтобы проверить, существует ли данные для некоторых конкретных значенийУлей - быстрый способ проверки данных

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 строк).

ответ

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 
; 
+0

Проверить обновленный ответ –

0

если ваша таблица разделена, чем вы не можете использовать классу. для обеспечения того, чтобы каждый раздел имел правильные данные, вы можете запускать только счетчик (*) в своей таблице. Вы также можете использовать объединение всех, если вы хотите проверить несколько таблиц,

Смежные вопросы