Report: Charting Time-Series Metrics with GraphQL
GraphQL で時系列データの集約をどうするか?という話
https://www.youtube.com/watch?v=srfaKA2wJ0s
全売上のなかから収入を取得するクエリを考える。時系列データを集約する必要がある。
code:graphql
query {
sales(date: {
start: "2016-09-01",
end: "2016-11-01"
}) {
revenue(stat: mean)
}
}
code:graphql
type Query {
sales(date: DateFilter): SalesMetrics
}
type SalesMetrics {
revenue(stat: STAT = sum): Float
}
input DateFileter {
start: String
end: String
}
enum STAT { sum, mean, min, max }
期間内の集約のみでなく、その期間内の日毎、月ごとの収入も取得したい場合。
エイリアスの機能を利用することで、同一のクエリを別々に取得できる。
code:graphql
query {
sales(...) {
revenue
daily: interval(by: day) {
date
revenue
}
monthly: interval(by: month) { ... }
}
}
code:graphql
type Query {
sales(...)
interval(by: PERIOD): Interval
}
enum PERIOD {
hour
day
month
}
type Interval {
date: String
revenue: Float
}
また、取得した集約データのグラフ化には vega-lite を利用している