-
Notifications
You must be signed in to change notification settings - Fork 12
Feature: Secondary IDs
Conquery unterstützt jetzt secondary IDs.
Secondary IDs ist ein System um Anfragen nicht nur auf Basis einer primären Entitäten-ID zu unterscheiden, sondern zusätzlich noch ein anderes Feld zu nutzen. Dies erzeugt dann effektiv mehrere Ergebniszeilen pro Entität, nämlich eine pro Wert in der secondaryId Spalte.
Um secondaryIds nutzen zu können müssen die .table.json Dateien ergänzt werden. In einer .table.json kann eine Spalte als secondaryId markiert werden indem einfach "secondaryId": "something"
gesetzt wird. Dabei sollten die Spalten aller Tabellen, die die gleiche sekundäre ID beschreiben, den selben Wert zugewiesen bekommen.
Danach kann in der REST-API eine Anfrage einfach in eine SECONDARY_ID_QUERY
umgewandelt werden indem man sie in ein SECONDARY_ID_QUERY Objekt packt:
{
"type": "SECONDARY_ID_QUERY",
"query": {} //original concept query
}
Das Ergebnis sollte genau so aussehen wie die Innere CONCEPT_QUERY
, aber um eine Spalte secondary
ergänzt sein, die den jeweiligen secondaryId Wert beinhaltet.
Der REST Endpunkt datasets/{dataset}
liefert jetzt neben einer Liste von Konzepten auch eine Liste von secondaryIDs, die das Datenset unterstützt
{
"secondaryIds": ["a", "b", "c"]
"concepts": {} //wie bisher
}
Außerdem befindet sich in jeder Tabellenbeschreibung jedes Konzepts eine Liste der secondaryIDs die die Tabelle unterstützt. Dies könnte genutzt werden um diese beispielsweise Hervorzuheben.
{
..., //Conzeptbeschreibung
"tables": [
{
..., //Tabellenbeschreibung
"supportedSecondaryIds": ["b", "c"]
}
]
}
Die Performance solcher Anfragen sollte grundsätzlich unproblematisch sein. Der RAM Verbrauch multipliziert sich allerdings mit der Menge der Egebnisse, die ggfs. mit sekundären IDs stark ansteigen kann. Langfristig wäre ein ein sinnvoller Schritt, auch ohne das sekundäre ID Feature, Anfragen in ihrer Größe zu limitieren um eine Überlastung des Servers durch extreme Anfragen zu vermeiden. Ohne ein Fehlermeldungssystem, dass den Nutzer erreichen kann, ist dies aber auch problematisch.