How to use meta function to extract addtional data from EdgeX message bus?

    The data structure received from EdgeX message bus is list as in below. An structure encapsulates related metadata (ID, DeviceName, ProfileName, SourceName, Origin, Tags), along with the actual data (in Readings field) collected from device service.

    Similar to Event, Reading also has some metadata (ID, DeviceName… etc).

    • Event
      • ID
      • DeviceName
      • ProfileName
      • SourceName
      • Origin
      • Tags
      • Readings
        • reading [1]
          • … // The same as in reading[0]
        • reading [n] …

    If upgrading from eKuiper versions v1.2.0 and before which integrates with EdgeX v1, there will be some breaking changes of the meta datas due to the refactor of EdgeX v2.

    1. The metadata Pushed, Created and Modified for both events and readings are removed.
    2. The metadata Name of readings is renamed to ResourceName.

    So how the EdgeX data are managed in eKuiper? Let’s take an example.

    As in below - firstly, user creates an EdgeX stream named events with yellow color.

    • The device name is demo with green color
    • Reading name temperature & Humidity with red color.
    • It has some that is not necessary to “visible”, but it probably will be used during data analysis, such as DeviceName field in Event structure. eKuiper saves these values into message tuple named metadata, and user can get these values during analysis. Notice that, metadata name DeviceName was renamed from Device in EdgeX v2.

    Meta function for EdgeX stream - 图2

    Thirdly, a SQL is provided for data analysis. Please notice that,

    • The events in FROM clause is yellow color, which is a stream name defined in the 1st step.
    • The SELECT fields temperature & humidity are red color, which are the Name field of readings.
    • The WHERE clause meta(deviceName) in green color, which is ued for extracting DeviceName field from Events structure. The SQL statement will filter data that device names are not demo.

    Below are some other samples that extract other metadata through meta function.

    1. meta(origin): 000

      Get ‘Origin’ metadata from Event structure

    2. Get ‘origin’ metadata from reading[0], key with ‘temperature’

    3. meta(humidity -> origin): 456

      Get ‘origin’ metadata from reading[1], key with ‘humidity’

    Please notice that if you want to extract metadata from readings, you need to use reading-name -> key operator to access the value. In previous samples, temperature & humidity are reading-names, and key is the field names in readings.

    However, if you want to get data from Events, just need to specify the key directly. As the 1st sample in previous list.

    The meta function can also be used in SELECT clause, below is another example. Please notice that if multiple meta functions are used in SELECT clause, you should use AS to specify an alias name, otherwise, the data of previous fields will be overwritten.

    • Event: id, deviceName, profileName, sourceName, origin, tags, correlationid
    • Reading: id, deviceName, profileName, origin, valueType