5 Replies Latest reply: Mar 6, 2017 9:30 AM by Aleksandr Melnikov RSS

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

    Vasiliy Beshentsev

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

      Подскажите, пожалуйста, как правильно прописать код в скрипте загрузки данных для создания новой таблицы на основе 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
      Объясните, пожалуйста, как правильно написать код?

       

        • Re: Как создать новую таблицу?
          Eugeny Ilyin

          Добрый день.

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

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

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

          NoConcatenate load * Resident t3;

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

            • Re: Как создать новую таблицу?
              Vasiliy Beshentsev

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

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


              [t3-4]:

              load

                ProdID as ProdID1,

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

              resident t3;

              left join

              load 

                ProdID as ProdID1

                // ещё поля

              Resident t4;


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


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

                • Re: Как создать новую таблицу?
                  Aleksandr Melnikov

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

                   

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

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

              • Re: Как создать новую таблицу?
                Andrey Khoronenko

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

                 

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

                 

                С уважением

                 

                Андрей

                  • Re: Как создать новую таблицу?
                    Vasiliy Beshentsev

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

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

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

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

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

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