Как сделать скрипт загрузки, загружающий несколько файлов в одну таблицу

У меня есть несколько файлов, названных по соглашению: «data_YYYY.MM.xslx». Мне нужно загрузить все эти файлы в одну таблицу qlikview, но когда я это делаю:

Tab:
load Name, Number from [data_*.csv];

Я получаю файлы Tab, Tab-1, Tab-2 для каждого файла.

Я также пытался сделать:

Tab:
add load Name, Number from [data_*.csv];

С тем же эффектом.

Если кто-нибудь знает, как это сделать, пожалуйста, помогите.


person gabba    schedule 04.07.2012    source источник


Ответы (5)


Этот вопрос не имеет смысла, если вы не упустили некоторые детали.

QlikView будет неявно добавлять все данные в исходную таблицу «Вкладка» с помощью такого оператора, как:

Вкладка: загрузить Имя, Номер из [data_*.csv] (txt);

Обратите внимание на формат файла, указанный в скобках.

Добавление данных неявно происходит всякий раз, когда таблица загружается с точно такими же именами полей, что и уже созданная таблица. Итак, в вашем примере первый обнаруженный файл представляет собой загрузку данных из этого файла. Предполагая, что имена полей действительно указаны в соответствии с вашим вопросом, в результирующей таблице должно быть два поля: «Имя» и «Номер». Когда второй файл встречается с помощью совпадения с подстановочным знаком, происходит вторая загрузка, и она добавляет эти данные в таблицу «Вкладка».

Если вы НЕ хотите полагаться на НЕЯВНУЮ конкатенацию (терминология QlikView для добавления данных в существующую таблицу), вы можете вместо этого написать цикл FOR для загрузки ваших файлов, используя явный префикс загрузки CONCATENATE, чтобы указать на таблицу, в которую вы хотите добавить данные. .

E.g.

// Трюк QV для "объявления" таблицы

Вкладка: LOAD null() AS Name AUTOGENERATE(1) WHERE RecNo() ‹ 0;

ДЛЯ КАЖДОГО файла В списке файлов ('data_*.csv')

СЦЕПИТЬ('Вкладка') ЗАГРУЗИТЬ * ИЗ [$(файл)] (txt);

СЛЕДУЮЩИЙ файл

person Jonas Valleskog    schedule 19.09.2013

Этот хак работает для меня:

tmp:
LOAD @1 inline [@1];
Tab:
Concatenate load Name, Number from [data_*.csv];
person gabba    schedule 04.07.2012
comment
Спасибо, конкатенация работает. В моем случае: загрузите имя, номер из [data_*.csv]; теперь будет создавать только 2 таблицы, но подключенные с помощью синтетического ключа, что мне не нравится. - person zhihong; 07.09.2017

Вы можете сделать это следующим образом:

Load * from data_*.csv;

Просто используйте маску в имени файла.

person Fedor    schedule 04.06.2013
comment
СПАСИБО (Спасибо) Федя! С вашим способом я получаю таблицы Tab, Tab-1, Tab-2 для каждого файла. Посмотрите на мой вопрос. - person gabba; 05.06.2013

И для полноты один способ с циклом (здесь с использованием файлов qvd):

FOR Each db_schema in '2013-07','2013-08','2013-09'
LOAD ...., db_schema
FROM `x-$(db_schema)`.`qvd` (qvd);
next;

(Знание имен.)

person smartmeta    schedule 07.10.2013

Вот еще один способ, если имена файлов разные

Вкладка: загрузить имя, номер из [data_1.csv]; присоединиться (Tab) загрузить имя, номер из [data_2.csv];

person Aji Paul    schedule 16.08.2012
comment
Спасибо за ответ. Ваш способ будет работать, если имена статичны и известны ранее. Я уверен, что это будет полезно для кого-то. - person gabba; 31.08.2012