powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
11 сообщений из 11, страница 1 из 1
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38970943
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинаю потихоньку разбираться с особенностями сабжа.

1. Читаю про UNIQUE:
Constrains the data that a column (or group of columns) contains to be unique with respect to all the rows in the table. If you insert or update the column with a duplicate value, HP Vertica does not give an error .

2. С PRIMARY KEY такая же беда: несмотря на отсутствие в pdf страницей выше аналогичного упоминания про does not give an error - два подряд insert-а с одним id отлично залетают в таблицу и тащатся select-ом.

Зачем тогда данные типы constraints вообще поддерживаются?

Ради упрощения можно допустить, что данные летят из нескольких независимых источников, но только на одну ноду.

Существует ли способ блокировать вставку (по нарушению PRIMARY KEY или UNIQUE) и обновление (по нарушению UNIQUE) неуникальных записей?
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38970982
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOREIGN KEY тоже не работает.
Вставляю что угодно без наличия записи в родительской табле.

Вот структура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table ver (
id_ver integer not null,
version varchar(255) null,
constraint pk_ver primary key (id_ver)
)

create table test (
id integer not null,
id_ver integer not null,
descript varchar(255) not null,
moment timestamp not null default current_timestamp,
data date not null default getutcdate(),
constraint pk_test primary key (id),
constraint uniq_test unique (descript),
constraint ref_test foreign key (id_ver) references ver (id_ver)
)
partition by id_ver



Ну и всякое прочее баловство вида

insert into ver (id_ver) values (1)
insert into ver (id_ver) values (2)
insert into ver (id_ver) values (1)

и

insert into test (id, id_ver, descript) values (44, 44, '4_4')
insert into test (id, id_ver, descript) values (44, 44, '4_4')

Всё успешно отрабатывает. А хотелось бы error-ом по лицу.
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38971019
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как по вашему база данных, которая не умеет строить индексы, будет поддерживать проверку PK или FK на лету?
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38971029
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander RyndinА как по вашему база данных, которая не умеет строить индексы
А кто Вам сказал, что FOREIGN KEY на всех СУБД в природе и в истории обязательно и всегда предполагает наличие индекса(ов) по полю(ям)?
Индекс и declarative integrity - лишь один из способов упрощения реализации ссылочной целостности.

И вообще вопросы на тему моего понимания ситуации предлагаю оставить за рамками темы.
Я ж не спрашиваю Вас, на кой по-вашему в pdf-ке написано про поддержку constraint-ов данного типа, а они не поддерживаются, причём только про unique написано что не будет error.

По теме - прихожу к выводу, что работать в такой ситуации предлагается только через MERGE, и в ON clause фактически дублировать constraints. Хотя USING там на всю голову ущербный: Source data can come from a base or external table only. Subqueries and joins are not allowed.
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38972088
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей, мне кажется вы из ежа пытаетесь построить удава. Проверка PK/UK/FK это забота слоя загрузки, а не аналитической DWH. Предполагается, что масс вставка записей в таблицу уже идет чистых данных. Вы зря ожидаете от DWH поведения OLTP. Сами констрейнты нужны, чтобы обозначить правила схем данных. Это используется оптимизатором при построении планов запросов. Это используется при том же MERGE для оптимизации, если объединение идет по первичному ключу. Это используется для построения преджойн проекций аля MASTER-DETAIL, чтобы Вертика могла навесить преджойн на фактовую таблицу, а не измерение. В комплекте Вертики для проверки констрейнтов по таблицам есть специальные функции, их описание в разделе документации "Constraint Management Functions".

P.S. В единичных DML типа "INSERT VALUES" кстати констрейнты полноценно работают, оно и понятно, можно быстро проверить. Если же вы в COPY говорите подгрузить парочку тб данных, странно было бы ожидать от хранилища, чтобы оно все это проверяло во время загрузки, да еще быстро грузило :)
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38972150
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSВ комплекте Вертики для проверки констрейнтов по таблицам есть специальные функции, их описание в разделе документации "Constraint Management Functions"
Ок, спасибо за наводку, посмотрю что там есть. Отпишусь.

ASCRUSВ единичных DML типа "INSERT VALUES" кстати констрейнты полноценно работают, оно и понятно, можно быстро проверить
Если речь идёт про обычные констрейнты, то в моём примере выше - ничего не работает. Точнее, ничего не блокируется даже когда всё просто и происходит единичная вставка. Если же речь про дополнительные специальные телодвижения - возможно. Но я пока не знаю, как это сделать.

ASCRUSЕсли же вы в COPY говорите подгрузить парочку тб данных
Тут как бы ситуация довольно простая, обычный простой INSERT или UPDATE, штучный, не террабайтами и даже не INSERT...SELECT, но из пары-тройки разных коннектов одновременно. И усложнять предельно простую логику конечно незачем.
При bulk load - вопросов нет, там и на sybase было "кто не спрятался - я не виноват", на то он и bulk load.

