Как удалить дубликаты из таблиц со столбцами типа CLOB?

У меня есть таблица с одним или несколькими столбцами типа CLOB. Эта таблица содержит повторяющиеся строки. Обычные механизмы, такие как distinct и group by, не работают для CLOB в DB2. Как я могу удалить дубликаты на таких таблицах?


person xquadrat    schedule 28.08.2015    source источник


Ответы (2)


Один из способов приблизиться к этому, особенно если это то, что вам нужно будет делать регулярно, — сравнить дайджесты CLOB или хэши вместо самих CLOB.

В DB2 нет доступной встроенной хеш-функции, поэтому для ее реализации вам придется пройти через некоторые препятствия. Например, вы можете экспортировать CLOB в виде файлов и вычислять их хэши с помощью утилиты ОС.

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

person mustaccio    schedule 28.08.2015

Вы можете попробовать использовать dbms_lob.compare для сравнения содержимого полей CLOB. Это встроенный модуль. Поддерживаемый размер CLOB — до 10 МБ.

person data_henrik    schedule 28.08.2015
comment
Если я правильно понимаю документацию, функция dbms_lob.compare предназначена для сравнения clobs в одной строке таблицы друг с другом. Как это можно использовать для устранения повторяющихся строк? - person xquadrat; 28.08.2015
comment
Вам нужно написать процедуру. Сначала я бы попытался найти строки, в которых CLOB имеет одинаковую длину, а затем использовал функцию сравнения, чтобы увидеть, совпадают ли они. Поскольку большие объекты хранятся отдельно от данных обычной таблицы, сначала идет поиск длины. Существуют ли какие-либо другие столбцы, которые помогли бы идентифицировать дубликаты? Это не банально... - person data_henrik; 28.08.2015
comment
У меня есть одно поле типа varchar, которое содержит guid, который можно использовать для идентификации дубликатов. Я попытался использовать это в сочетании с функцией min для выбора одной строки. Но функция min также не работает с clobs - person xquadrat; 28.08.2015
comment
Как долго CLOB? И, возможно, добавьте свой нерабочий запрос к вопросу. - person data_henrik; 28.08.2015
comment
клобы имеют длину 1 073 741 823. - person xquadrat; 28.08.2015