импорт содержимого файла CSV каждый час - PullRequest
1 голос
/ 30 мая 2011

У меня есть файл журнала, который записывается каждые несколько минут. у меня будет процесс, который будет прослушивать определенный каталог. каждый час он будет импортировать новые строки из этого CSV-файла в базу данных доступа. К сожалению, файл CSV не имеет уникального ключа для каждой строки.

Вопрос в том, как мне отслеживать новые строки для импорта?

Как узнать, когда импортировать новые строки?

Другая сложность заключается в том, что существует другая программа, которая удаляет этот CSV-файл один раз в день, поэтому я не могу точно отслеживать, какую позицию я остановил.

Ответы [ 3 ]

2 голосов
/ 30 мая 2011

Файл журнала, естественно, должен иметь метку времени.Вы можете отслеживать по дате последнего загруженного журнала.

Если у вас нет даты и времени или какого-либо другого последовательного свойства для отслеживания, вы можете отслеживать длину файла после каждой загрузки.Поэтому в следующий раз перед чтением вы устанавливаете текущую позицию считывателя файлов на значение длины файла, зафиксированное в предыдущей проверке.

[Редактировать]

Относительнокомментарий, который вы добавили о «еще одной сложности», что есть другая программа, которая удаляет этот CSV-файл один раз в день:содержимое, в противном случае у вас будет случай, когда файл уже удален, но хвост файла еще не импортирован

во-вторых, я думаю, что вновь созданный файл журнала будет намного меньше, чем предыдущий файл, так что вы можете легкоскажи, что журнал пролонгирован.В зависимости от способа удаления файла вы можете использовать дату и время создания файла, как предложил Эрик.
0 голосов
/ 30 мая 2011

Судя по звукам, вы должны сделать шаг назад - что вы на самом деле регистрируете?

Должно быть что-то уникальное, иначе не будет иметь значения, если запись будет вставлена ​​дважды.

Чтобы ответить на ваши вопросы:

  1. Вам нужен способ сопоставить каждую уникальную строку. Вы сказали, что это файл журнала, поэтому я предполагаю, что вы не редактируете (или не обновляете) уже вставленные записи.
  2. Как узнать, когда импортировать новые строки? Очевидно, что нет. Вам нужно будет каждый раз запускать этот процесс и посмотреть, не была ли добавлена ​​строка.
  3. Насколько важны эти данные? Если бы это было что-то вроде транзакции по кредитной карте, вы бы не удалили ее! Если это, скажем, файл журнала из телефонной системы, то почему бы не заархивировать данные?
0 голосов
/ 30 мая 2011

Если у файла журнала нет уникального ключа, то вы в значительной степени застряли, используя номер строки в качестве ключа.(Использование позиции чтения файлового потока, как предложила @Alex Aza, будет более эффективным, но звучит так, будто вы немного застряли, поэтому, начав с номера строки, вы можете начать, а затем улучшите его.)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...