Пропуск отсутствующего поля при загрузке

Автор Maks248, 21 июля 2020, 02:56:28

« назад - далее »

Maks248

Можно ли как-то при загрузке данных из qvd файлов загружать только существующие поля.
Например:
Есть таблица1

Таблица1:
Load * Inline [Поле1, Поле2]

Есть много qvd, структкра у которых разная
у кого-то поля:
Поле1, Поле2

у других:
Поле1, Поле2, Поле3, Поле4


Скрипт проходит циклом:

FOR Each vFile in FileList('C:/Остатки\Остатки_*.qvd')

Concatenate ([Таблица1])

Load

Поле1 as 111,
Поле2 as 222,
Поле3 as 333,
Поле4 as 444

From $(vFile ) (qvd);


Next vFile

Если нет какого-то поля, можно его при загрузке проигнорировать?


При этом
Set ErrorMode=0 если все поля хоть раз попадаются в одном из файлов.
Но не помогает если какого-либо поля не встретилось ни в одном из qvd файле.




govorun

Поставьте в цикл условие на название файла .qvd.
Если файл называется AAA, тогда прописываете код загрузки, например все поля,
если файл называется BBB, тогда прописывайте код загрузки, например все поля + одно дополнительное со значением NULL.

Либо при формировании файлов-источников (.qvd) создавать одинаковое кол-во полей.
А правильнее наверное было бы при формировании файлов-источников (.qvd) сразу создавать один файл.
Варианты должны рассматриваться исходя из Ваших данных в таблицах. Может быть было бы логичнее где-то применить JOIN.

Maks248

#2
Вариант, конечно, на случай, когда есть соответствие имени-наличие полей.
Qvd-шники собираются из тысяч xml-ников, в которых наличие полей какое-то произвольное, единственное есть - полный возможный список полей.
В принципе, прокатил такой вариант:

FOR Each vFile in FileList('C:\Остатки\Остатки_*.qvd')
Set ErrorMode=0;

Temp_tbl:
Load
*
From [$(vFile )] (qvd);

Concatenate ([Таблица1])
Load

Поле1 as 111,
Поле2 as 222,
Поле3 as 333,
Поле4 as 444

Resident Temp_tbl;
Drop table Temp_tbl;



Next vFile

Set ErrorMode=1;

Ругается, конечно, но при ErrorMode=0 все равно дописывает имеющиеся данный в Таблица1


govorun

Цитата: Maks248 от 22 июля  2020, 04:30:30  Qvd-шники собираются из тысяч xml-ников, в которых наличие полей какое-то произвольное
Это плохо. У Вас отсутствует система формирования файлов-источников данных для Клика. Предположу, что и QVD-файлов у Вас многовато. Со временем (очень скоро) Ваш Клик превратится в мусорку, если уже не превратился. Может у Вас еще и каждый xml-файл в отдельный QVD грузится?

Maks248

#4
Цитата: govorun от 22 июля  2020, 06:42:19  Это плохо
Согласен.

xml-ники выгружаются раз в час(ну или типа того) по разным направлениям - отдельный. Логика сего мне неведома.
К сожалению, повлиять на ситуацию - нет возможности.
Проект пилотный, лепится из гов  того, что есть, без попыток напрячь заказчика.
Эти xml-ники, на этапе Extract. собираются в отдельный qvd за день (пока так). На этапе Transform собираются в один qvd (ну или будет разбит на несколько, пока не решено)


govorun

Вам потусторонняя контора лепит Клик? Это не совсем здорово.
Сначала они вам слепят гав ерунду и возьмут бабки и немалые.
Потом вы захотите что-нибудь вытащить из Клика, а они скажут,
что для этого нужно все переделывать и будут якобы переделывать - и снова за бабки.
Пущай сразу делают по-уму.

Яндекс.Метрика