2013-11-20 2 views
1

У меня есть две таблицы с размером 1 ТБ каждый и считаются такими же данными.
Однако, когда я использую их одинаково, результаты отличаются.Самый быстрый способ сравнить, если две таблицы имеют точно такое же содержимое

Итак, я хотел бы сравнить их запись по записи, чтобы узнать, в чем разница.


Мое текущее решение является уродливой один:
Я заказал их одним и тем же ключом, вывод их на локальный диск и сравнить их с diff

Может кто-то предложить более элегантный способ для достижения этой цели?

ответ

1

Это две копии одних и тех же данных? Если вы можете присоединиться к таблицам и выбрать различия?

SQLFiddle

Быстрый пример:

create table atable (
    id int, 
    field1 int, 
    field2 varchar(16) 
) 

create table btable (
    id int, 
    field1 int, 
    field2 varchar(16) 
) 

select * from atable as a 
join btable as b on a.id = b.id 
where a.field1 != b.field1 
or a.field2 != b.field2 
0

Вы можете попробовать хэширования строки таблицы 1, используя любой хеш-функции, а затем запустить через table2, чтобы увидеть, если есть запись, которая уже не хэшируются. Теоретически это будет наиболее эффективное решение, я думаю.

Вы можете использовать хэш-функции minhash/LSH для масштабирования.

0

Как упоминалось Jay, использование Hash() является более эффективным и надежным решением, чем объединение таблиц (что дает некоторые трудности, когда ключи повторяются, например).

Вы могли бы посмотреть на эту программу на Python, который обрабатывает такие сравнения таблиц улья и покажет вам на веб-странице различия, которые могут возникнуть: https://github.com/bolcom/hive_compared_bq

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