我正在尝试从数据库配置表中驱动columnMapping属性。我在管道中的第一个活动从配置表中提取行。我的复制活动源是Azure blob存储中的一个Json文件,我的接收器是Azure SQL数据库。
在复制活动中,我正在使用动态内容窗口设置映射。代码如下:
"translator": {
"value": "@json(activity('Lookup1').output.value[0].ColumnMapping)",
"type": "Expression"
}
我的问题是,activity('Lookup1')。output.value [0] .ColumnMapping的值应该是什么样?
我尝试了几种不同的json格式,但是复制活动似乎总是忽略它。
例如,我尝试过:
{
"type": "TabularTranslator",
"columnMappings": {
"view.url": "url"
}
}
和:
"columnMappings": {
"view.url": "url"
}
和:
{
"view.url": "url"
}
在此示例中,view.url是JSON源中的列的名称,而url是Azure SQL数据库中我的目标表中的列的名称。
答案 0 :(得分:2)
问题是由于列名中的点(。)引起的。
据我所知,您的第一种格式应该是正确的格式。如果它已经是json格式,则您可能不需要在表达式中使用“ json”函数。
答案 1 :(得分:0)
问题和答案之间似乎有些脱节,所以我希望能提供一个更直接的答案。
设置时,您应该具有带有动态映射的源数据集。接收器不需要一个,因为我们将在映射中指定它。
在复制活动中,按如下所示格式化动态json:
{
"structure": [
{
"name": "Address Number"
},
{
"name": "Payment ID"
},
{
"name": "Document Number"
},
...
...
]
}
然后您将指定动态映射,如下所示:
{
"translator": {
"type": "TabularTranslator",
"mappings": [
{
"source": {
"name": "Address Number",
"type": "Int32"
},
"sink": {
"name": "address_number"
}
},
{
"source": {
"name": "Payment ID",
"type": "Int64"
},
"sink": {
"name": "payment_id"
}
},
{
"source": {
"name": "Document Number",
"type": "Int32"
},
"sink": {
"name": "document_number"
}
},
...
...
]
}
}
假设这些参数是在单独的变量中设置的,则您希望将源作为字符串发送,并将映射作为json发送:
来源:@string(json(variables('str_dyn_structure')).structure)
映射:@json(variables('str_dyn_translator')).translator
答案 2 :(得分:0)
VladDrak-您可以通过构建动态映射来跳过源动态定义,如下所示:
{
"translator": {
"type": "TabularTranslator",
"mappings": [
{
"source": {
"type": "String",
"ordinal": "1"
},
"sink": {
"name": "dateOfActivity",
"type": "String"
}
},
{
"source": {
"type": "String",
"ordinal": "2"
},
"sink": {
"name": "CampaignID",
"type": "String"
}
}
]
}
}