powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сравнение значений в таблицах без уникального ключа
16 сообщений из 16, страница 1 из 1
сравнение значений в таблицах без уникального ключа
    #39763819
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

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

То есть например есть таблица т1, миллионы записей, уникального ключа нет, столбцов около 10-15.

Есть таблица т1_нью ,получена каким то путем, но данные в ней должны быть в идеале такие же как в т1.

Для каждого столбца в т1_нью нужно определить diff-сколько строчек в таблице для этого столбца отличаются от т1.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39763826
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarovaВсем привет!

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

То есть например есть таблица т1, миллионы записей, уникального ключа нет, столбцов около 10-15.

Есть таблица т1_нью ,получена каким то путем, но данные в ней должны быть в идеале такие же как в т1.

Для каждого столбца в т1_нью нужно определить diff-сколько строчек в таблице для этого столбца отличаются от т1.

не понял
спавнівать надо строки, а не столбцы
напр
т1
1 а
1 б
2 а

т1_нью
1 б
1 а
2 а

По столбцах равенство, но таблички то разные

....
stax
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39763829
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, пусть например будет 3 столбца
"айди юзера" , "время на сайте", "количество очков" .(пример чисто теоретический! :-))

и пошли данные в 1-й табе
1 12 123
1 45 566
2 65 6464
2 44 65465
2 56 45

и во второй табе
1 12 122
1 54 566
2 65 6464
2 44 65465
2 56 45

И например для третьего столбца нужен ответ типа дифф = (1/5)*100 - так как в одной строке не совпали данные в третьем столбце.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39763830
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
говоря вообще, мне надо протестить просто что новые ЕТЛ работают исправно и данные загруженные ими равны данным загруженным легаси-ЕТЛями. вот. может я вопрос непрально задала просто.
И вот для таб с уникальными ключами все ясно. А без ключей не пойму как сделать сравнение.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39763848
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarovaА без ключей не пойму как сделать сравнение.
Для разовой работы можно:
1) вычесть одно из другого. Добиться пустого результата в обоих направлениях.
2) если п.1 успешен - сравнить общее количество строк, количество не-наллов, мин, макс и количество уникальных по интересующим атрибутам (тут надо просто проконтролировать, что не потеряли полные дубли строк - если оно вообще допустимо по тз).
Для ETL этого будет достаточно - если, конечно, имеете возможность синхронизировать два etl.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39763849
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousДля разовой работы можно:
1) вычесть одно из другого. Добиться пустого результата в обоих направлениях.
2) если п.1 успешен - сравнить общее количество строк, количество не-наллов, мин, макс и количество уникальных по интересующим атрибутам (тут надо просто проконтролировать, что не потеряли полные дубли строк - если оно вообще допустимо по тз).
Для ETL этого будет достаточно - если, конечно, имеете возможность синхронизировать два etl.

Или просто MINUS + COUNT (аналитический):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 WITH T1 AS (
            SELECT /*+ MATERIALIZE */ TABLE1.*,COUNT(*) OVER(PARTITION BY COL1,...COLN) CNT FROM TABLE1
           ),
     T2 AS (
            SELECT /*+ MATERIALIZE */ TABLE2.*,COUNT(*) OVER(PARTITION BY COL1,...COLN) CNT FROM TABLE2
           ),
     T3 AS (
             SELECT * FROM T1
            MINUS
             SELECT * FROM T2
           ),
     T4 AS (
             SELECT * FROM T2
            MINUS
             SELECT * FROM T1
           )
 SELECT * FROM T3
UNION ALL
 SELECT * FROM T4
/





SY.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39763859
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, ROW_NUMBER а не COUNT:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH T1 AS (
            SELECT /*+ MATERIALIZE */ TABLE1.*,ROW_NUMBER() OVER(PARTITION BY COL1,...COLN ORDER BY 1) RN FROM TABLE1
           ),
     T2 AS (
            SELECT /*+ MATERIALIZE */ TABLE2.*,ROW_NUMBER() OVER(PARTITION BY COL1,...COLN ORDER BY 1) RN FROM TABLE2
           ),
     T3 AS (
             SELECT * FROM T1
            MINUS
             SELECT * FROM T2
           ),
     T4 AS (
             SELECT * FROM T2
            MINUS
             SELECT * FROM T1
           )
 SELECT T3.*,'NOT IN TABLE2' FROM T3
UNION ALL
 SELECT T4.*,'NOT IN TABLE1' FROM T4
/
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39763986
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

автортаблица т1, миллионы записей

ROW_NUMBER сделает строки уникальными, и можно попробовать full outer join + rn is null

.....
stax
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39764079
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Спасибо.
про полное совпадение строк понятно, это самый легкий случай.
Как правило несовпадение идет по 4-5 столбцам из табы. И мне вот это и нужно как результат - типа вот столбцы а,б,с,д - совпадают 100%, столбец е - диф 15%, столбец и - диф 56% и тд.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39764698
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в подобных кейсах все забывают про интерсект: чтобы сразу исключить все совпадения.
а потом уже выверять расхожести по отдельным столбцам - и поиск по расхождениям уже будет быстрее из-за меньшего кол-ва оставшихся строк.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39764702
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogel,
меньше если
1) непонятно есть ли полные дубли (исключать нельзя : я так понял тестируют НЬЮ техноложи)
2) повторюсь, если есть дубли как Вы с интерсект их решите?

.....
stax
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39764720
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogelинтерсект: чтобы сразу исключитьинтерсект дает совпадения, а не исключает.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39764894
JPolak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгения, посмотрите здесь, возможно что-то возьмете на вооружение.
Compare and sync tables: DBMS_COMPARISON? и ниже...
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39765083
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JPolak, этому пакету нужен обязательно уникальный ключ на таблицу.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39765102
JPolak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EvgeniaMakarovaJPolak, этому пакету нужен обязательно уникальный ключ на таблицу.

Я не о пакете, если посмотреть ниже по ветке, то можно найти альтернативные решения.
...
Рейтинг: 0 / 0
сравнение значений в таблицах без уникального ключа
    #39765106
JPolak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JPolakEvgeniaMakarovaJPolak, этому пакету нужен обязательно уникальный ключ на таблицу.

Я не о пакете, если посмотреть ниже по ветке, то можно найти альтернативные решения.

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


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