Как убедиться, что данные секционированной таблицы kdb не дублируются?

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

Должен ли я использовать «ключ» для проверки существования секционированных таблиц или есть более простой способ гарантировать, что kdb не будет дублировать сохраненные данные?


kdb
person Robert Kubrick    schedule 19.04.2013    source источник


Ответы (1)


Я не уверен, что ваша проблема в том, что 1) вы боитесь загрузить один и тот же файл более одного раза или 2) несколько файлов могут содержать одни и те же данные, поэтому вы не хотите, чтобы последующие загрузки создавали дубликаты.

Для 1), если ежедневно хранимые файлы, которые вы используете для создания БД, не обновляются и имеют уникальные имена, вы можете отслеживать, какие файлы уже были загружены, и пропускать их при последующих запусках.

2) Даже если вы не можете физически ввести таблицу, у вас, вероятно, есть определенные «ключевые» столбцы, например. sym, дата, время, сторона и т. д. Вы можете проверить, появляются ли «ключевые» значения фрагмента, который вы загружаете в данный момент, в разделе даты. Если они это сделают, удалите эти записи, сохранив при этом остальные.

person user1895961    schedule 20.04.2013
comment
Это 1). Есть ли собственный способ kdb для отслеживания загруженных файлов, или мне придется сохранить какой-то пользовательский индикатор на диске? Я искал параметр разрешения kdb, чтобы заблокировать любую запись после создания. Это было бы самым безопасным решением. Случайное дублирование строк может привести к сбою в анализе данных, который я выполняю, и лишние строки не будут сразу обнаружены. - person Robert Kubrick; 20.04.2013
comment
Вы должны были бы сохранить эту информацию самостоятельно. Вы можете включить столбец, указывающий файл, содержащий каждую запись в таблице. Содержит ли каждый файл данные по отдельным дням или есть несколько файлов на дату или даты на файл? - person user1895961; 20.04.2013
comment
Для каждой даты есть несколько файлов. Если я сохраню один и тот же файл дважды, я искажу данные и получу неправильные результаты. Что, если я поиграюсь с правами доступа к файлу linux в каталоге раздела после создания? - person Robert Kubrick; 20.04.2013
comment
Я думаю, что это, возможно, слишком сложно. Вы все еще можете использовать мое второе предложение выше. Если ключ уже существует, игнорируйте эту запись. Вы также можете принять во внимание возможность дублирования записей в своем анализе, используя fby. (i=(last;i)fby([]$KEY1;$KEY2...). На самом деле это довольно специфичная для пользователя проблема, без знакомства с вашими данными и тем, что вы пытаетесь с ними сделать, это своего рода трудно дать полное решение. - person user1895961; 22.04.2013
comment
В основном. Вы знаете, какие ключи находятся во входящем файле, если эти ключи уже существуют в разделе, тогда вы игнорируете запись. Это не очень элегантное решение, и оно увеличит время загрузки. Но, как я уже сказал, трудно найти полное решение, не зная всей полноты того, что вы пытаетесь сделать. Если есть риск, что вы загрузите файл несколько раз, ваша аналитика должна быть более снисходительной в случае наличия дубликатов. - person user1895961; 22.04.2013
comment
хорошо спасибо. Я удивлен, что нет контроля чтения/записи. Случайные записи могут существенно повлиять на аналитику. Базовая защита от записи может быть встроена в kdb, как и обычные права доступа к файлам (O_CREAT). - person Robert Kubrick; 23.04.2013