首页 > 解决方案 > Azure 数据工厂映射 ADFv2

问题描述

在 ADFv2 的复制活动中,我 95% 的映射是直接的一对一映射。但是,我有一种情况需要将源“MIDDLE_INIT”列映射到其中字符串必须为 SUBSTR(PS_NAMES.MIDDLE_NAME,1,1) 的接收器列。这可以在 ADFv2 复制活动中完成吗?(政府云没有数据流,所以我必须使用复制活动)。谢谢迈克

标签: azure-data-factory

解决方案


如果您的体系结构中有 Azure SQL 数据库,则可以使用它直接从数据湖中分解 JSON,使用其内置功能,即OPENROWSETOPENJSON. 这是一个简单的例子:

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 的简单示例,我认为它与您的类似。注意,我创建了 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 Functions、逻辑应用程序等等?


推荐阅读