День добрый, коллеги.
Сегодня натолкнулся на один интересный пост нашего австрийского коллеги по цеху. Пост этот об удалении существующих QVD файлов через QlikView скрипт. Штефан (автор блога и поста) рассказывает о целых 3х способах для удаления/очищения QVD. Первые два представляют собой вызов либо внутреннего макроса для удаления, либо вызов батника (командного файла), посредством выполнения команды EXECUTE. Оба этих способа сопряжены с предоставлением особых привилегий либо макро-модулю, либо сценарию загрузки. Штефан более подробно и с картинками об этом честно рассказывает, поэтому здесь я не стану на этом детально останавливаться...
А вот что касается третьего способа, то тут у меня есть небольшие мысли относительно небольшой оптимизации процедуры очищения QVD-файла.
Штефан предлагает вот такую процедуру очистки QVD файла:
Показать...
В этом коде меня смутил один излишний, на мой взгляд, шаг. А именно, создание временной «фейковой» таблицы FakeFieldTable со случайным значением для последующей проверки со значениями из QVD файла. На мой взгляд, этот шаг (строки с 11ой по 19ую включительно) можно смело исключить из данной процедуры. Ведь, как я уже писал, функция Exists() может выполнять проверку внутри одного и того же оператора загрузки LOAD. Иначе говоря, нам необязательно иметь в памяти предварительно загруженное поле, чтобы использовать его в качестве параметра для функции Exists() (как это делает Штефан). Пример с реализацией выше озвученной мысли можно взять здесь.
ОБНОВЛЕНО 01-04-2011 (и это не первоапрельская шутка):
Как оказалось есть еще более простой способ обнулить существующий QVD файл и выглядит он примерно вот так:
QVDTable:
LOAD *
FROM '$(qvdFilePath)' (qvd)
WHERE 1=0;
//Сохраняем пустую таблицу в тот же самый QVD-файл
STORE QVDTable INTO $(qvdFilePath) (qvd);
А какой смысл в онулении qvd файла?
ОтветитьУдалитьРазве он не переписывается при повторном его формировании через store ?
Переписывается, тут вы правы. Но иногда нужен именно пустой файл, но со всей структурой полей (чтобы скрипт не "падал" при попытки загрузки этого QVD)
ОтветитьУдалитьнапример, в той ситуации которую описал Штефан. Допустим у нас реализована инкрементальная загрузка, которая естесственно использует QVD файл. И в каких-то моментах нам нужно прогнать полную загрузку. В этом случае одним из вариантов реализации скрипта может быть как раз такой способ предварительной очистки QVD с историческими транзакциями...