Я работаю над проектом SSIS для создания хранилища данных.Каков наилучший способ обновить вычисленный производный столбец при медленном обновлении размеров?
Вот мой простой процесс SSIS, созданный для загрузки таблицы измерений (местоположения). Таблица местоположений содержит родительскую/дочернюю структуру на основе вложенных множеств (поля ВЛЕВО, ВПРАВО, УРОВЕНЬ). Итак, процесс вставки работает, а также процесс обновления.
Тем не менее, мне нужно, чтобы заполнить вычисляемый столбец (parent_id) для того, чтобы хранить родительские отношения. Итак, для каждой строки мне нужно использовать столбцы LEFT, RIGHT и LEVEL в инструкции SQL, чтобы найти значение PARENT_ID).
Это таблица структуры таблицы источника:
Так что это лучший способ, чтобы заполнить мою колонку parent_id во время процесса загрузки? Должен ли я создать выделенный поток данных для этого процесса?
Можно ли использовать оператор SQL в компоненте Derived column, чтобы найти значение parent_id?
EDIT: Вот мой SQL-запрос для обновления родительской/дочерней структуры (родительского поля).
UPDATE
L1
SET L1.[PARENT_ID] = (
SELECT TOP 1 L2.ID
FROM [DW].[DimLocation] L2
WHERE L2.[TREE_LEFT_VALUE] < L1.[TREE_LEFT_VALUE] AND L2.[TREE_RIGHT_VALUE] > L1.[TREE_RIGHT_VALUE]
ORDER BY L2.[TREE_RIGHT_VALUE]-L1.[TREE_RIGHT_VALUE] ASC)
FROM [DW].[DimLocation] L1
WHERE [TREE_LEFT_VALUE] > 1
EDIT 2: Вот схема, чтобы представить структуру вложенных множеств, и как представить его в базу данных.
Таким образом, каждый узел содержит TREE_LEFT_VALUE
и TREE_RIGHT_VALUE
значения, которые, соответственно, связанные их Чайлдс TREE_LEFT_VALUE
/TREE_RIGHT_VALUE
значения.
Это сделано для простого запроса всех дочерних узлов указанного узла. Например, если я хочу, чтобы все дети узла «ROOT 1», я должен запросить все узлы, где TREE_LEFT_VALUE
больше 2 и TREE_RIGHT_VALUE
менее 5.
Потому что мне нужно использовать parent_id структуру в моем хранилище данных (проект SSAS для создания куба OLAP), мне нужно обновить поле PARENT_ID, добавив идентификатор родительского узла. Поэтому мне нужно запросить идентификатор родительского узла, используя поля TREE_LEFT_VALUE
и TREE_RIGHT_VALUE
, а затем использовать результат в инструкции обновления.
Он отлично работает, но есть ли более эффективный способ сделать это?
Спасибо,
Я добавил свой SQL-запрос для обновления родительского поля. Он отлично работает, но есть ли более эффективный способ сделать это? – K4timini
Я не уверен, что я правильно понимаю структуру таблицы, чтобы ответить на этот вопрос. В идеале у вас не будет подзапроса, чтобы получить значение для каждой строки. Это определенно собирается замедлить его.Если вы предоставляете структуру таблицы и объясняете, как записи относятся друг к другу более явно, это поможет. то есть я не знаю, что именно имеет значение Tree_left_value. –
Надеюсь, мое второе редактирование поможет вам понять мою проблему. – K4timini