使用天蓝色数据工厂中的映射数据流将具有相应值的两个数组展平
Flatten two arrays having corresponding values using mapping data flow in azure data factory
我不熟悉 adf 中的数据流。我在一个文件夹中有一组 json 文件,我想解析并将两个数组展平为一个 csv。
json结构如下:
我想展平时间戳和值数组。 Timestamps 数组中的每个时间戳在 Values 数组中都有相应的值。即,Timestamps[i] 处的值是 Values[i]。输出应该有一行对应每个时间戳和对应的特定标签值。
谁能帮我实现这个目标
谢谢!
在您的数据流中,添加 2 个 Flatten 转换并指向每个转换中展开 属性 中的时间戳和值数组。
要在 2 个数组之间建立关联,请使用 mapIndex 函数并将数组合并在一起。然后,您将使用展平将其转化为关系形式。
mapIndex(时间戳,@(
时间戳 = #item,值 = 值[#index]))
我知道现在回答已经太晚了,但我在努力使示例正常工作时遇到了这个问题。借鉴 Kiran 写的内容并对其进行扩展,我将其写成一个完整的 end-to-end 博客 post 在这里;将来可能会节省其他人的时间
您也可以使用 Azure Synapse Analytics,支持 OPENJSON
的无服务器 SQL 池来执行此操作:
SELECT
JSON_VALUE( m.value, '$.Id' ) Id,
JSON_VALUE( m.value, '$.Label' ) Label,
t.value AS ts,
v.value AS v
FROM
OPENROWSET(
BULK 'https://somestorage.dfs.core.windows.net/datalake/raw/json/metrics.json',
FORMAT = 'CSV',
FIELDQUOTE = '0x0b',
FIELDTERMINATOR ='0x0b',
ROWTERMINATOR = '0x0b'
)
WITH (
jsonContent varchar(MAX)
) AS [result]
CROSS APPLY OPENJSON( jsonContent, '$.MetricDataResults' ) m
CROSS APPLY OPENJSON( m.value, '$.Timestamps' ) t
CROSS APPLY OPENJSON( m.value, '$.Values' ) v
WHERE t.[key] = v.[key];
我的结果:
这是一种有效的替代方法,即付即用服务。
我不熟悉 adf 中的数据流。我在一个文件夹中有一组 json 文件,我想解析并将两个数组展平为一个 csv。
json结构如下:
我想展平时间戳和值数组。 Timestamps 数组中的每个时间戳在 Values 数组中都有相应的值。即,Timestamps[i] 处的值是 Values[i]。输出应该有一行对应每个时间戳和对应的特定标签值。
谁能帮我实现这个目标
谢谢!
在您的数据流中,添加 2 个 Flatten 转换并指向每个转换中展开 属性 中的时间戳和值数组。
要在 2 个数组之间建立关联,请使用 mapIndex 函数并将数组合并在一起。然后,您将使用展平将其转化为关系形式。
mapIndex(时间戳,@( 时间戳 = #item,值 = 值[#index]))
我知道现在回答已经太晚了,但我在努力使示例正常工作时遇到了这个问题。借鉴 Kiran 写的内容并对其进行扩展,我将其写成一个完整的 end-to-end 博客 post 在这里;将来可能会节省其他人的时间
您也可以使用 Azure Synapse Analytics,支持 OPENJSON
的无服务器 SQL 池来执行此操作:
SELECT
JSON_VALUE( m.value, '$.Id' ) Id,
JSON_VALUE( m.value, '$.Label' ) Label,
t.value AS ts,
v.value AS v
FROM
OPENROWSET(
BULK 'https://somestorage.dfs.core.windows.net/datalake/raw/json/metrics.json',
FORMAT = 'CSV',
FIELDQUOTE = '0x0b',
FIELDTERMINATOR ='0x0b',
ROWTERMINATOR = '0x0b'
)
WITH (
jsonContent varchar(MAX)
) AS [result]
CROSS APPLY OPENJSON( jsonContent, '$.MetricDataResults' ) m
CROSS APPLY OPENJSON( m.value, '$.Timestamps' ) t
CROSS APPLY OPENJSON( m.value, '$.Values' ) v
WHERE t.[key] = v.[key];
我的结果:
这是一种有效的替代方法,即付即用服务。