检查U-SQL行集上的条件

时间:2018-03-20 20:50:47

标签: sql json azure azure-data-lake u-sql

我有一个简单的用例。我想根据json文件是否包含一些名为" event"的字段来过滤数据。

我的数据可以包含1,2,3或任意数量的json数组。

数组中包含json对象。

所以,考虑我有4个数组:[A],[B],[C],[D]

我可以使用JSON Extractor在U-SQL中提取它们。然后将数组值作为JSONTuple。

一旦提取出来。我想检查一个数组是否有一个特定的json字段。

赞:select @data where JsonContains(A, "ordernumber") .

我怎样才能在USQL中这样做?简单的方法:

Select [A], [B], [c], [D] where A constains "event" ...

我尝试过,但在sql中没有办法做。请帮忙。感谢。

作为旁注,我认为在usql中处理这些不匹配的列数(我必须过滤行集的唯一方法)是:

  1. 过滤给定列的数据。就像我在问题中询问的一样。

  2. 使用动态列,例如选择A ["数据"]作为A ["名称"]?奇怪的是,U-SQL会要求您事先为列命名,否则这将是一个了不起的功能。

  3. 您看到要处理的任何其他方法:文件中的任意列数,缺少列,不同JSON文件中列数不匹配?

    示例输入:

    [
      {
        "PID": "10201820",
        "System": [
          {
            "Name": "EventName",
            "Value": "SystemEvent"
          },
          {
            "Name": "Name",
            "Value": "Test"
          },
        ],
        "Domain": [
          {
            "Name": "Type",
            "Value": "ENTER"
          },
          {
            "Name": "startTime",
            "Value": "1/10/2018 11:21:10 AM"
          }
        ],
        "Custom": [
          {
            "Name": "platform",
            "Value": "Windows"
          },
          {
            "Name": "sys:eventts",
            "Value": "2018-01-10T11:21:10.440Z"
          },
          {
            "Name": "sys:mguid",
            "Value": "e236426e-a246-3e99f4f9bf95"
          },
    
          {
            "Name": "bus:AS2",
            "Value": "TestAs2From"
          },
          {
            "Name": "bus:AS3",
            "Value": "TestAs2To"
          },
          {
            "Name": "bus:Message-ID",
            "Value": "efd4-46bf-b11d-d838b4540aba"
          }
        ],
        "ttl": 8640000
      },
    
    
    
     {
        "PID": "201870",
        "System": [
          {
            "Name": "EventName",
            "Value": "SystemEvent"
          }
        ],
        "Domain": [
          {
            "Name": "Type",
            "Value": "ENTER"
          }
        ],
        "Custom": [
          {
            "Name": "sys:MachineName",
            "Value": "TestMachine"
          },
          {
            "Name": "cor:OriginalMessageId",
            "Value": "336-b102-4002-a7cc-36132e97"
          }
        ],
        "ttl": 8640000
      },
    
      {Similar rows as the one above just with some fields missing, some added}
    ]
    

    示例输出:

    All Data Fields (CSV): PID System.EventName System.Name Custom.Type ...TTL
    
     ...Corresponding Values or 0 if field not present in a row of the json ...................
    

0 个答案:

没有答案