2013-05-06 1 views
1

После загрузки наших первоначальных фактов в куб, мы затем загружаем второй файл, который добавляет меры к существующим фактам (поэтому во втором файле не создается никаких новых фактов). Для этого мы используем Handler.Обработчики для удаления файлов

Когда второй файл удаляется из файловой системы, мы хотели бы удалить только соответствующие меры из фактов.

Есть ли способ подключиться к механизму Directory/File Watcher для этого?

+1

Не могли бы вы добавить информацию о вашей загрузки архитектуры? Используете ли вы реляционные магазины/хранилище ActivePivot? Кажется, что у вас есть исходные факты, отделенные от ваших мер. Ваши меры содержатся в отдельном магазине, связанном с магазином, содержащим исходные факты? Есть ли у них какая-то причина, по которой вам нужно отделить первоначальные факты от ваших мер? – David

+0

Привет, Дэвид, Оба файла используются в одном хранилище Relational (ActivePivot). Мы получаем распространение данных по нескольким файлам, поэтому загружаем первый файл для создания фактов, а затем добавляем дополнительные меры к существующим фактам, используя второй файл. Отвечает ли это на ваш вопрос? – obrienk

ответ

1

Вы можете расширить

.CSVSource.onFileAction(IFileWatcher watcher, Collection<String> added, Collection<String> modified, Collection<String> deleted) 

по телефону super.onFileAction (...), который будет обрабатывать добавленные и измененные файлы, а также добавить больше логики для обработки удаленных файлов.

Это может быть сделано путем обновления фактов, которые внесли удаленный файл в поле deletedFile. Такое поле может быть заполнено автоматически путем добавления метаданных Filepath в файле LoadInstructions.csv:

Format,FilePattern,FilePath,MetaData 
FormatName,formatRegex.csv,someFolder,FILEPATH=N/A 

и имеющий поле, как:

<field name="FILEPATH" type="string" indexation="dictionary" nullable="true" defaultValue="N/A" /> 
1

Если мы правильно понимаем и упрощаем usecase, ваш набор данных имеет две меры A и B. Для тех же записей один файл приносит меру «A», а другой файл принимает меру «B». И вы хотите свободно обновлять или удалять данные для измерения A или B независимо.

Существует несколько способов достижения этого.

Сначала вы можете отделить меры: вместо записей, которые имеют как поля А, так и В, у вас будет две записи с общим полем «значение» и поле «тип измерения», чтобы различать оба типа измерений. Этот дизайн является гибким, потому что позже вы можете ввести новую меру «C», которая сама загружается из другого файла.

Наиболее элегантным вариантом является, вероятно, использование распределенной архитектуры ActivePivot с полиморфным распределением. Вы бы установили два независимых куба, один из которых имел только меру «А», другой куб с мерой «В». Затем присоедините кубы вместе с полиморфным распределением, ActivePivot объединит их вместе «на лету» и представит обе меры, как если бы они принадлежали к одному и тому же (виртуальному) кубу.

Наконец-то быстрое и грязное решение: настройте свои меры как поля «nullable» в ActivePivot. Таким образом, когда вы хотите удалить меру «A», вы фактически записываете «null» в поля «A» ваших записей.

+0

Спасибо Антуану, но проблема заключается не в том, как хранить пустые значения, но как обнаружить, когда файл удален. Поскольку добавление мер выполняется внутри обработчика, когда файл удаляется, он не удаляется автоматически при удалении файла. Мы расширяем DefaultTransactionHandler, но мы не вызываем вызов метода submitStore() при удалении файла.Возможно, мы что-то упустили в нашей конфигурации. (чтобы быть понятным, мы получаем вызов submitStore() при добавлении файла) – obrienk

+2

Вы не можете инициировать удаление данных в ActivePivot, когда заметили, что файл был удален: в этот момент файл больше не существует и вы не можете прочитать его, чтобы найти ключи записей, которые вы хотите удалить. Пользователи ActivePivot обычно копируют файл в какой-либо «удаленный» каталог, так что он обнаруживается другим наблюдателем файлов и помещается CSV Source в специальный обработчик транзакций, который отображает удаления. –