3 Replies Latest reply: Mar 30, 2017 6:03 AM by Владимир Фасюра RSS

    Менеджер загрузок таблиц при частичной загрузке

    Владимир Фасюра

      Добрый день!

       

      Столкнулся с тем, что в работе использую много таблиц.   источники часто обновляются, поэтому QVD использовать не могу, - надо обновлять таблицы с сервера. Запросы тяжёлые.. . Но не все таблицы разом надо обновлять, а избранные.

       

      Решил сделать этакий "менеджер" частичной загрузки, чтобы обновлять только те таблицы, которые я захочу..  не меняя при этом каждый раз скрипт загрузки.

       

      Я столкнулся с небольшой проблемкой по самому Replace (таблица не перезагружалась, а добавлялась с постфиксом "-1",  "-2"  итд..    пришлось использовать  Drop Table (с set errormode=0 и принудительно использовать NoConcatenate) - но то мелочи..

       

      И большой неприятностью для меня было, что не получилось использовать переменную для впихивания Replace в нужные мне участки кода...

       

      **************************************

      Привет:
      $(v1)

       

      NoConcatenate   LOAD * INLINE [
      Персонаж, Оружие
      Зилибоба, Карандаши
      Арканоид, Звезда
      Тельнар, Луч
      Алуриель, Сферы
      ]
      ;

      *******************************************

      При этом в переменную v1    что я только не пихал, чтобы как-то сделать вывод Replace по нужному мне условию..

      Взял одну таблицу.. при выборе поля,  условная переменная должна возвращать Replace в скрипт.     но не возвращает

       

      =if(GetFieldSelections("$Table")='Привет','Replace')

       

       

      Пробовал баловаться со знаком "="  в переменной..   в скрипте..   вложенные $()  делал -  в скрипт не хочет выводиться результат формулы..   что я не так делаю?

       

      Нужно, чтобы в скрипт прописывалось Replace при выборе нужного мне поля..

       

      Я считал что это просто .. да и логично:  выбрал нужное поле, нажал  CTRL+SHIFT+R    и перезагрузилась нужная таблица..

       

      Помогите, кто знает как это реализовать..

      Логику я потом допилю, усовершенствую.. но без этого шага ничего не получится..

       

      Заранее спасибо

        • Re: Менеджер загрузок таблиц при частичной загрузке
          Vladimir Kozlov

          Привет

          Интересно

          Не пробовали использовать доступные методы инкрементной загрузки данных(при этом в базе должна фиксироваться дата/время изменения)?

          Например:

          Загрузка новых и обновленных записей с помощью инкрементальной загрузки ‒ Qlik Sense

            • Re: Менеджер загрузок таблиц при частичной загрузке
              Владимир Фасюра

              Нет.. мне это не подходит.. тут дело даже не в загрузке данных.. а в обработке скрипта на сервере..  чтобы проверить время изменения, сервер всё равно прилично думает..

               

              Фишка была в том, чтобы при изменении таблицы на сервере (Например, IT позвонил и сказал что исправил багнутую таблицу), я мог, не залезая в скрипт,  парой движений мышки   перезагрузить нужную мне таблицу. (Например, у меня их 20 и каждая из них отрабатывает от 5 до 50  минут)

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

               

              Короче - сейчас подумал. . мозги сообразили как решить эту проблему..   немного другим путём. .так что если кто знает, как значение ВЫЧИСЛЯЕМОЙ переменной пропихнуть в скрипт - пишите, буду рад. .

               

               

              А решение состоит в следующем:

              Формулы в переменной скрипта не воспринимаются..  но воспринимаются Простые значения..

               

              Поэтому, раз Магомед не идёт к горе, Гора пошла к Магомеду:

               

              Я создал кнопку, которая устанавливает переменные по нужной мне формуле, записывая в них статическое значение Replace или '//' в зависимости от выбранного поля..

               

               

               

              ***************************************************************

               

               

              $(v2)
              Дюшман:
              LOAD * INLINE
              [
              Аф, Оф
              Зилибоба, Карандаши
              Арканоид, Звезда
              Тельнар, Луч
              Алуриель, Сферы
              ]
              ;

              Привет:


              $(v1)

              LOAD * INLINE
              [
              Персонаж, Оружие
              Зилибоба, Карандаши
              Арканоид, Звезда
              Тельнар, Луч
              Алуриель, Сферы
              ]
              ;

              ************************************************************************

               

               

               

              Выражение для v1: 

              =if(GetFieldSelections($Table)like '*Привет*','Replace','//')

              Выражение для v2:  

              =if(GetFieldSelections($Table)like '*Дюшман*','Replace','//')

               

              И так далее - сколько у вас там таблиц

              Таким образом,  Выбрав нужные поля-таблицы,  нажав кнопку установки переменных,   при нажатии CTRL+SHIFT+R    загрузится именно то, что Вам надо.

               

               

              Ну. .в своём приложении, конечно, покрасивее сделаю, но Принцип ясен. Функцию в два движения мыши выполняет (можно выбрать как одно, так и несколько полей)

               

              Я не знаю.. считать ли этот вопрос решённым?   всё-таки механизм передачи формульной переменной в скрипт мне ещё не ясен..

               

              Ставьте лайки,  делитесь идеями 

            • Re: Менеджер загрузок таблиц при частичной загрузке
              Anna Klimkova

              Владимир,

              Вы можете хранить оператор Replace или любой кусок кода в текстовых файлах и вызывать с помощью include или Must_Include.

               

              if  v1='Replace' then

                   $(include = 'путь к файлу 1')

              else

                   $(include = 'путь к файлу 2')

              end if;

               

              Не самый изящный вариант, но вдруг пригодится.