Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Vasiliy_Beshentsev
Creator III
Creator III

Как создать новую таблицу?

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

Подскажите, пожалуйста, как правильно прописать код в скрипте загрузки данных для создания новой таблицы на основе 2-х уже загруженных таблиц?


Итак, загружаю в Клик 2 таблицы:

t3:

select ... ;

t4:

select ... ;

Далее прописываю следующее:

[t3-4]:

load * resident t3;

inner join load * resident t4;

И у меня получается вообще какая-то белеберда - в таблицу т3 данные грузятся повторно(!) (не понятно вообще почему). Загрузчик хоть и пишет, что грузит данные в таблицу т3-4, но по факту нет.

Подключенный

t3 << Источник данных1
Выбранные строки: 1 442
t4 << Источник данных2
Выбранные строки: 904
t3 << t3
Выбранные строки: 2 884
t3-4 << t4
Выбранные строки: 904
Создание индекса поиска
Создание индекса поиска выполнено успешно
Поясню по задаче. Мне необходимо обработать таблицу т3 два раза, один из них по соединению с таблицей т4. Второй раз по другим условиям. Итоге хочу получить 2 новые таблицы: т3-4 и т3-5
Объясните, пожалуйста, как правильно написать код?

1 Solution

Accepted Solutions
Vasiliy_Beshentsev
Creator III
Creator III
Author

Странно, что это верно, ведь я же объявил имя новой таблицы [t3-4]: и ожидаю, что джоин отработает результат в неё. Может кто-то объяснит мне как это реально работает? Почему, несмотря на объявление новой таблицы в неё ничего не пишется и она вообще не создаётся при таком объявлении?

И в продолжение сразу: а вот при таком


[t3-4]:

load

  ProdID as ProdID1,

    //.... ещё поля

resident t3;

left join

load 

  ProdID as ProdID1

  // ещё поля

Resident t4;


объявлении, когда я прописываю названия строк, которые надо загрузить в новую таблицу всё работает. Новая таблица [t3-4] создаётся, и количество строк переваливает сразу за миллион в новой таблице. Выяснил, что поля фактически перемножаются. Какого чёрта это происходит? Как написать то правильно?


Как прописать условия для джоина? Ну вот те, которые обычно идут после ON? Как дать понять клику какие поля ключевые?

View solution in original post

5 Replies
Eugeny_Ilyin
Creator II
Creator II

Добрый день.

Все верно сработано.

Поля одинаковые, команды не объединять не было. В результате t3 удвоилась.

Используйте :

NoConcatenate load * Resident t3;

Кстати, объединение можно сделать  сразу на загрузке t4;

Vasiliy_Beshentsev
Creator III
Creator III
Author

Странно, что это верно, ведь я же объявил имя новой таблицы [t3-4]: и ожидаю, что джоин отработает результат в неё. Может кто-то объяснит мне как это реально работает? Почему, несмотря на объявление новой таблицы в неё ничего не пишется и она вообще не создаётся при таком объявлении?

И в продолжение сразу: а вот при таком


[t3-4]:

load

  ProdID as ProdID1,

    //.... ещё поля

resident t3;

left join

load 

  ProdID as ProdID1

  // ещё поля

Resident t4;


объявлении, когда я прописываю названия строк, которые надо загрузить в новую таблицу всё работает. Новая таблица [t3-4] создаётся, и количество строк переваливает сразу за миллион в новой таблице. Выяснил, что поля фактически перемножаются. Какого чёрта это происходит? Как написать то правильно?


Как прописать условия для джоина? Ну вот те, которые обычно идут после ON? Как дать понять клику какие поля ключевые?

ahaahaaha
Partner - Master
Partner - Master

Доброе утро, Василий!

Помимо рекомендации Евгения выше использовать команду NoConcatenate следует заметить, что Ваши таблицы t3, t4 и [t3-4] после выполнения скрипта еще и автоматически объединятся связями по одноименным полям платформой Qlik .Видимо поэтому  Вы и наблюдаете какую-то белиберду. Чтобы этого избежать, надо либо переименовывать поля в процессе формирования таблиц [t3-4]  и [t3-5] (при помощи оператора as), либо удалять исходные таблицы t3 и t4 до момента завершения исполнения кода скрипта (команда drop table).

С уважением

Андрей

Vasiliy_Beshentsev
Creator III
Creator III
Author

Нет, извиняюсь, всё на самом деле я правильно написал.

Нашёл свою ошибку в другом месте (напутал с датами).

Лефт и иннер джоины отрабатывают как положено.

При объединении необходимо, чтобы поля, по которым необходимо связать таблицы, должны иметь оиднаковое имя, ProdID1 в данном случае.

Дропать таблицы не обязательно, связка полей в первых двух таблицах по каким либо полям не имеет значения для создания новой таблицы.

Ключевое поле в новой таблице обзываем по другому, чтобы не связалось с первыми двумя таблицами.

millik89
Contributor II
Contributor II

1)Ключевые поля указывать не надо. Клик сам связвает таблицы по одинаковым полям.

2) Новая таблица не создается, потому что клик имеет дурную привычку объеденять 2 и более последовательно загружаемых таблиц если у них схожие поля, а если вообще одинаковые то и подавно. (Аналог использования префикса Concatenate перед оператором Load). И получается у вас что t3-t4 грузится в t3.

В таком случае клику нужно явно скармливать префикс No Concatenate, чтобы он эти таблицы не объеденял.