Skip to content

Feature: Secondary IDs

Manuel Hegner edited this page May 12, 2020 · 1 revision

Conquery unterstützt jetzt secondary IDs.

Beschreibung

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.

Frontend & TODO

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"]
        }
    ] 
}

Performance

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.