Search code examples
influxdb

One measurement - three datatypes


I have a Line Protocol like this:

Measurement1,Valuetype=Act_value,metric=Max,dt=Int  value=200i  1553537228984000000
Measurement1,Valuetype=Act_value,metric=Lower_bound,dt=Int  value=25i  1553537228987000000
Measurement1,Valuetype=Act_value,metric=Min,dt=Int  value=10i  1553537228994000000
Measurement1,Valuetype=Act_value,metric=Upper_limit,dt=Int  value=222i  1553537228997000000
Measurement1,Valuetype=Act_value,metric=Lower_limit,dt=Int  value=0i  1553537229004000000
Measurement1,Valuetype=Act_value,metric=Simulation,dt=bool  value=False  1553537229007000000
Measurement1,Valuetype=Act_value,metric=Value,dt=Int  value=69i  1553537229014000000
Measurement1,Valuetype=Act_value,metric=Percentage,dt=Int  value=31i  1553537229017000000
Measurement1,Valuetype=Set_value,metric=Upper_limit,dt=Int  value=222i  1553537229024000000
Measurement1,Valuetype=Set_value,metric=Lower_limit,dt=Int  value=0i  1553537229028000000
Measurement1,Valuetype=Set_value,metric=Unit,dt=string  value="Kelvin"  1553537229035000000
Measurement1,Valuetype=Set_value,metric=Value,dt=Int  value=222i  1553537229038000000
Measurement1,Valuetype=Set_value,metric=Percentage,dt=Int  value=0i  1553537229045000000

I need to insert multiple Lines at once. The issue is likely that I insert integers, booleans and strings into the same table. It worked when I created measurements like, e.g. Measurement1_Int,Measurement1_bool,Measurement1_string. In the above configuration I get an error.

I have the following questions:

  1. Is there any way to save values of different (data-)types to one table/measurement?
  2. If yes how do I need to adjust my Line Protocol?
  3. Would it work I write the three datatypes seperately but still in the same table?

Solution

  • If you can afford to assign the same timestamp to all metrics within measurement datapoint the best variant would be to use metric name a field name in influxdb record:

    Measurement1,Valuetype=Act_value  Max=200i,Lower_bound=25i,Min=10i,Upper_limit=222i,Lower_limit=0i,Simulation=False,Value=69i,Percentage=31i 1553537228984000000
    

    Otherwise you can still use metric name as field name but missing fields for each timestamp will have null values:

    Measurement1,Valuetype=Set_value Upper_limit=222i  1553537229024000000
    Measurement1,Valuetype=Set_value Lower_limit=0i  1553537229028000000
    Measurement1,Valuetype=Set_value Unit="Kelvin"  1553537229035000000
    Measurement1,Valuetype=Set_value Value=222i  1553537229038000000
    Measurement1,Valuetype=Set_value Percentage=0i  1553537229045000000