Ждал именно Вашего ответа. Пролистал тут темы, натыкался на обсуждение одновременной загрузки в хранилища, по идее как раз у вертики в моём понимании не должно было бы быть с этим проблем, а вот надо же. Сказать что удивлён - это ничего не сказать. Смутно надеялся на наличие каких-нибудь настроек хранилища или коннекта или ещё чего, что бы включало contraint-ы, и что Вы подскажете. Но за "Constraint Management Functions" уже спасибо.
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38972161
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Штучные INSERT/UPDATE вообще Вертике противопоказаны исходя из архитектуры хранения данных. Если многопоточно начать заваливать сервер единичными DML, то не так много времени пройдет, как появится ошибка "too many ROS containers" :) Если вам хватает штучных DML в потоках, то Вертика не та база, которая нужна ;)
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38972169
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, не полегчало.
Может ещё надо где-то что-то подправить, но вот такое:
delete from ver;
select * from ver;
SELECT REENABLE_DUPLICATE_KEY_ERROR();
insert into ver (id_ver, version) values (1,'2');
insert into ver (id_ver, version) values (1,'2');
select * from ver;
тоже не работает, как хочется.

Вызывать после BEGIN TRAN и INSERT команду SELECT ANALYZE_CONSTRAINTS('ver'); до COMMIT и если там что будет, то звать ROLLBACK? Логично и прозрачно, чего уж тут, особенно с учётом того, что ANALYZE_CONSTRAINTS из чужого коннекта то же самое вернёт.

Надо видимо чего другое пощупать, что то не растёт этот кокос и крокодил плохо ловится.
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38972241
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей, зачем вам это ? Вы с первоисточников льете дубликаты, OLTP источники их не гарантируют? Откуда информация льется, что она с дубликатами, что в ХД хранится будет и какая аналитика делаться? Не очень понятна задача, пока вижу попытку использования Вертики как OLTP.
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38972261
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>OLTP источники их не гарантируют?
Основная куча данных - гарантируют.
Однако чтобы было понятнее: есть некий "справочник", который настолько прост, что может формироваться автоматически (и на который ссылается основная часть данных). И вот на разных источниках эти данные могут дублироваться по первичному ключу и дополнительному уникальному индексу, с частичным заполнением прочих полей в записи (по-разному на разных источниках), соответственно, крайне удобно было бы просто сливать MERGE-ем такую мелочь (нет - вставилось, есть - обновилось в части тех полей, где NULL). Без предварительной и пост- обработки.

>какая аналитика делаться?
Да по сути никакой серьёзной. Просто доступ 99.(9)% только чтение и дозапись новых объёмов данных - глупо держать это в "OLTP-серверах". Обычные агрегаты. Детский сад, короче. Даже JOIN-ить данные с этим "справочником" и "разворачивать" их при загрузке нет никакой необходимости.

>пока вижу попытку использования Вертики как OLTP
Я бы скорее это назвал попыткой попробовать избавиться от одной прослойки между всеми источниками и финишным хранилищем. Но охотно соглашусь, что я не прав, и что обязательно предполагается ещё один промежуточный слой.

А на тему множества DML и загаживания памяти - там вроде как есть возможность писать напрямую на диск, если немного и осторожно.

>Если вам хватает штучных DML в потоках
Э нет ))), вопрос не в том, что этого хватает (потому что этого не хватает), а в том, что достаточно удобно было бы по мелочи этим пользоваться, когда это не основной способ заливки. Ну нет - значит нет. Может чего другое подойдёт. У MonetDB например с этим проблем не возникло.
...
Рейтинг: 0 / 0
Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
    #38972357
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовОднако чтобы было понятнее: есть некий "справочник", который настолько прост, что может формироваться автоматически (и на который ссылается основная часть данных). И вот на разных источниках эти данные могут дублироваться по первичному ключу и дополнительному уникальному индексу, с частичным заполнением прочих полей в записи (по-разному на разных источниках), соответственно, крайне удобно было бы просто сливать MERGE-ем такую мелочь (нет - вставилось, есть - обновилось в части тех полей, где NULL). Без предварительной и пост- обработки.
Обычно в хранилищах делают несколько слоев. В стейджинговый слой заливается информация с первоисточников как есть, далее формируется консолидированный слой, где уже все очищается, приводится к единым ключам и приводится к 3 нормальной форме, а уже из него формируются слой витрин, в котором помимо агрегации как раз происходит частичная денормализация данных до уровня звезды.

MERGE конечно тоже никто делать не запрещает, делаете буферную табличку, в нее заливаете справочник, потом мержите с основной. Но учтите, UPDATE/DELETE/MERGE накладывают эклюзивную блокировку на таблицу, пока коммит не пройдет, ни какая другая сессия изменить данные в таблице не сможет, только вставлять новые. Ну и так же разные нюансы, когда в кластере рекаверится нода, идет ребалансировка кластера и т.д. - тоже X/U блокировки будут здорово мешаться, если они часто будут идти - в итоге просто придется останавливать изменения, пока эти операции не пройдут.

Сергей ВаскецовА на тему множества DML и загаживания памяти - там вроде как есть возможность писать напрямую на диск, если немного и осторожно.

Я именно про диск и говорю. Почитайте архитектуру Вертики по хранению данных в ROS контейнерах. Именно для этого WOS и сделан, чтобы оптимизировать работу часто пишущих но коротких сессий, но он на вставках хорошо работать будет, а на изменениях данных выплывут нюансы :)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Vertica 7.1.1 Column- Constraint: UNIQUE (ну и PRIMARY KEY за компанию)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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