JAQuel Query Examples - Interactive Execution

This notebook demonstrates how to execute JAQuel queries using the odsbox library. Each query from the test files is executed using con_i.query_data().

Note: You need to configure the connection parameters (URL, auth) for your ODS server.

[ ]:
from odsbox import ConI

con_i = ConI(url="SERVERURL", auth=("USER", "PASSWORD"))

Access Instances

Basic access

Do access only few attributes

[ ]:
# Do access only few attributes
con_i.query_data({
  "Unit": {},
  "$attributes": {
    "name": 1,
    "factor": 1,
    "offset": 1
  }
})

Lets query for units with base entity name

[ ]:
# Lets query for units with base entity name
con_i.query_data({
  "AoUnit": {}
})

Lets query for units with entity name

[ ]:
# Lets query for units with entity name
con_i.query_data({
  "Unit": {}
})

Retrieve all attributes using asterisk

[ ]:
# Retrieve all attributes using asterisk
con_i.query_data({
  "Unit": {},
  "$attributes": {
    "name": 1,
    "factor": 1,
    "offset": 1,
    "phys_dimension.*": 1
  }
})

Simplify attribute definition

[ ]:
# Simplify attribute definition
con_i.query_data({
  "Unit": {},
  "$attributes": {
    "name": 1,
    "factor": 1,
    "offset": 1,
    "phys_dimension": {
      "name": 1,
      "length_exp": 1,
      "mass_exp": 1
    }
  }
})

Order results by an attribute

Order results by name

[ ]:
# Order results by  name
con_i.query_data({
  "AoUnit": {},
  "$attributes": {
    "id": 1,
    "name": 1
  },
  "$orderby": {
    "name": 1
  }
})

Limit the amounts of results

Retrieve only 5 result rows

[ ]:
# Retrieve only 5 result rows
con_i.query_data({
  "AoUnit": {},
  "$options": {
    "$rowlimit": 5
  }
})

Query Instance by id

Query the unit with the id 3

[ ]:
# Query the unit with the id 3
con_i.query_data({
  "AoUnit": {
    "id": 3
  }
})

Query the unit with the id 3 full

[ ]:
# Query the unit with the id 3 full
con_i.query_data({
  "AoUnit": {
    "id": {
      "$eq": 3
    }
  }
})

Query the unit with the id 3 simplified

[ ]:
# Query the unit with the id 3 simplified
con_i.query_data({
  "AoUnit": 3
})

Query the units with the ids in 1 , 2 and 3

[ ]:
# Query the units with the ids in 1 , 2 and 3
con_i.query_data({
  "AoUnit": {
    "id": {
      "$in": [
        1,
        2,
        3
      ]
    }
  }
})

Query Instance by name

Query the unit with the name equal s

[ ]:
# Query the unit with the name equal  s
con_i.query_data({
  "AoUnit": {
    "name": "s"
  }
})

Query the unit with the name equal s case insensitive

[ ]:
# Query the unit with the name equal  s  case insensitive
con_i.query_data({
  "AoUnit": {
    "name": "s",
    "$options": "i"
  }
})

Query the unit with the name equal s case insensitive full

[ ]:
# Query the unit with the name equal  s  case insensitive full
con_i.query_data({
  "AoUnit": {
    "name": {
      "$eq": "s"
    },
    "$options": "i"
  }
})

Query the unit with the name like k

[ ]:
# Query the unit with the name like  k
con_i.query_data({
  "AoUnit": {
    "name": {
      "$like": "k*"
    }
  }
})

Query the unit with the name like k case insensitive

[ ]:
# Query the unit with the name like  k   case insensitive
con_i.query_data({
  "AoUnit": {
    "name": {
      "$like": "k*"
    },
    "$options": "i"
  }
})

And conjunctions $and and $or

Search speed based Units

[ ]:
# Search speed based Units
con_i.query_data({
  "AoUnit": {
    "phys_dimension": {
      "length_exp": 1,
      "mass_exp": 0,
      "time_exp": -1,
      "current_exp": 0,
      "temperature_exp": 0,
      "molar_amount_exp": 0,
      "luminous_intensity_exp": 0
    }
  },
  "$attributes": {
    "name": 1,
    "factor": 1,
    "offset": 1,
    "phys_dimension.name": 1
  }
})

Search speed based Units with explicit $and conjunction

[ ]:
# Search speed based Units with explicit  $and  conjunction
con_i.query_data({
  "AoUnit": {
    "phys_dimension": {
      "$and": [
        {
          "length_exp": 1
        },
        {
          "mass_exp": 0
        },
        {
          "time_exp": -1
        },
        {
          "current_exp": 0
        },
        {
          "temperature_exp": 0
        },
        {
          "molar_amount_exp": 0
        },
        {
          "luminous_intensity_exp": 0
        }
      ]
    }
  },
  "$attributes": {
    "name": 1,
    "factor": 1,
    "offset": 1,
    "phys_dimension.name": 1
  }
})

