16 февраля 2011 г.

Опустошаем существующий QVD файл

День добрый, коллеги.

Сегодня натолкнулся на один интересный пост нашего австрийского коллеги по цеху. Пост этот об удалении существующих 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);

2 комментария:

  1. А какой смысл в онулении qvd файла?
    Разве он не переписывается при повторном его формировании через store ?

    ОтветитьУдалить
  2. Переписывается, тут вы правы. Но иногда нужен именно пустой файл, но со всей структурой полей (чтобы скрипт не "падал" при попытки загрузки этого QVD)
    например, в той ситуации которую описал Штефан. Допустим у нас реализована инкрементальная загрузка, которая естесственно использует QVD файл. И в каких-то моментах нам нужно прогнать полную загрузку. В этом случае одним из вариантов реализации скрипта может быть как раз такой способ предварительной очистки QVD с историческими транзакциями...

    ОтветитьУдалить