Неофициальный форум разработчиков QlikView и Qlik Sense

Форум разработчиков QlikView и Qlik Sense. Получи любые ответы на вопросы по QlikView и Qlik Sense в течении нескольких часов!

Вы не вошли.

Готовые решения на платйорме QlikView

#1 2015-04-12 19:02:34

padijvd
Участник
Зарегистрирован: 2015-02-18
Сообщений: 4
Windows 8Chrome 41.0.2272.118

Организация загрузки

Добрый день!!!
Подскажите как можно организовать загрузку обновленных данных. А именно имеется около 300 000 xml файлов число которых увеличивается ежедневно примерно на три пять тысяч. в каждом файле также примерно около 50 строк, перезагружать данные соответственно занимает очень много времени... привожу пример кода для удобства.


SET ThousandSep=' ';
SET DecimalSep=',';
SET MoneyThousandSep=' ';
SET MoneyDecimalSep=',';
SET MoneyFormat='# ##0,00 ₽;-# ##0,00 ₽';
SET TimeFormat='h:mm:ss';
SET DateFormat='DD.MM.YYYY';
SET TimestampFormat='DD.MM.YYYY h:mm:ss[.fff]';
SET MonthNames='январь;февраль;март;апрель;май;июнь;июль;август;сентябрь;октябрь;ноябрь;декабрь';
SET DayNames='Пн;Вт;Ср;Чт;Пт;Сб;Вс';

export:
Buffer (Incremental) Load
FileName() as [Имя файла],
    [fcsNotificationEF/id] as id,
    [fcsNotificationEF/purchaseNumber] as [№ закупки],
    mid([fcsNotificationEF/docPublishDate],9,2) as [День публикации закупки],
    Month(mid([fcsNotificationEF/docPublishDate],1,10)) as [Месяц публикации закупки],
    mid([fcsNotificationEF/docPublishDate],1,4) as [Год публикации закупки],
    mid([fcsNotificationEF/docPublishDate],9,2)& ' ' & Month (mid([fcsNotificationEF/docPublishDate],1,10))& ' ' &mid([fcsNotificationEF/docPublishDate],1,4) as [Дата публикации закупки],
    ceil(Month(mid([fcsNotificationEF/docPublishDate],1,10))/3)&' квартал' as Квартал,
    [fcsNotificationEF/href] as [Ссылка на ООС],
    [fcsNotificationEF/purchaseObjectInfo] as [Предмет закупки],        
    [fcsNotificationEF/lot/maxPrice] as [НМЦК],
    [fcsNotificationEF/lot/financeSource] as [Источник финансирования],
    [fcsNotificationEF/lot/customerRequirements/customerRequirement/deliveryTerm] as [Сроки поставки товара],
    [fcsNotificationEF/lot/customerRequirements/customerRequirement/applicationGuarantee/amount] as [Обеспечение заявки],
    [fcsNotificationEF/lot/customerRequirements/customerRequirement/contractGuarantee/amount] as [Обеспечение контракта],
    [fcsNotificationEF/lot/customerRequirements/customerRequirement/contractGuarantee/part] as [Процент на обеспечение исполнения контракта],
    [fcsNotificationEF/lot/customerRequirements/customerRequirement/applicationGuarantee/part] as [Процент на обеспечение заявки],
    [fcsNotificationEF/lot/customerRequirements/customerRequirement/kladrPlaces/kladrPlace/kladr/fullName]&' '&[fcsNotificationEF/lot/customerRequirements/customerRequirement/kladrPlaces/kladrPlace/deliveryPlace] as [Место доставки товара, выполнения работ],
    mid([fcsNotificationEF/procedureInfo/bidding/date],9,2)& ' ' & Month (mid([fcsNotificationEF/procedureInfo/bidding/date],1,10))& ' ' &mid([fcsNotificationEF/procedureInfo/bidding/date],1,4) as [Дата Аукциона/Определения победителя],
    mid([fcsNotificationEF/procedureInfo/collecting/startDate],9,2)& ' ' & Month (mid([fcsNotificationEF/procedureInfo/collecting/startDate],1,10))& ' ' &mid([fcsNotificationEF/procedureInfo/collecting/startDate],1,4) as [Дата начала подачи документов],
    [fcsNotificationEF/procedureInfo/collecting/place]&'  '&[fcsNotificationEF/ETP/name]&'   по адресу  '&[fcsNotificationEF/ETP/url] as [Место подачи заявки],
    [fcsNotificationEF/procedureInfo/collecting/order] as [Порядок подачи заявок],
    mid([fcsNotificationEF/procedureInfo/collecting/endDate],9,2)& ' ' & Month (mid([fcsNotificationEF/procedureInfo/collecting/endDate],1,10))& ' ' &mid([fcsNotificationEF/procedureInfo/collecting/endDate],1,4) as [Дата окончания подачи документов],
    [fcsNotificationEF/ETP/name] as [Площадка],
    [fcsNotificationEF/ETP/url] as [Адрес площадки],
    [fcsNotificationEF/placingWay/name] as [Тип закупки],
    Replace([fcsNotificationEF/lot/purchaseObjects/purchaseObject/OKPD/code],'.','_') as [ОКПД],
    [fcsNotificationEF/lot/purchaseObjects/purchaseObject/OKPD/name] as [Наименование ОКПД],
    [fcsNotificationEF/purchaseResponsible/responsibleInfo/contactEMail] as [EMail заказчика],
    [fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPhone] as [Телефон заказчика],
    [fcsNotificationEF/purchaseResponsible/responsibleInfo/contactFax] as [Факс заказчика],
    [fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/lastName] as [Фамилия ОЛ],
    [fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/firstName] as [Имя ОЛ],
    [fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/middleName] as [Отчество ЛО],
    [fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/lastName]&' '&[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/firstName]&' '&[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/middleName] as [ФИО ответственного лица заказчика],
    [fcsNotificationEF/purchaseResponsible/responsibleOrg/fullName] as [Заказчик],
    [fcsNotificationEF/purchaseResponsible/responsibleOrg/postAddress] as [Почтовый адрес],
    [fcsNotificationEF/purchaseResponsible/responsibleOrg/factAddress] as [Фактический адрес],
    trim(subfield([fcsNotificationEF/purchaseResponsible/responsibleOrg/factAddress],',',3)) as [Область],
    trim(subfield([fcsNotificationEF/purchaseResponsible/responsibleOrg/factAddress],',',4)) as [Город],
    [fcsNotificationEF/purchaseResponsible/responsibleOrg/INN] as [ИНН заказчика],
    [fcsNotificationEF/purchaseResponsible/responsibleOrg/KPP] as [КПП заказчика],
    %Key_export_2C54E0F74D336CCA    // Key for this table: export
