An ingestion service system for storing aggregated sensor data into a relational database, comprising: memory; one or more hardware processors coupled to the memory; and one or more computer readable storage media storing instructions that, when loaded into the memory, cause the one or more hardware processors to perform operations comprising: by an ingestion service (120, 312), obtaining streaming sensor data from a plurality of devices, wherein each device of the plurality of devices comprises one or more hardware sensors; determining from the sensor data an annotation rule for the sensor data; and annotating the sensor data according to the annotation rule to provide annotated data, wherein the hardware sensors correspond to indicators, wherein the indicators are grouped into one or more indicator groups, wherein the sensor data are annotated with a corresponding indicator group, and wherein the annotated data are stored in a timeseries data file in a data store in a semi-structured format; by an aggregation engine, upon determining that a new timeseries data file is available, generating one or more aggregated values from the annotated data of the timeseries data file, and writing the aggregated values back to the data store in the semi-structured format; and by a database writer, instantiating a relational database table for an indicator group comprising a plurality of indicators, the relational database table comprising, for each respective indicator of the plurality of indicators, a respective column configured to store aggregated values associated with a corresponding hardware sensor; and, upon determining that new aggregated values of the indicator group are available for processing, retrieving the aggregated values and writing the aggregated values to the relational database table. memory; one or more hardware processors coupled to the memory; and one or more computer readable storage media storing instructions that, when loaded into the memory, cause the one or more hardware processors to perform operations comprising: by an ingestion service (120, 312), obtaining streaming sensor data from a plurality of devices, wherein each device of the plurality of devices comprises one or more hardware sensors; determining from the sensor data an annotation rule for the sensor data; and annotating the sensor data according to the annotation rule to provide annotated data, wherein the hardware sensors correspond to indicators, wherein the indicators are grouped into one or more indicator groups, wherein the sensor data are annotated with a corresponding indicator group, and wherein the annotated data are stored in a timeseries data file in a data store in a semi-structured format; by an aggregation engine, upon determining that a new timeseries data file is available, generating one or more aggregated values from the annotated data of the timeseries data file, and writing the aggregated values back to the data store in the semi-structured format; and by a database writer, instantiating a relational database table for an indicator group comprising a plurality of indicators, the relational database table comprising, for each respective indicator of the plurality of indicators, a respective column configured to store aggregated values associated with a corresponding hardware sensor; and, upon determining that new aggregated values of the indicator group are available for processing, retrieving the aggregated values and writing the aggregated values to the relational database table. by an ingestion service (120, 312), obtaining streaming sensor data from a plurality of devices, wherein each device of the plurality of devices comprises one or more hardware sensors; determining from the sensor data an annotation rule for the sensor data; and annotating the sensor data according to the annotation rule to provide annotated data, wherein the hardware sensors correspond to indicators, wherein the indicators are grouped into one or more indicator groups, wherein the sensor data are annotated with a corresponding indicator group, and wherein the annotated data are stored in a timeseries data file in a data store in a semi-structured format; by an aggregation engine, upon determining that a new timeseries data file is available, generating one or more aggregated values from the annotated data of the timeseries data file, and writing the aggregated values back to the data store in the semi-structured format; and by a database writer, instantiating a relational database table for an indicator group comprising a plurality of indicators, the relational database table comprising, for each respective indicator of the plurality of indicators, a respective column configured to store aggregated values associated with a corresponding hardware sensor; and, upon determining that new aggregated values of the indicator group are available for processing, retrieving the aggregated values and writing the aggregated values to the relational database table.