ADFv2的复制活动中95%的映射是直接的一对一映射。然而,我有一种情况,我需要映射Source";MIDDLE_ INIT";字符串必须位于的接收列的列SUBSTR(PS_NAMEES.MIDDLE_NAME,1,1(。这可以在ADFv2复制活动中完成吗?(政府云没有数据流,所以我必须使用复制活动(。谢谢Mike
否,复制活动不能执行此操作。
正如wBob所评论的,您可以将数据从源复制到表类型,并在存储过程中转换SUBSTR(PS_NAMES.MIDDLE_NAME,1,1)
。然后使用此表作为源,复制到您的水槽。
如果您的体系结构中有Azure SQL数据库,您可以使用它的内置功能,即OPENROWSET
和OPENJSON
,直接从数据湖中分解JSON。这里有一个简单的例子:
SELECT *
FROM OPENROWSET (
BULK 'raw/parliament/2020/09/25/members.json',
DATA_SOURCE = 'somejsonstore',
SINGLE_CLOB
) x
CROSS APPLY OPENJSON ( BulkColumn, '$.result.items' )
WITH (
fullName NVARCHAR(MAX) '$.fullName._value',
gender NVARCHAR(100) '$.gender._value',
party NVARCHAR(100) '$.party._value'
)
点击此处了解更多关于OPENJSON的信息。
这里是另一个简单的例子,我想它和你的类似。注意,在这篇文章中,我创建了JSON,但您需要使用上面的技术导入它:
SET @json = '{
"PS_NAMES": {
"FIRST_NAME": "w",
"MIDDLE_NAME": "Susan",
"LAST_NAME": "Bob"
}
}'
;WITH cte AS (
SELECT *
FROM OPENJSON ( @json, '$.PS_NAMES' )
WITH (
FIRST_NAME NVARCHAR(100) '$.FIRST_NAME',
MIDDLE_NAME NVARCHAR(100) '$.MIDDLE_NAME',
LAST_NAME NVARCHAR(100) '$.LAST_NAME'
)
)
SELECT 'original'AS [source], FIRST_NAME, MIDDLE_NAME, LAST_NAME
FROM cte
UNION ALL
SELECT 'new', FIRST_NAME, LEFT( MIDDLE_NAME, 1 ) AS MIDDLE_INIT, LAST_NAME
FROM cte;
如果你的体系结构中没有Azure SQL DB,那么写回你所拥有的,例如你有Databricks、ADLA、Azure Synapse工作区、Azure函数、逻辑应用程序等吗?