FROM [C:\Users\padij_000\Desktop\123\fcsNotificationEA44*.xml] (XmlSimple, Table is [export]);
// End of [аукцион.xml] LOAD statements


Так и не понял как это сделать с помощью Инкрементальной загрузки.

Неактивен

#2 2015-04-14 13:52:42

Oleg Orlov
Участник
Зарегистрирован: 2015-02-16
Сообщений: 14
Windows 7Chrome 41.0.2272.118

Re: Организация загрузки

Добрый день!

В вашем случае особого смысла использовать префикс Buffer с опцией Incremental нет. Он был бы полезен, если бы ваши XML файлы со временем менялись, а именно в них добавлялись бы новые строки. Алгоритм этой функциональности примерно следующий: если количество строк после предыдущей выгрузки XML файла в буферный файл QVD не изменилось, то загрузка будет осуществляться только из этого QVD файла, иначе дополнительно будет догружены дополнительные строки из изменненного XML файла и в завершении будет перезаписан созданный QVD файл, содержащий уже все данные. Так как вы постоянно загружаете данные из всех файлов, пускай даже по большей части не из исходных XML, а из QVD, скорость загрузки особо не меняется.

Вам необходимо реализовать загрузку таким образом, чтобы данные в QlikView загружались сначала из ранее загруженных файлов, а затем происходило добавление (конкатенация) информации из новых. Т.е. при самой первой загрузке вы обработаете данные из 300000 файлов и выгрузите всю накопленную информацию в общий QVD файл. При второй загрузке сначала загрузите данные из новых 3000 XML файлов, а затем добавите данные из созданного при прошлой загрузке QVD файла и в конце вновь выгрузите всю накопленную информацию в общий QVD файл. Т.е. вы уже не будете загружать из 303000 файлов, а только лишь из 3001 (один QVD файл, содержащий данные из 300000 XML и 3000 новых XML файлов).

Кратко алгоритм:
1. Загрузить данные из новых XML;
2. Загрузить старые данные из QVD;
3. Создать новый QVD (перезаписать);
4. Повторить процедуру при следующей загрузке.

Для реализации вам скорее всего потребуются следующие выражения QlikView:
1. Цикл For each..next;
2. Функция Filelist;
3. Операция конкатенации таблиц - Concatenate;
4. Операция выгрузки таблицы QlikView на жесткий диск - Store.

С уважением,
Олег Орлов

Редактировался Oleg Orlov (2015-04-14 13:59:32)

Неактивен

#3 2015-04-14 14:13:14

padijvd
Участник
Зарегистрирован: 2015-02-18
Сообщений: 4
Windows 8Chrome 41.0.2272.118

Re: Организация загрузки

Oleg Orlov пишет:

Добрый день!

