2016-03-15 5 views
0

Хорошо известно, что мы можем загружать данные из нескольких .qvd файлов в QlikView с использованием стандартных символов DOS подстановочных (* и ?), как:Загрузка несколько QVD файлов в указанном порядке

MyTable: 
LOAD 
    * 
FROM 
[myDateStampedQvd*.qvd] 
(qvd) 
Where not Exists(id); 

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

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

Единственной альтернативой, о которой я могу думать, является объединение файлов вручную, что является значительно более хрупким решением. Это мой единственный вариант?

+0

Вы должны загружать только новые файлы, тогда ... Храните таблицу с именем файла, которое вы загрузили, и НЕ загружайте их снова - save это к QVD. Затем загрузите все файлы, которых нет в списке, а затем вы можете «Exist» с QVD. Это также сэкономит вам много времени на загрузку. – EldadT

ответ

1

Вы можете загрузить таблицу с именами файлов и путей первых:

set vRoot = 'C:\Folder'; 

FOR Each Ext in 'qvd' 
    FOR Each File in filelist ('$(vRoot)'&'\*.'&Ext) 

     Load '$(File)' as FilePath, 
     FileSize('$(File)') as Size, 
     FileTime('$(File)') as FileTime, 
     Subfield('$(File)', '\', SubstringCount('$(File)', '\') + 1) as FileName 
     autogenerate 1 ; 
    next File 
next Ext 

нагрузки снова и сортировать по FileTime (или разобрать Timestamp из файла в операторе выше и sorty тем, что)

FileListTable: 
load * Resident [AUTOGENERATE(1)] Order by FileTime desc; 

Отбросьте автоген Таблица

drop table [AUTOGENERATE(1)]; 

наконец загрузить файлы (я не смог проверить, работает ли он с) существует

For vFileNo = 1 to NoOfRows('FileListTable') 

     Let vFileName = Peek('FilePath',vFileNo-1,'FileListTable'); 

     Load *, 

     '$(vFileName)' as FileName 

     From [$(vFileName)]; 

    Next vFileNo 

drop table FileListTable; 
Смежные вопросы