2 Replies Latest reply: Sep 26, 2014 3:22 AM by Anton Bezd RSS

    сокращение строк load distinct...

    Anton Bezd

      Всем привет!

      При загрузке данных в приложение мне часто приходится выполнять операцию сокращения строк в таблице фактов путем объединения ее с таблицей справочника по коду. Например так

       

      inner join (Fact_table)

      load distinct dim_id resident Dimension1;

       

      Все здорово и великолепно, за исключением того, что эта операция убирает дубли строк из таблицы фактов - Fact_table (пример во вложении)...

      В связи с этим 2 вопроса:

      1. не является ли такое поведение ошибкой? В документации об обрезании результирующей таблицы вроде ничего не написано.

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

       

      tmp_Dim:

      load distinct dim_id resident Dimension1;

       

      inner join (Fact_table)

      load dim_id resident tmp_Dim;

       

      drop table tmp_Dim;

       

      Можно ли сделать это проще, без временной таблицы?

        • Re: сокращение строк load distinct...
          Sergey Polekhin

          Здесь нет ошибки.

          Дело в том, что выполнение команд

           

          inner join (Data)

          load distinct Dim1 resident Dimension;

           

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

           

          Полагаю, что если вам нужно просто выполнить проверку и уничтожение записей не совпадающих со справочником, то проще использовать конструкцию Inner Keep (Data) при загрузке таблицы Dimension.

          В этом случае вы уничтожаете не нужные данные сразу в обоих таблицах при единичной загрузке таблицы Dimension.

           

          Пример приложения - в аттаче. Я позволил себе добавить в исходную таблицу Data еще одно значение, для того, чтобы убедиться в том, что оно уничтожится в результате использования конструкции Inner Keep.