Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Добрый день, коллеги!
Подскажите, пожалуйста, как правильно прописать код в скрипте загрузки данных для создания новой таблицы на основе 2-х уже загруженных таблиц?
Итак, загружаю в Клик 2 таблицы:
t3:
select ... ;
t4:
select ... ;
Далее прописываю следующее:
[t3-4]:
load * resident t3;
inner join load * resident t4;
И у меня получается вообще какая-то белеберда - в таблицу т3 данные грузятся повторно(!) (не понятно вообще почему). Загрузчик хоть и пишет, что грузит данные в таблицу т3-4, но по факту нет.
Подключенный
Странно, что это верно, ведь я же объявил имя новой таблицы [t3-4]: и ожидаю, что джоин отработает результат в неё. Может кто-то объяснит мне как это реально работает? Почему, несмотря на объявление новой таблицы в неё ничего не пишется и она вообще не создаётся при таком объявлении?
И в продолжение сразу: а вот при таком
[t3-4]:
load
ProdID as ProdID1,
//.... ещё поля
resident t3;
left join
load
ProdID as ProdID1
// ещё поля
Resident t4;
объявлении, когда я прописываю названия строк, которые надо загрузить в новую таблицу всё работает. Новая таблица [t3-4] создаётся, и количество строк переваливает сразу за миллион в новой таблице. Выяснил, что поля фактически перемножаются. Какого чёрта это происходит? Как написать то правильно?
Как прописать условия для джоина? Ну вот те, которые обычно идут после ON? Как дать понять клику какие поля ключевые?
Добрый день.
Все верно сработано.
Поля одинаковые, команды не объединять не было. В результате t3 удвоилась.
Используйте :
NoConcatenate load * Resident t3;
Кстати, объединение можно сделать сразу на загрузке t4;
Странно, что это верно, ведь я же объявил имя новой таблицы [t3-4]: и ожидаю, что джоин отработает результат в неё. Может кто-то объяснит мне как это реально работает? Почему, несмотря на объявление новой таблицы в неё ничего не пишется и она вообще не создаётся при таком объявлении?
И в продолжение сразу: а вот при таком
[t3-4]:
load
ProdID as ProdID1,
//.... ещё поля
resident t3;
left join
load
ProdID as ProdID1
// ещё поля
Resident t4;
объявлении, когда я прописываю названия строк, которые надо загрузить в новую таблицу всё работает. Новая таблица [t3-4] создаётся, и количество строк переваливает сразу за миллион в новой таблице. Выяснил, что поля фактически перемножаются. Какого чёрта это происходит? Как написать то правильно?
Как прописать условия для джоина? Ну вот те, которые обычно идут после ON? Как дать понять клику какие поля ключевые?
Доброе утро, Василий!
Помимо рекомендации Евгения выше использовать команду NoConcatenate следует заметить, что Ваши таблицы t3, t4 и [t3-4] после выполнения скрипта еще и автоматически объединятся связями по одноименным полям платформой Qlik .Видимо поэтому Вы и наблюдаете какую-то белиберду. Чтобы этого избежать, надо либо переименовывать поля в процессе формирования таблиц [t3-4] и [t3-5] (при помощи оператора as), либо удалять исходные таблицы t3 и t4 до момента завершения исполнения кода скрипта (команда drop table).
С уважением
Андрей
Нет, извиняюсь, всё на самом деле я правильно написал.
Нашёл свою ошибку в другом месте (напутал с датами).
Лефт и иннер джоины отрабатывают как положено.
При объединении необходимо, чтобы поля, по которым необходимо связать таблицы, должны иметь оиднаковое имя, ProdID1 в данном случае.
Дропать таблицы не обязательно, связка полей в первых двух таблицах по каким либо полям не имеет значения для создания новой таблицы.
Ключевое поле в новой таблице обзываем по другому, чтобы не связалось с первыми двумя таблицами.
1)Ключевые поля указывать не надо. Клик сам связвает таблицы по одинаковым полям.
2) Новая таблица не создается, потому что клик имеет дурную привычку объеденять 2 и более последовательно загружаемых таблиц если у них схожие поля, а если вообще одинаковые то и подавно. (Аналог использования префикса Concatenate перед оператором Load). И получается у вас что t3-t4 грузится в t3.
В таком случае клику нужно явно скармливать префикс No Concatenate, чтобы он эти таблицы не объеденял.