이 가이드에서는 Flux를 사용하여 InfluenceDB의 데이터를 쿼리하는 방법에 대한 기본적인 내용을 설명합니다.
모든 플럭스 쿼리에는 다음이 필요합니다.
- 데이터 소스
- 시간 범위
- 데이터 필터
Define your data source
example-bucket as the bucket name.
from(bucket:"example-bucket")
sepcify a time range
Flux는 시계열 데이터를 뭐리할 때 시간 범위를 지정해야 합니다.
Unbounded 쿼리는 매무 많은 리소스를 사용하므로 Flux는 보호적인 조치로써 지정된 범위 없이 데이터 베이스를 쿼리하지 않습니다.
Flux에서 데이터베이스에 대한 쿼리를 수행할 때 반드시 시간 범위를 명시해야 합니다. 시간 범위를 지정함으로써 Flux는 효율적으로 데이터를 처리하고, 리소스 사용을 최적화 할 수 있습니다. 시간 범위를 명시하지 않고 ""Unbounded" 쿼릴르 수행하면 모든 데이터를 대상으로 한 쿼리가 되므로 매우 많은 리소스를 사용하게 됩니다. 이는 성능 저하와 데이터베이스 부하를 초래할 수 있으므로 Flux에서는 이를 방지하기 위해 시간 범위가 지정되지 않은 쿼리를 실행하지 않습니다.
따라서 Flux를 사용하여 데이터를 쿼리할 때는 적절한 시간 범위를 지정하여 쿼리를 수행해야 합니다. 이를 통해 리소스를 효율적으로 활용하고, 쿼리 성능을 개선할 수 있습니다.
|>start and stop
Example relative time ranges
// Relative time range with start only. Stop defaults to now.
from(bucket:"example-bucket")
|> range(start: -1h)
// Relative time range with start and stop
from(bucket:"example-bucket")
|> range(start: -1h, stop: -10m)
상대적 범위는 현재시간에 상대적입니다.
예제 절대 시간 범위
from(bucket:"example-bucket")
|> range(start: 2021-01-01T00:00:00Z, stop: 2021-01-01T12:00:00Z)
다음을 사용합니다.
For this guide, use the relative time range, 15, to limit query results to data from the last 15 minutes:
from(bucket:"example-bucket")
|> range(start: -15m)
Filter your data
데이터 필터링
filter() 함수를 사용하여 데이터 속성이나 열을 기준으로 결과를 좁히기위해 범위 지정된 데이터를 전달하세요. filter() 함수는 fn이라는 하나의 매개변수를 가지며, 이는 행을 열 값으로 평가하는 예측 함수를 기대합니다.
filter() 함수는 입력된 각 행을 반복하고 행 데이터를 Flux 레코드로 구조화 합니다. 이 레코드는 예측 함수로 r이라는 변수로 전달되며, 예측식을 사용하여 평가됩니다.
flase로 평가되는 행은 출력 데이터에서 제거 됩니다. ture로 평가되는 행은 출력 데이터에 유지됩니다.
// Pattern
(r) => (r.recordProperty comparisonOperator comparisonExpression)
// Example with single filter
(r) => (r._measurement == "cpu")
// Example with multiple filters
(r) => (r._measurement == "cpu" and r._field != "usage_system")
Uset the following
For this example, filter by the cpu measurement, usage_system field,and cpu_total, tag value
from(bucket: "example-bucket")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total")
Yield your queried data
yield() outputs the result of the query
from(bucket: "example-bucket")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total")
|> yield()
Flux는 자동으로 각 스크립트의 끝에 yield() 함수를 가정하여 데이터를 출력하고 시각화 합니다. 여러 쿼리를 동일한 Flux 쿼리에 포함하는 경우에만 명시적으로 yield()를 호출하는 것이 필요합니다. 반환된 각 데이터 세트는 yeild() 함수를 사용하여 이름을 지정해야 합니다.
Flux는 일반적으로 스트립트의 끝에서 yield() 함수를 자동으로 호출하여 결과를 반환합니다.그러나 여러 개의 쿼리를 포함하는 경우에는 각각의 데이터 세트에 대해 yield() 함수를 사용하여 이름을 지정해야 합니다. 이렇게 함으로써 각 쿼리의 결과를 개별적으로 식별하고 사용할 수 있습니다.
예를 들어, 다음의 여러 개의 쿼리를 포함하는 Flux쿼리에서 yield() 함수를 사용하여 각 결과를 명명하는 방법입니다.
query1 = from(bucket: "my-bucket") |> range(start: -1h)
// 첫 번째 쿼리 실행
query2 = from(bucket: "my-bucket") |> range(start: -2h)
// 두 번째 쿼리 실행
yield(name: "result1", tables: [query1])
yield(name: "result2", tables: [query2])
// 결과를 명명하고 반환
이렇게 하면 각각의 쿼리 결과를 "result1" 및 "result2" 로 명명 하여 식별 할 수 있습니다. 각각의 결과는 필요한 경우 시각화나 추가 처리에 사용 될 수 있습니다.
'InfluxDB' 카테고리의 다른 글
인플럭스 데이터 이동 (0) | 2023.06.21 |
---|---|
InfluxDB 설계 원칙 (0) | 2023.06.14 |
인플럭스 DB data elements (0) | 2023.06.13 |
인플럭스DB 데이터 요소 (0) | 2023.03.06 |
InfluxDB 설치하기 (0) | 2023.03.03 |