A metric identifier consists of two fields - a name and an interval. The name is simply the metric name, e.g., cpu_usage. The interval is intended to distinguish aggregated metrics that are generated from raw metrics or from other aggregated metrics. For raw metrics, there is no interval, and we store an empty string.
It would be more flexible and incur less overhead at the storage layer if we simply store the interval in the metric name column. For the cpu_usage metric, we could have,
cpu_usage$1hr is the one hour metric. That is, it gets updated hourly. $ will be a reserved character that cannot be used in user-defined metric names. It will only be used in internally created metrics. This will ensure we avoid naming conflicts with user-defined metrics.
I mentioned that storing the interval in the name gives more flexibility. If we add support for sliding windows, we will want to store both the interval and the window. For example, suppose we want to aggregate the cpu_usage every 15 minutes using an hour's worth of data. We might generate a metric name like cpu_usage$15min$1hr.