Search speed or time based Units

[ ]:
# Search speed or time based Units
con_i.query_data({
  "AoUnit": {
    "phys_dimension": {
      "$or": [
        {
          "length_exp": 1,
          "mass_exp": 0,
          "time_exp": -1,
          "current_exp": 0,
          "temperature_exp": 0,
          "molar_amount_exp": 0,
          "luminous_intensity_exp": 0
        },
        {
          "length_exp": 0,
          "mass_exp": 0,
          "time_exp": 1,
          "current_exp": 0,
          "temperature_exp": 0,
          "molar_amount_exp": 0,
          "luminous_intensity_exp": 0
        }
      ]
    }
  },
  "$attributes": {
    "name": 1,
    "factor": 1,
    "offset": 1,
    "phys_dimension.name": 1
  }
})

Search time based Units

[ ]:
# Search time based Units
con_i.query_data({
  "AoUnit": {
    "phys_dimension": {
      "length_exp": 0,
      "mass_exp": 0,
      "time_exp": 1,
      "current_exp": 0,
      "temperature_exp": 0,
      "molar_amount_exp": 0,
      "luminous_intensity_exp": 0
    }
  }
})

Use $between operator

Get measurements that started in a time interval

[ ]:
# Get measurements that started in a time interval
con_i.query_data({
  "AoMeasurement": {
    "measurement_begin": {
      "$between": [
        "2000-04-22T00:00:00.001Z",
        "2024-04-23T00:00:00.002Z"
      ]
    }
  },
  "$options": {
    "$rowlimit": 5
  }
})

Get measurements that started in a time interval, ODS time

[ ]:
# Get measurements that started in a time interval, ODS time
con_i.query_data({
  "AoMeasurement": {
    "measurement_begin": {
      "$between": [
        "20001223000000",
        "20241224000000"
      ]
    }
  },
  "$options": {
    "$rowlimit": 5
  }
})

Use aggregates $min , $max , $dcount , and $distinct

Get the distincted count of Unit description

[ ]:
# Get the distincted count of Unit description
con_i.query_data({
  "AoUnit": {},
  "$attributes": {
    "description": {
      "$dcount": 1
    }
  }
})

Get the distincted values of Unit description

[ ]:
# Get the distincted values of Unit description
con_i.query_data({
  "AoUnit": {},
  "$attributes": {
    "description": {
      "$distinct": 1
    }
  }
})

Get the min and max of unit factor

[ ]:
# Get the min and max of unit factor
con_i.query_data({
  "AoUnit": {},
  "$attributes": {
    "factor": {
      "$max": 1,
      "$min": 1
    }
  }
})

Get the min and max of unit factor and offset

[ ]:
# Get the min and max of unit factor and offset
con_i.query_data({
  "AoUnit": {},
  "$attributes": {
    "factor": {
      "$max": 1,
      "$min": 1
    },
    "offset": {
      "$max": 1,
      "$min": 1
    }
  }
})

Inner and outer joins

Use inner join

[ ]:
# Use inner join
con_i.query_data({
  "AoMeasurementQuantity": {},
  "$attributes": {
    "name": 1,
    "unit.name": 1,
    "quantity.name": 1
  },
  "$options": {
    "$rowlimit": 5
  }
})

Use outer join

[ ]:
# Use outer join
con_i.query_data({
  "AoMeasurementQuantity": {},
  "$attributes": {
    "name": 1,
    "unit:OUTER.name": 1,
    "quantity:OUTER.name": 1
  },
  "$options": {
    "$rowlimit": 5
  }
})

Use $groupby

Use a $groupby on two attributes

[ ]:
# Use a  $groupby  on two attributes
con_i.query_data({
  "AoMeasurement": {},
  "$attributes": {
    "name": 1,
    "description": 1
  },
  "$orderby": {
    "name": 1
  },
  "$groupby": {
    "name": 1,
    "description": 1
  }
})

Access OpenMDM content

Access hierarchy elements

Get AoTest instances

[ ]:
# Get  AoTest  instances
con_i.query_data({
  "AoTest": {},
  "$options": {
    "$rowlimit": 5
  }
})

Get MeaQuantity instances

[ ]:
# Get  MeaQuantity  instances
con_i.query_data({
  "MeaResult": {},
  "$options": {
    "$rowlimit": 5
  }
})

Get MeaResult instances

[ ]:
# Get  MeaResult  instances
con_i.query_data({
  "MeaResult": {},
  "$options": {
    "$rowlimit": 5
  }
})

Get Project instances

