Эффективно обрабатывать и обновлять каждую строку в SQL - PullRequest
0 голосов
/ 11 марта 2019

TL; DR: Какой эффективный способ циклически проходить по 500 тыс. Строк, применять настраиваемую логику преобразования / ciper к столбцу (или, возможно, нескольким) в каждой отдельной строке и обновлять столбец преобразованными данными?Есть ли способ сделать это эффективно в SQL без необходимости писать отдельную программу для цикла по каждой строке и применять логику?

Справочная информация: у нас есть таблица (~ 500 тыс. Строк), а некоторые столбцы содержат конфиденциальныеданные, которые должны быть замаскированы.Поскольку мы маскируем столбцы идентификаторов, которые используются в соединениях, маскирование должно быть согласованным для всех других таблиц.После долгих размышлений с алгоритмами MD5 / CRC / хэширования мы решили просто придерживаться нашего собственного алгоритма шифрования, который гарантирует уникальность, не заканчивая слишком большим количеством бессмысленных символов.

1 Ответ

0 голосов
/ 11 марта 2019

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

update t
    set col = my_cipher(col);

Это относительно дорого, потому что обновляется каждая строка.

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

...