ADF:导出具有带空格和where子句的列名的Parquet文件



我有一个查找,它从SQL Server表中检索一些记录,该表包含服务器、数据库、架构、表名和带值的where子句。这些值被传递到复制数据(在ForEach中(。在ForEach流中,我还插入了一个查找,以删除列名中的空格和任何特殊字符,从而保存到拼花文件中。我的问题是我不能得到";其中";条款生效。

表中的值:

>>公司$销售发票头过帐日期]>='2021-01-01'
SRC_SERVERNAME SRC_DATABASE DCC_SCHEMANAMESRC_TABLENAMESRC_WERE_DATE_CLAUSE
SQ01 NAV dbo

我已经解决了这个问题,ADF处理字符的方式不同。

必须更新where子句并添加额外的字符。

所以不是:

输入

INSERT INTO [dbo].[ADF_DL_ONPREMSQL_CONFIGURATION] ([SRC_SERVERNAME], [SRC_DATABASENAME], [SRC_SCHEMANAME], [SRC_TABLENAME], [SRC_WHERE_DATE_CLAUSE])
VALUES   ('SQ01', 'Company', 'dbo', 'Company$Sales Invoice Header', 'where [Posting Date] >= ''2021-01-01''')

输出

where [Posting Date] >= '2021-01-01'

我更新了:

INSERT INTO [dbo].[ADF_DL_ONPREMSQL_CONFIGURATION] ([SRC_SERVERNAME], [SRC_DATABASENAME], [SRC_SCHEMANAME], [SRC_TABLENAME], [SRC_WHERE_DATE_CLAUSE])
VALUES   ('SQ01', 'Company', 'dbo', 'Company$Sales Invoice Header', 'where [Posting Date] >= ''''2021-01-01''''')

输出

where [Posting Date] >= ''2021-01-01''

最终查询

@concat(' 
DECLARE @s VARCHAR(MAX) 
DECLARE @servername VARCHAR(500) = ''', item().SRC_SERVERNAME ,''' 
DECLARE @databasename VARCHAR(500) = ''', item().SRC_DATABASENAME ,''' 
DECLARE @schemaname VARCHAR(500) = ''', item().SRC_SCHEMANAME ,''' 
DECLARE @tablename VARCHAR(500) = ''', item().SRC_TABLENAME ,''' 
DECLARE @wherename VARCHAR(500) = ''', string(item().SRC_WHERE_DATE_CLAUSE) ,''' 
SELECT @s = ISNULL(@s + '', '','''') + ''['' + c.name + '']'' + '' as [''+replace(replace(replace(replace(replace(replace(replace(c.name,'' '',''''),''ö'',''o''), ''ä'',''a''),''å'',''a''),''('',''_''),'')'',''''),''-'',''_'') +''] '' 
FROM sys.all_columns c join sys.tables t 
ON c.object_id = t.object_id 
WHERE t.name =  @tablename 

SELECT ''select '' + @s + '' from '' + ''['' + @servername + '']'' + ''.'' + ''['' + @databasename + '']'' + ''.'' + ''['' + @schemaname + '']'' + ''.'' + ''['' + @tablename + '']'' + '' '' + @wherename  as Query') 

最新更新