[ ]:
# Get  Project  instances
con_i.query_data({
  "Project": {},
  "$options": {
    "$rowlimit": 5
  }
})

Get StructureLevel instances

[ ]:
# Get  StructureLevel  instances
con_i.query_data({
  "StructureLevel": {},
  "$options": {
    "$rowlimit": 5
  }
})

Get Test instances

[ ]:
# Get  Test  instances
con_i.query_data({
  "Test": {},
  "$options": {
    "$rowlimit": 5
  }
})

Get TestStep instances

[ ]:
# Get  TestStep  instances
con_i.query_data({
  "TestStep": {},
  "$options": {
    "$rowlimit": 5
  }
})

Browse ODS tree

Get MeaResult from TestStep with id equal 4

[ ]:
# Get  MeaResult  from  TestStep  with  id  equal 4
con_i.query_data({
  "TestStep": 4,
  "$attributes": {
    "children": {
      "name": 1,
      "id": 1
    }
  },
  "$options": {
    "$rowlimit": 5
  }
})

Get MeaResult with test with id equal 4

[ ]:
# Get  MeaResult  with  test  with  id  equal 4
con_i.query_data({
  "MeaResult": {
    "test": 4
  },
  "$attributes": {
    "name": 1,
    "id": 1
  },
  "$options": {
    "$rowlimit": 5
  }
})

Get StructureLevel from Project with id equal 3

[ ]:
# Get  StructureLevel  from  Project  with  id  equal 3
con_i.query_data({
  "Project": 3,
  "$attributes": {
    "children": {
      "name": 1,
      "id": 1
    }
  },
  "$options": {
    "$rowlimit": 5
  }
})

Get StructureLevel with parent_test with id equal 3

[ ]:
# Get  StructureLevel  with  parent_test  with  id  equal 3
con_i.query_data({
  "StructureLevel": {
    "parent_test": 3
  },
  "$attributes": {
    "name": 1,
    "id": 1
  },
  "$options": {
    "$rowlimit": 5
  }
})

Access descriptive meta

Access parameter sets

Get name value pairs attached to MeaResult

[ ]:
# Get name value pairs attached to  MeaResult
con_i.query_data({
  "ResultParameter": {
    "parameter_set.MeaResult.Name": {
      "$like": "APS*"
    }
  },
  "$attributes": {
    "Name": 1,
    "Value": 1,
    "DataType": 1,
    "parameter_set": {
      "name": 1,
      "MeaResult.id": 1
    }
  },
  "$options": {
    "$rowlimit": 20
  }
})

Access Bulk

Read data from Measurement

Get AoMeasurementQuantity from AoMeasurement with id equal 153

[ ]:
# Get  AoMeasurementQuantity  from  AoMeasurement  with  id  equal 153
con_i.query_data({
  "AoMeasurement": 153,
  "$attributes": {
    "measurement_quantities": {
      "name": 1,
      "id": 1
    }
  },
  "$options": {
    "$rowlimit": 5
  }
})

Get AoMeasurementQuantity with measurement with id equal 153

[ ]:
# Get  AoMeasurementQuantity  with  measurement  with  id  equal 153
con_i.query_data({
  "AoMeasurementQuantity": {
    "measurement": 153
  },
  "$attributes": {
    "name": 1,
    "id": 1
  },
  "$options": {
    "$rowlimit": 5
  }
})

Get AoSubmatrix with measurement with id equal 153

[ ]:
# Get  AoSubmatrix  with  measurement  with  id  equal 153
con_i.query_data({
  "AoSubmatrix": {
    "measurement": 153
  },
  "$attributes": {
    "name": 1,
    "id": 1,
    "number_of_rows": 1
  },
  "$options": {
    "$rowlimit": 5
  }
})

Get bulk of AoLocalColumn with submatrix.measurement with id equal 153

[ ]:
# Get bulk of  AoLocalColumn  with  submatrix.measurement  with  id  equal 153
con_i.query_data({
  "AoLocalColumn": {
    "submatrix.measurement": 153
  },
  "$attributes": {
    "id": 1,
    "flags": 1,
    "generation_parameters": 1,
    "values": 1
  },
  "$options": {
    "$rowlimit": 5
  }
})

Get meta of AoLocalColumn with submatrix.measurement with id equal 153

[ ]:
# Get meta of  AoLocalColumn  with  submatrix.measurement  with  id  equal 153
con_i.query_data({
  "AoLocalColumn": {
    "submatrix.measurement": 153
  },
  "$attributes": {
    "name": 1,
    "id": 1,
    "sequence_representation": 1,
    "independent": 1,
    "global_flag": 1
  },
  "$options": {
    "$rowlimit": 5
  }
})

Cleanup

Don’t forget to logout when finished:

[ ]:
# Logout and cleanup
con_i.logout()
print("Logged out successfully.")