powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнение двух датасетов
23 сообщений из 23, страница 1 из 1
Сравнение двух датасетов
    #39406452
Olga.IOVOVA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Имеется следующая задача - нужно сравнить два идентичных по структуре набора данных(2 среза одной таблицы). Нужно определить идентичны они или нет.
Количество строк может достигать 500 млн.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406456
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olga.IOVOVA,

minus
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406464
Olga.IOVOVA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

на таком объеме данных будет очень долго работать, а такие сравнения нужно сделать не для одной таблице
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406474
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если найдете способ быстрее - скажите.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406476
AmKad,

ТС ничего не рассказал о структуре и составе своих срезов. Может там LONG-и, LOB-ы и прочие радости, неподдерживаемые оператором MINUS.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406480
Авдруг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Может есть отдельные поля, которые заведомо дадут разницу, там id какие-нибудь? )
2. В каждой таблице сделать отдельное поле, куда запилить хэш всех полей каждой записи? (хотя минус наверно быстрее будет)
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406481
Olga.IOVOVA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

Все типы колонок поддерживаются оператором MINUS. Проблема заключается в объеме данных
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406500
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olga.IOVOVA,

Чисто посмеяться :)
1. Выгрузить в две таблицы (create table as select).
2. Создать индекс на каждой по всем полям.
3. Select A natural join B
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406504
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно только определить, идентичны или нет, можно отсортировать наборы по одному критерию и сравнивать построчно (с помощью дихотомии). Это может быть быстрее.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406505
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olga.IOVOVAПроблема заключается в объеме данныхЕсли объем - это проблема, сделайте truncate.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406508
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olga.IOVOVAИмеется следующая задача - нужно сравнить два идентичных по структуре набора данных(2
среза одной таблицы). Нужно определить идентичны они или нет.

Решение: параллельный фетч из двух курсоров, отсортированных по первичному ключу,
сравнение полей и прерывание по несовпадению. Можно использовать full outer join если он
умеет использовать план merge.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406514
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovпараллельный фетч из двух курсоров, отсортированных по первичному ключуосмелюсь предположить, что набор колонок, как и ключей, на момент сравнения неизвестен (походу, только динамика)
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406516
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovРешение: параллельный фетч из двух курсоров, отсортированных по первичному ключу,
сравнение полей и прерывание по несовпадению. Можно использовать full outer join если он
умеет использовать план merge.
Фетч куда?
На клиента? 500 млн?
На сервере? В цикле? Построчно или в коллекции?

Мда... Похоже я один тут minus-ами сравниваю.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406518
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadФетч куда?

Туда, где будет производиться сравнение. PL/SQL блок - вполне подойдёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406520
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadПохоже я один тут minus-ами сравниваю.
Видимо да. Остальные предпочитают одно чтение данных вместо двух.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406529
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут надо таки решать не в общем виде, а как обычно бывает у ТС, как часто бывает разница и в чем именно
Если они в 99% случаях разные -- достаточно начать со сравнения кол-ва строк (ну или MINUS только первичных ключей) -- это решит больше половины сразу
Дальше, например, MINUS по каждому индексу (но тут засада, если индекс неуникальный)
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406565
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВидимо да. Остальные предпочитают одно чтение данных вместо двух.
Ага, а такими мелочами, в своем варианте, как переключение контекста или hash join, ты пренебрег.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406572
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadDimitry SibiryakovВидимо да. Остальные предпочитают одно чтение данных вместо двух.
Ага, а такими мелочами, в своем варианте, как переключение контекста или hash join, ты пренебрег.Ну или как ты пишешь merge-join, если удастся захинтовать.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406603
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для сравнения джоин не нужен. Достаточно отсортировать и независимо посчитать контрольные суммы пачками в параллель. При необходимости вычисления конкретной строки углубляться в расхожие пачки рекурсивно. В общем, заурядный дбмс_компарисон с точностью до предоставления ему "датасетов".
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406647
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olga.IOVOVAДобрый день!

Имеется следующая задача - нужно сравнить два идентичных по структуре набора данных(2 среза одной таблицы). Нужно определить идентичны они или нет.
Количество строк может достигать 500 млн.


сравнение двумя проходами можно сделать очень просто - посчитать контрольную сумму по строкам, затем сложить в пределах всех строк.
если сойдутся две цифры - ок, идентичны, не сойдутся две цифры - не идентичны (ваш КО)

в качестве функции расчета можно использовать md5 (через PL/SQL обертку), можно ora_hash (что намного быстрее, но вероятность коллизии не 2^128, а 2^32, годится разве для девелоперских автотестов).

можно и через SHA-1 (примерно один порядок стоимости, в сравнении с md5, зато куда надежнее - вероятность коллизии 2^160)

http://stackoverflow.com/questions/1749753/making-a-sha1-hash-of-a-row-in-oracle


один минус - просто так складывать md5 или sha-1 суммы в number не получится - слишком много цифр. можно, впрочем, 39-ти цифровое значение делить на два, три числа через разбиение строк (SUBSTR) и складывать по-отдельности.

и вероятность коллизии тут будет что-то вроде 10^38

или написать свою библиотеку (на Java) для суммирования 128 битных или 160 битных цифр.

впрочем, про вероятности не буду заикаться, лень вспоминать теорвер.
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39406669
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchлень вспоминать теорвер.если не высокотехнологичный проект, критерия трех сигма будет достаточно
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39409945
быстрее минуса только обрамленный минус, урезаный rownum'ом (+ переведенный в turbo-режим хинтом first_rows...)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
SQL> select count(*) from SALDO;

  COUNT(*)
----------
 227 742 077

Elapsed: 00:01:41.82
SQL> select count(*)  from (
  2  select *  from SALDO
  3  minus
  4  select * from SALDO@dblink
  5  );

  COUNT(*)
----------
 171 954 019

Elapsed: 00:29:48.05
SQL> /

  COUNT(*)
----------
 171 954 019

Elapsed: 00:26:14.14
SQL> /

  COUNT(*)
----------
 171 954 028

Elapsed: 00:25:51.81
SQL> l
  1  select count(*)  from (
  2  select *  from SALDO
  3  minus
  4  select * from SALDO@dblink
  5* )
SQL> c /.../) where rownum = 1
  5* ) where rownum = 1
SQL> /

  COUNT(*)
----------
         1

Elapsed: 00:18:48.97
SQL> /

  COUNT(*)
----------
         1

Elapsed: 00:18:45.01
SQL> /

  COUNT(*)
----------
         1

Elapsed: 00:18:25.26
SQL> 1
  1* select count(*)  from (
SQL> c !t !t /*+ first_rows(1) */  !
  1* select /*+ first_rows(1) */  count(*)  from (
SQL> /

  COUNT(*)
----------
         1

Elapsed: 00:18:00.81
SQL> /

  COUNT(*)
----------
         1

Elapsed: 00:18:58.22
SQL>



Хотя нужно помнить что весь TEMP будет съеден, и перед запуском убедиться что 2 размера таблицы не превышают его размер.
Я так таблицей на 5е8 положил обе тестовые базы...
...
Рейтинг: 0 / 0
Сравнение двух датасетов
    #39410044
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchсравнение двумя проходами можно сделать очень просто - посчитать контрольную сумму по строкам, затем сложить в пределах всех строк.

Имхо много не выиграешь, все равно нужно читать обе таблицы. Наверное можно написать функцию, где сначало отсечь по косвенным признакам типа min() max() по индексу первичного ключа и каунт, и если все совпадает то продолжить с вариантом фетча по первичному ключу до фейла (может даже в параллели). А вообще покупайте шардинг и екзадату)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнение двух датасетов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]