Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Всем привет!
При загрузке данных в приложение мне часто приходится выполнять операцию сокращения строк в таблице фактов путем объединения ее с таблицей справочника по коду. Например так
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;
Можно ли сделать это проще, без временной таблицы?
Здесь нет ошибки.
Дело в том, что выполнение команд
inner join (Data)
load distinct Dim1 resident Dimension;
приводит к созданию промежуточной таблицы, в которую и выполняется объединение данных из двух исходных таблиц. Присутствие же конструкции load distinct Dim1 приводит к отбору в эту промежуточную таблицу только уникальных значений Dim1.
Полагаю, что если вам нужно просто выполнить проверку и уничтожение записей не совпадающих со справочником, то проще использовать конструкцию Inner Keep (Data) при загрузке таблицы Dimension.
В этом случае вы уничтожаете не нужные данные сразу в обоих таблицах при единичной загрузке таблицы Dimension.
Пример приложения - в аттаче. Я позволил себе добавить в исходную таблицу Data еще одно значение, для того, чтобы убедиться в том, что оно уничтожится в результате использования конструкции Inner Keep.
Здесь нет ошибки.
Дело в том, что выполнение команд
inner join (Data)
load distinct Dim1 resident Dimension;
приводит к созданию промежуточной таблицы, в которую и выполняется объединение данных из двух исходных таблиц. Присутствие же конструкции load distinct Dim1 приводит к отбору в эту промежуточную таблицу только уникальных значений Dim1.
Полагаю, что если вам нужно просто выполнить проверку и уничтожение записей не совпадающих со справочником, то проще использовать конструкцию Inner Keep (Data) при загрузке таблицы Dimension.
В этом случае вы уничтожаете не нужные данные сразу в обоих таблицах при единичной загрузке таблицы Dimension.
Пример приложения - в аттаче. Я позволил себе добавить в исходную таблицу Data еще одно значение, для того, чтобы убедиться в том, что оно уничтожится в результате использования конструкции Inner Keep.
Спасибо Сергей!
оператор keep то что надо, не знал о нем...