이전 버전과 influxDBv2의 가장 큰 차이점은 쿼리언어가 Flux문으로 교체되었다는 점입니다.
아래에서는 Flux문에 대해서 알아봅시다.
[1] Query fields and tags
filter()를 사용해서 필드나 태그 또는 다른 컬럼의 값을 조건 기반으로 검색할 수 있습니다.
influxQL의 SELECT()문과 WHERE문을 조합해서 사용하던 방식과 유사합니다.
Flux 조건식은 predicate expression를 기반으로 하는데 predicate expression은 true, false를 반환합니다.
(r) => r.foo == "bar" and r.baz != "quz"
filter함수에서는 이러한 predicate expression으로 구성되는 predicate function (fn) 이라는 매개변수를 받습니다.
predicate function은 각 행에 대해서 조건식을 통해 true/false를 반환하고, true 값들의 행만 검색합니다.
predicate function(fn)에는 r 이라는 인수가 필요한데, 이는 입력 데이터 위에서 filter() 함수에서 반복되는 각 행을 나타냅니다.
행 레코드의 Key-Value 쌍은 열과 그 값을 나타냅니다. predicate function에서 특정 열 값을 참조하려면 점 표기법 또는 괄호 표기법을 사용하여 참조할 수 있습니다. 또한 논리 연산자를 사용하여 여러 술어 표현식을 함께 연결할 수 있습니다.
// Row record
r = {foo: "bar", baz: "quz"}
// Example predicate function
(r) => r.foo == "bar" and r["baz"] == "quz"
// Evaluation results
(r) => true and true
[1] Filter()를 통한 쿼리
from(), range() 및 filter()의 조합은 가장 기본적인 Flux 쿼리를 나타냅니다:
from() : 쿼리하려는 버킷를 명시합니다.
from() : 쿼리하려는 버킷를 명시합니다.
range() : 쿼리하려는 시간을 명시합니다.
filter() : 조건식을 통해 검색하려는 데이터 행을 명시합니다.
현재 시점에서 1h이전의 데이터 중 ( measurements && tag ) || filed 로 검색합니다.
from(bucket: "example-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "example-measurement" and r.tag == "example-tag")
|> filter(fn: (r) => r._field == "example-field")
[1] Group()을 통한 쿼리
반응형