【问题标题】:Azure Stream Analytics Job - Transformation Query - correct formatting in ARM templateAzure 流分析作业 - 转换查询 - ARM 模板中的正确格式
【发布时间】:2020-03-30 08:02:11
【问题描述】:

在门户中编辑流分析转换查询时,您可以对其进行格式化以便跨多行读取...例如

SELECT 
INTO [Output1]
FROM [Input1]
PARTITION BY PartitionId
WHERE etc etc etc

当将其放入 CI/CD 的 ARM 模板中时,它会作为一个巨大的长字符串输入,最终会在门户中显示为...

SELECT * INTO [Output1] FROM [Input1] PARTITION BY PartitionId WHERE etc etc etc to infinity....

官方文档没什么用,也没有给出模板查询部分的任何线索,只是说它是一个“字符串”……

https://docs.microsoft.com/en-us/azure/templates/microsoft.streamanalytics/2016-03-01/streamingjobs/transformations

有一个 Microsoft 示例模板,这是我能找到的唯一一个指定了转换查询的示例... https://github.com/Azure/azure-quickstart-templates/blob/master/101-streamanalytics-create/azuredeploy.json ...看起来它正在尝试做间距...

"query": "SELECT\r\n    *\r\nINTO\r\n    [YourOutputAlias]\r\nFROM\r\n    [YourInputAlias]"

...但严重失败 - 见截图

有人能做到吗?

还有谁知道为什么可以在 Azure 资源浏览器 (https://resources.azure.com/) 中看到转换查询?或者它不能与流作业的其余部分一起从门户导出? (在资源组级别完成)

提前致谢

【问题讨论】:

    标签: azure arm-template azure-stream-analytics


    【解决方案1】:

    我知道已经过了整整一年,也许你已经知道了,但是,这就是我所做的:

    在我的 Parameters 文件中,我使用了一个字符串数组,例如:

    "StreamAnalyticsJobQueryMultiline": {
        "value": [
        "WITH allData AS ( ",
        "    SELECT ",
        "        *, ",
        "        GetMetadataPropertyValue([%%INPUTSTREAMNAME%%], '[User].[EventNamespace]') AS EventNamespace ",
        "    FROM [%%INPUTSTREAMNAME%%] Partition By PartitionId ",
        "SELECT ",
        "    *, ",
        "    'EventHubWriterv1' AS EventType ",
        "INTO ",
        "    [%%OUTPUTSTREAMNAME%%] ",
        "FROM ",
        "    allData Partition By PartitionId "
        ]
    

    当数组被连接并作为字符串输出时,它会产生类似这样的结果,其中该数组中的每个项目仍然用引号括起来,整个内容包含在方括号内(请参阅:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-string#concat

    ["Foo","Bar","Blah"]

    因此,需要进行额外的转换才能将其转换为流分析输出中可读的内容。
    还要注意这里的 %%INPUTSTREAMNAME%% 和 %%OUTPUTSTREAMNAME%%,因为我的输入和输出流也是参数,并且使用典型的内联 [parameter('ParamName')] 不能很好地处理其余的转换需要。

    在我的 Template 文件中,我采用 StreamAnalyticsJobQueryMultiline 参数并使用 variables 字段进行此转换:

    "QueryStringRaw":  "[string(concat(parameters('StreamAnalyticsJobQueryMultiline')))]",
        
    // Update the end-of-lines by removing the doublequote and comma, and replacing it with a newline character 
    "QueryStringIter1": "[replace(variables('QueryStringRaw'), '\",', '\n')]",
    
    // Update the beginning-of-lines by removing the doublequote
    "QueryStringIter2": "[replace(variables('QueryStringIter1'), '\"', '')]",
    
    // Update the InputStreamName and OutputStreamName values
    "QueryStringIter3": "[replace(variables('QueryStringIter2'), '%%INPUTSTREAMNAME%%', parameters('InputStreamName'))]",
    "QueryStringIter4": "[replace(variables('QueryStringIter3'), '%%OUTPUTSTREAMNAME%%', parameters('OutputStreamName'))]",
    
    // Produce the final output for the query string by trimming the leading and trailing square brackets
    "QueryStringFinal": "[substring(variables('QueryStringIter4'), 1, sub(length(variables('QueryStringIter4')), 2))]"
    

    然后我在 Microsoft.StreamAnalytics/streamingjobs 属性的转换部分引用它:

    "transformation": {
        "name": "Transformation",
        "properties": {
            "streamingUnits": "[parameters('StreamAnalyticsStreamingUnitsScale')]",
            "query": "[variables('QueryStringFinal')]"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多