SEC Meeting Alkmaar 2017 - AQL notes page

Need to obtain XSD for result set.

Demographics

Correct statements about AQL 'being for EHR' to be broader (i.e. will work for demographics)

Example population queries for demographics

Also - need to query across EHR and Demographics together; is this embedded queries?

HF: what does conformance def look like for AQL? Be careful of extensions.

  • separate conformance for AQL lan extensions
  • distinguish patient v population querying
  • GDL - relationship with AQL - e.g. apply GDL over AQL results.

HF/TB: related: need the concept of Post in demographics

  • Ocean did this via using Group - e.g. Care Team

Problems

Cartesian problem / permutation explosion - need semantics defined (refer to Seref Arikan analysis)

Related: Ian - want to be able to say things like '40 kg' rather than 2 paths.

Link / Reference-following

BN:

  • in the DIPS, they use FOLDER CONTAINS COMPOSITION; FOLDER CONTAINS FOLDER etc.
  • need to define Care Plan semantics

HF: in fact we do EHR CONTAINS COMPOSITION (probably take out 'EHR CONTAINs'? to get consistency); but: EHR => compositions etc is logical containment

could we have an 'IN' operator to cover all logical 'containment'?

Ian:

  • want to make e.g. Problems linked from problem list via LINK? or DV_EHR_URI Composition should be selected same as if inline inside COMPOSITION.
  • Care Plan linking

Link depth issue.

TB: need marked up Ref Model to indicate what links to follow.

  • SParql
  • GraphQL

Pablo: if we want to state conditions (e.g. Contains / Where) on LINK targets - it's a nested sub-query

Analytics requirements

Birger:

  • ?alignment to SQL 
    • HF: we don't do 'JOINs' (yet) - LINK following might be a JOIN concept
  • need aggregate functions like SUM(); GROUP-BY() e.g. list of patient counts keyed by ICD code
  • set functions: Union; Intersect; 
    • e.g. SELECT x FROM y WHERE z UNION SELECT x FROM y etc - (need same nr or columns in each result & col names - check ?types)
    • UNION-ALL (already in Marand)
    • MINUS - diff
      • example: exclusion criteria for clinical studies - e.g. remove certain patients from result - e.g. remove pregnant patients from analytic query
  • (performance not necessarily so important)

Bostjan: - keep AQL parser and processor simpler - potentially implement via params in service interface

Birger - counter-argument - lose semantic integrity of queries if broken up via API params

Ian: harder to sell AQL if aggregate operators like SUM, UNION, are in AQL

Erik: maybe consider meta-land to wrap AQL statements

Birger: ?analytics specific flavour of AQL

Iago: no good way to do patient subsetting for GDL; need AQL subsetting to be efficient 

Bjorn: best way to define set in pop queries, esp for use in GDL

TB: model of optimisation / efficiency of AQL

Birger: could imagine EHR persistence impls that are optimised for analytics.

UPDATE / DELETE / INSERT

Question of UPDATE and DELETE i.e. modifying AQL statements as per SQL

Birger: in terms of mindshare - potential users of AQL see AQL as deficient 

HF: keep it simple

Dynamic Result Set Structures

Sebastian Iancu: want to generate an on-the-fly return structure e.g.


SELECT
FROM ...
	e/data[at0003]/items[at0004]/items[at0005] as Hashmap(
		/name/value as Key,
		/value as Object( 
			/magnitude as Magn,
			/units as Units
		)
	)
FROM
	COMPOSITION c

Birger: better to do post-processing to achieve this result.

Sebastian: could apply to UPDATE as well.

Possible ways to do this: GraphQL?

MS etc has e.g . JSON export of SQL results.

Bjorn: 'APL' - AQL Processing Language: need a processing pipeline concept

Erik: would be easy to add a post-processing script to run after a Query execute in REST API; can use more 'types', i.e. 'aql', 'aql-in-xquery' or whatever

Work group

  • Birger
  • Bjorn
  • Heath
  • Seref
  • Sebastian
  • + others