В вашем случае особого смысла использовать префикс Buffer с опцией Incremental нет. Он был бы полезен, если бы ваши XML файлы со временем менялись, а именно в них добавлялись бы новые строки. Алгоритм этой функциональности примерно следующий: если количество строк после предыдущей выгрузки XML файла в буферный файл QVD не изменилось, то загрузка будет осуществляться только из этого QVD файла, иначе дополнительно будет догружены дополнительные строки из изменненного XML файла и в завершении будет перезаписан созданный QVD файл, содержащий уже все данные. Так как вы постоянно загружаете данные из всех файлов, пускай даже по большей части не из исходных XML, а из QVD, скорость загрузки особо не меняется.

Вам необходимо реализовать загрузку таким образом, чтобы данные в QlikView загружались сначала из ранее загруженных файлов, а затем происходило добавление (конкатенация) информации из новых. Т.е. при самой первой загрузке вы обработаете данные из 300000 файлов и выгрузите всю накопленную информацию в общий QVD файл. При второй загрузке сначала загрузите данные из новых 3000 XML файлов, а затем добавите данные из созданного при прошлой загрузке QVD файла и в конце вновь выгрузите всю накопленную информацию в общий QVD файл. Т.е. вы уже не будете загружать из 303000 файлов, а только лишь из 3001 (один QVD файл, содержащий данные из 300000 XML и 3000 новых XML файлов).

Кратко алгоритм:
1. Загрузить данные из новых XML;
2. Загрузить старые данные из QVD;
3. Создать новый QVD (перезаписать);
4. Повторить процедуру при следующей загрузке.

Для реализации вам скорее всего потребуются следующие выражения QlikView:
1. Цикл For each..next;
2. Функция Filelist;
3. Операция конкатенации таблиц - Concatenate;
4. Операция выгрузки таблицы QlikView на жесткий диск - Store.

С уважением,
Олег Орлов

Спасибо, Олег за ответ!
А не могли бы вы показать пример кода как это правильно реализовать?

Неактивен

#4 2015-04-14 17:21:26

GromovSergey
Администратор
Зарегистрирован: 2015-01-29
Сообщений: 9
Windows 7Chrome 41.0.2272.118

Re: Организация загрузки

padijvd пишет:
Oleg Orlov пишет:

Добрый день!

С уважением,
Олег Орлов

Спасибо, Олег за ответ!
А не могли бы вы показать пример кода как это правильно реализовать?

Уважаемый коллега, напишите мне на адрес grom@biconsult.ru (желательно с корпоративного адреса, с указанием контактных данных), мы поможем Вам документацией по инкрементальной загрузке и посоветуем варианты.
Желательно указать спецификацию QV, которая используется, коннекторы (например 1С-Коннектор), к чему коннектитесь. Может быть пример кода, который есть сейчас.
Также можем провести аудит, как загрузка делается сейчас и как ее можно улучшить.

Best regards,
Sergey Gromov
BI Consult
tel. +7 (812) 334-08-01
skype: sgromych
LinkedIn: http://ru.linkedin.com/in/gromovsergey
e-mail: grom@biconsult.ru

Неактивен

#5 2016-03-21 14:32:49

Roman
Участник
Зарегистрирован: 2016-03-21
Сообщений: 4
LinuxChrome 48.0.2564.109

Re: Организация загрузки

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE
WHERE ModificationTime  >= #$(LastExecTime)#
AND ModificationTime  <  #$(BeginningThisExecTime)#;
Concatenate LOAD PrimaryKey, X, Y FROM File.QVD;
STORE QV_Table INTO File.QVD;

Неактивен

#6 2016-03-23 16:56:27

Yulia
Участник
Зарегистрирован: 2016-01-13
Сообщений: 34
Windows XPChrome 49.0.2623.87

Re: Организация загрузки

День добрый!
Использую функцию Filelist, а не подскажите, нет ли аналогичной функции для перебора каталогов? (у меня надо выбрать файлы из всех каталогов, каталоги создают пользователи...)

Заранее спасибо!

Уррра! Нашла в справке:
// Пример 2 — отобразить список всех файлов на диске, связанных с QV
sub DoDir (Root)
for each Ext in 'qvw', 'qvo', 'qvs', 'qvt', 'qvd'
for each File in filelist (Root&'\*.' &Ext)
Load '$(File)' as Name, FileSize( '$(File)' ) as
Size, FileTime( '$(File)' ) as FileTime
autogenerate 1;
next File
next Ext
for each Dir in dirlist (Root&'\*' )
call DoDir (Dir)
next Dir
end sub

call DoDir ('C:')

Редактировался Yulia (2016-03-24 20:23:30)


новичок в QlikView

Неактивен

Сейчас в этой теме форумчан: 0, гостей: 1
[Bot] claudebot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.020 сек, 10 запросов выполнено - Использовано памяти: 1.57 Мбайт (Пик: 1.67 Мбайт) ]