Я работаю над созданием DWH, в который я загружаю данные в промежуточную БД, и перед загрузкой их в конечную БД я применяю все udf, которые я создал для данных.
- Исходная БД: Oracle
- Dest DB: SQL Server
- ETL Процесс: пакеты служб SSIS
Я не обрабатывал что-либо при подготовке для быстрой загрузки.
Вопрос: быстрее ли применять какие-либо файлы udf, когда данные находятся в стадии подготовки, или это следует делать при загрузке данных в конечную базу данных.
Ниже facility_cd
есть значение float
, и я передаю его функции emr_get_code_Description
, чтобы получить соответствующее описание.Таблица, из которой он получает описание, находится в последней базе данных.udf_replace_special_char
- это простая функция, которая заменяет несколько специальных символов на NULL.
LTRIM(RTRIM([Dest_DWH].[dbo].udf_replace_special_char([Dest_DWH].[dbo].[emr_get_code_Description](Stg_ap.Facility_cd))))
В целом, что должно быть лучше?Должен ли я обновлять это при подготовке, а затем загружать данные после всех преобразований в конечную базу данных.
Определения функций:
Функция 1:
USE [PROD_DWH]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[emr_get_code_Description](@cv int)
returns varchar(80)
as begin
-- Returns the code value display
declare @ret varchar(80)
select @ret = cv.DESCRIPTION
from PROD_DWH.DBO.table cv
where cv.code_value = @cv
and cv.active_ind = 1
return isnull(@ret, 0)
end;
Функция 2:
USE [PROD_DWH]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[udf_replace_special_char](@var varchar(1000))
returns varchar(1000)
as begin
-- Returns the code value display
declare @return_var varchar(1000)
set @return_var = @var
set @return_var = replace(@return_var,CHAR(13),'')
set @return_var = replace(@return_var,CHAR(10),'')
set @return_var = replace(@return_var,CHAR(09),'')
set @return_var = replace(@return_var,CHAR(34),CHAR(39))
return isnull(@return_var, 0)
end;