流分析查询(选择*到输出中)(不包括特定列)

时间:2018-09-20 14:22:16

标签: azure azure-stream-analytics

我有类似的查询

SELECT
*
INTO [documentdb]
FROM
    [iothub] 
TIMESTAMP BY eventenqueuedutctime

我需要使用*,因为数据是动态的并且没有特定的架构。问题是在此查询中,Iothub系统信息数据已写入documentdb。有什么办法可以排除Iothub系统信息数据?

谢谢。

3 个答案:

答案 0 :(得分:1)

当前无法实现,但不久以后在Job Compatibility Level 1.2中将可以实现。目前,一种解决方法是您可以在Cosmos DB中创建创建后触发器,以从文档中删除此属性。

答案 1 :(得分:1)

正如@chetangm在回答中所说,到目前为止,ASA中尚不支持这种过滤机制。是的,您可以在cosmos db中使用npm start,但是需要在sdk代码或rest api中触发它。它不会自动触发。

我为您提供了另一种使用Azure Function Cosmos DB Triggered的变通方法。在Azure Cosmos DB中添加或更改数据时可以执行该变通方法。您只需要删除功能代码中不需要的字段即可。

希望它对您有帮助。

答案 2 :(得分:0)

为回答您的问题,Azure流分析服务没有内置支持,无法从动态数据(iothub信息)中排除列。但是,我们可以通过使用UDF来实现。这是more info on UDF

UDF可以帮助我们从输入数据中删除该列,并向我们返回更新后的json。

基本上可以通过两个步骤来实现:

  1. 创建JavaScript UDF。

    • 从左侧导航转到功能(在输入下方)。
    • 单击添加-> JavaScript UDF。
    • 提供函数别名= removeiothubinfo
    • 保留输出类型-任何
    • 将以下代码复制粘贴到函数定义中。

      function main(input) {
        delete input['IoTHub'];
        return input;
      }
      

      点击保存

  2. 更新查询

    • 进入查询模式并复制并粘贴以下查询:

      WITH NewInput AS
      (
      SELECT
          udf.removeiothubinfo(iothub) AS UpdatedJson
      FROM
          [iothub]
      )
      SELECT
          UpdatedJson.*
      INTO
          [documentdb]
      FROM
          NewInput
      

      点击保存

我建议您在运行作业之前通过上载包含json相似结构的示例文件来测试查询。

已编辑

此外,即使在作业兼容性级别1.2中,也没有其他功能可以实现此目的。签出for more info