728x90
반응형
아래와 같은 기본적인 InfluxDB Flux 조회 쿼리가 있습니다.
from(bucket: "bucketname")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "vehicleDriveCamera")
해당 Flux 퀴리의 의미와 SQL과 비교하면 아래와 같습니다.
1. from(bucket: "bucketname")
- Flux:
- InfluxDB의 저장소(bucket) "bucketname"에서 데이터를 읽어옵니다.
- MariaDB 비교:
- SQL에서 특정 테이블이나 데이터베이스를 지정하는 것과 비슷합니다. 예를 들어, FROM table_name처럼 데이터가 저장된 테이블을 지정하는 역할입니다.
2. |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
- Flux:
- range 함수는 시간 범위를 지정하여 데이터를 필터링합니다. v.timeRangeStart와 v.timeRangeStop는 변수로, 사용자가 대시보드에서 지정한 시작/종료 시간을 나타냅니다.
- MariaDB 비교:
- SQL의 WHERE 절에서 시간 컬럼을 사용하여 WHERE time BETWEEN '시작시간' AND '종료시간' 같은 조건을 주는 것과 유사합니다.
3. |> filter(fn: (r) => r["_measurement"] == "measurementName")
- Flux:
- filter 함수는 주어진 함수(fn)에 따라 레코드(행)를 걸러냅니다. 여기서는 레코드의 _measurement 필드 값이 "measurementName"인 데이터만 남깁니다.
- MariaDB 비교:
- SQL의 WHERE _measurement = 'measurementName' 조건과 같습니다. 단, InfluxDB에서는 각 레코드가 태그나 필드로 구성되어 있어서 _measurement는 데이터의 유형(테이블과 유사한 역할)을 나타냅니다.
그 외의 Flux 쿼리
=~ (like)
|> filter(fn: (r) => r["cameraId"] =~ /7/)
SQL 에서 like 와 같습니다.
cameraId 가 7이 포함된 레코드를 반환합니다.
=~ 대신에 !~을 사용하면 7이 포함되지 않는 모든 레코드를 반환합니다.
|> filter(fn: (r) => r["cameraId"] !~ /7/)
group (group by)
|> group(columns: ["cameraId"])
cameraId별로 데이터를 그룹화합니다. GROUP BY cameraId와 비슷한 역할을 합니다.
sort (order by)
|> sort(columns: ["_time"], desc: true)
각 그룹 내에서 _time(타임스탬프) 기준 내림차순 정렬을 수행합니다. SQL의 ORDER BY time DESC와 동일한 개념입니다.
limit (limit)
|> limit(n: 1)
각 그룹(각 cameraId별)에서 첫 번째 행, 즉 가장 최근의 데이터를 1건만 선택합니다.
728x90
반응형
'개발 > Tool' 카테고리의 다른 글
[Keycloak] 외부 DB 인증·인가 이력 저장 및 조회 방법 (0) | 2025.02.05 |
---|---|
[Jenkins] Jenkins 빌드 번호 변경하는 방법: Script Console 활용 가이드 (0) | 2024.11.18 |
[Jenkins] 파이프라인 빌드 오류 해결: Gradle 설정 문제 (2) | 2024.11.14 |
Keycloak Client 문제 해결: 401 에러 및 DB Node 관련 문제 해결 방법 (0) | 2024.08.23 |
이미지 좌표 구하기 (0) | 2024.07.03 |