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