2014-10-16 5 views
2

У меня есть 3 таблицы в улье:Сравнение двух таблиц в энцефалопатией

  • Control_table, с известными данными
  • New_table, с данными, чтобы проверить
  • Result_table, таблица, где записи с различными значениями в new_table затем control_table вставляются в

Все три таблицы имеют одинаковые имена столбцов (которые я на самом деле нет по соображениям безопасности), а также количество столбцов и те, которые:

c1, c2, c3, c4, c5, c6, c7 

Где c1 выступает в качестве первичного ключа.

Теперь мне нужно собрать SQL-запрос для HIVE, чтобы сравнить две таблицы (control_table с new_table) и строки, которые имеют разные значения для перемещения в таблицу результатов. Теперь таблица результатов имеет такое же количество столбцов, что и new_table или control_table. Если возможно, я бы хотел заполнить только столбцы, которые на самом деле разные.

Так Примером этого может быть:

Control_table: c1 | c2 | c3 | c4 | c5 | c6 | c7 | 

With a values: 11 | 22 | 33 | 44 | 55 | 66 | 77 | 

New_table: c1 | c2 | c3 | c4 | c5 | c6 | c7 | 

With values: 11 | 21 | 33 | 44 | 54 | 66 | 87 | 

Сравните их и результат вставки в result_table, поэтому таблица результатов будет выглядеть следующим образом:

Result_table: c1 | c2 | c3 | c4 | c5 | c6 | c7 | 

With values: 11 | 21 | -- | -- | 54 | -- | 87 | 

Таким образом, только столбцы с фактической разницей в стоимости будет заселено.

Теперь я мусор в SQL, я попробовал несколько подходов и попытался задать вопрос здесь, но есть никогда не хороший ответ, вот ссылка на мой предыдущий ответ, который имеет также пример SQL:

How to compare two tables and return rows with difference with HIVE

PS: Возможно, это невозможно, я не уверен, поскольку у меня нет предыдущих впечатлений от NoSQL.

ответ

3

Изменить пыльник для вашей цели:

SELECT nt.c1, 
     CASE WHEN ct.c2 <> nt.c2 THEN '--' ELSE nt.c2 END, 
     CASE WHEN ct.c3 <> nt.c2 THEN '--' ELSE nt.c3 END 
FROM 
New_table nt 
JOIN Control_table ct ON nt.c1 = ct.c1 
WHERE 
ct.c2 <> nt.c2 OR ct.c3 <> nt.c3 
+0

Хотя вы уже упоминали, чтобы изменить код, еще тогда и остальное значения должны быть заменены на ответьте на исходный вопрос. –

-1
select * from Control_table  
full outer join New_table  
on Control_table.c1=New_table.c1  
where Control_table.c1 is null or New_table.c1 is null;  

Это выборки записей, если какой-либо из записей несовпадений из обеих таблиц. И вы можете выполнить валидацию табличных данных. Если вы хотите сохранить его в другой таблице.
создать управляемый стол с:

CREATE TABLE RESULT_TABLE AS SELECT * FROM Control_table; 

и загрузить результат в этой таблице результатов, как:

INSERT INTO TABLE RESULT_TABLE  
select * from Control_table full outer join New_table on  
Control_table.c1=New_table.c1  
where Control_table.c1 is null  
or New_table.c1 is null; 
Смежные вопросы