如何将表单识别器 JSON 结构转换为 SQL table
How to Transform Form recognizer JSON structure into SQL table
我有以下 JSON 结构,它由 Azure 表单识别器 return 编辑 API。
columnCount 键给出了实际的列数。
我想将 Kind = columnHeader 的单元格转换为 Azure 的 Column SQL table
Kind = null 的其余单元格应转换为 Rows
在 ADF 中实现此目的的最佳方法是什么?
- 在 ADF 中使用 Flatten Activity
- 使用 Azure 函数中的循环和 return CSV 字符串编写转换逻辑
- 在 Azure Functions
中使用像 JUST.NET 这样的库
注意:从表单识别器return编辑的行数和列数将是动态的
{
“行数”:9,
“列数”:2,
“细胞”: [{
“种类”:“列标题”,
“行索引”:0,
“列索引”:0,
“行跨度”:1,
“列跨度”:1,
“内容”:“列A”,
“边界区域”:[{
“页码”:5,
“边界框”:[0.4461,
7.7151,
3.7924,
7.7151,
3.7924,
7.968,
0.4461,
7.968]
}],
“跨越”:[{
“偏移量”:6640,
“长度”:9
}]
},
{
“种类”:“列标题”,
“行索引”:0,
“列索引”:1,
“行跨度”:1,
“列跨度”:1,
“内容”:“B列”,
“边界区域”:[{
“页码”:5,
“边界框”:[3.7924,
7.7151,
7.1799,
7.7151,
7.1799,
7.968,
3.7924,
7.968]
}],
“跨越”:[{
“偏移量”:6650,
“长度”:9
}]
},
{
“行索引”:1,
“列索引”:0,
“行跨度”:1,
“列跨度”:1,
"content": "Cell1Value",
“边界区域”:[{
“页码”:5,
“边界框”:[0.4461,
7.968,
3.7924,
7.968,
3.7924,
8.195,
0.4461,
8.195]
}],
“跨越”:[{
“偏移量”:6660,
“长度”:18
}]
},
{
“行索引”:1,
“列索引”:1,
“行跨度”:1,
“列跨度”:1,
“内容”:“单元格2值”,
“边界区域”:[{
“页码”:5,
“边界框”:[3.7924,
7.968,
7.1799,
7.968,
7.1799,
8.195,
3.7924,
8.195]
}],
“跨越”:[{
“偏移量”:6679,
“长度”:18
}]
},
]
}
输出应该如下所示
列A,列B
单元格 1 值、单元格 2 值
这是一个对我有用的例子,是通过使用展平和聚合转换实现的。
展平时,按'cells'展开。
Flatten
FlattenDataPreview
然后,在聚合转换中,使用以下表达式按行索引分组并按文本聚合:
replace(trim(trim(toString(collect(text)),'['),']'),'"','')
AggregateDataPreview
如果您想继续使用数据流来设置您的 table,您可以创建派生列并将 SQL 设置为您的接收器。
TableDataPreview
或者,您可以保存到存储,然后在您的管道中使用副本 activity。
我有以下 JSON 结构,它由 Azure 表单识别器 return 编辑 API。
columnCount 键给出了实际的列数。
我想将 Kind = columnHeader 的单元格转换为 Azure 的 Column SQL table
Kind = null 的其余单元格应转换为 Rows
在 ADF 中实现此目的的最佳方法是什么?
- 在 ADF 中使用 Flatten Activity
- 使用 Azure 函数中的循环和 return CSV 字符串编写转换逻辑
- 在 Azure Functions 中使用像 JUST.NET 这样的库
注意:从表单识别器return编辑的行数和列数将是动态的
{ “行数”:9, “列数”:2, “细胞”: [{ “种类”:“列标题”, “行索引”:0, “列索引”:0, “行跨度”:1, “列跨度”:1, “内容”:“列A”, “边界区域”:[{ “页码”:5, “边界框”:[0.4461, 7.7151, 3.7924, 7.7151, 3.7924, 7.968, 0.4461, 7.968] }], “跨越”:[{ “偏移量”:6640, “长度”:9 }] }, { “种类”:“列标题”, “行索引”:0, “列索引”:1, “行跨度”:1, “列跨度”:1, “内容”:“B列”, “边界区域”:[{ “页码”:5, “边界框”:[3.7924, 7.7151, 7.1799, 7.7151, 7.1799, 7.968, 3.7924, 7.968] }], “跨越”:[{ “偏移量”:6650, “长度”:9 }] }, { “行索引”:1, “列索引”:0, “行跨度”:1, “列跨度”:1, "content": "Cell1Value", “边界区域”:[{ “页码”:5, “边界框”:[0.4461, 7.968, 3.7924, 7.968, 3.7924, 8.195, 0.4461, 8.195] }], “跨越”:[{ “偏移量”:6660, “长度”:18 }] }, { “行索引”:1, “列索引”:1, “行跨度”:1, “列跨度”:1, “内容”:“单元格2值”, “边界区域”:[{ “页码”:5, “边界框”:[3.7924, 7.968, 7.1799, 7.968, 7.1799, 8.195, 3.7924, 8.195] }], “跨越”:[{ “偏移量”:6679, “长度”:18 }] }, ] }
输出应该如下所示
列A,列B
单元格 1 值、单元格 2 值
这是一个对我有用的例子,是通过使用展平和聚合转换实现的。
展平时,按'cells'展开。
Flatten
FlattenDataPreview
然后,在聚合转换中,使用以下表达式按行索引分组并按文本聚合:
replace(trim(trim(toString(collect(text)),'['),']'),'"','')
AggregateDataPreview
如果您想继续使用数据流来设置您的 table,您可以创建派生列并将 SQL 设置为您的接收器。
TableDataPreview
或者,您可以保存到存储,然后在您的管道中使用副本 activity。