Splunk DB-Connect app 시작하기 - 4탄 (Splunk에서 RDBMS로 데이터 INSERT, UPDATE 하기, dbxoutput 사용하기)

Munang·2023년 1월 9일
1

splunk

목록 보기
26/52

splunk에서 쿼리를 사용해서 RDBMS에 접근할 때에는 대부분 dbxquery를 사용한다. 하지만 간혹 dbxoutput 쿼리를 사용할 때가 있다. 그런데 맨 처음 dbxoutput을 사용할 때 이상한 점을 느낀다. 그냥 update, insert 쿼리를 사용해서 바로 업데이트를 하고싶은데, 그게 안된다.

dbxoutput을 사용할 때에는 DB-Connect app에 정의된 데이터베이스 출력를 인수로 사용하게 되고, 이때 데이터베이스 출력 개체에 output하게 될 필드 정보를 저장한다.

이때 쿼리는 SQL이 아니라 SPL로 이뤄져야 한다. 그래서 처음에 이게 뭐지 싶었다. 난 그냥 update, insert쿼리를 사용한 SPL이 필요한데 그것은 Splunk에서 제공하지 않는다.

따라서 결론은 Splunk를 통해 Insert, update를 하려면

  • DB Connect 앱을 통해서 미리 정의한 데이터 베이스 출력 개체가 있어야함
  • 해당 출력 개체의 이름을 dbxoutput의 변수로 사용하여 수행

이다.

1. DataBase 출력 개체 만들기

DB Connect app -> Data Lab -> Outputs -> New Output 클릭

1) 쿼리 작성

|  makeresults
|  eval cityId=6, cityname="test", country_id=00, last_updated_date="2019-05-05 11:25:20"


현재 테이블이 이렇게 생겼다고 하면, 내가 업데이트 하고싶은 값을 makeresults를 이용해 임의로 만들어준다.

내가 업데이트 할 값을 테이블 필드와 매핑되게끔 만들어준다. 이렇게 임의의 결과를 만들고 이 결과의 필드 정보를 데이터베이스 출력 개체로 만드는 것 이다.


다음을 눌러서 연결하는 데이터 베이스와 테이블 정보를 클릭해준다.

2) 필드 매핑

내가 만든 쿼리의 컬럼 값이 실제 테이블 필드와 100% 일치할 수 없기 때문에 매핑 작업을 해준다.

이후, Upsert Configuration은 키 값이 일치할 경우 Insert가 아닌, update를 가능하게 하는지에 대한 부분이다.
나는 체크를 했고, city_id가 일치할 경우에는 insert가 아닌 update로 되게끔 했다.

3) 추가 정보 작성

dbxoutput에서 인수로 쓰일 출력 개체의 이름을 지정한다.
이후에는 파라미터 세팅을 한다.

  • Query Timeout: 쿼리가 완료될 때까지 기다리는 시간을 입력한다.
  • Batch size: 한번에 수행할 데이터 개수 제한이다.
  • Scheduling: 스케줄링을 크론탭으로 예약할 수 있다. 그럼 지정된 시간에 계속 db에 insert된다고 생각하면 된다.

나는 위의 그림과 같이 설정한 후에 완료했다.

2. 쿼리 수행

다음과 같이, 앞서 만들어진 샘플 쿼리와 같은 필드로 이뤄져 있는 makeresults 쿼리를 만들었다.
이후에 dbxoutput 에 output 인수로 앞서 만든 개체의 이름을 써주면 된다.

| makeresults 
| eval cityId=8, cityname="testtestetset", country_id=0230, last_updated_date="2019-05-05 11:25:20" 
| dbxoutput output="test_db"


실제 DB에 들어가봐도 업데이트 된 모습을 확인할 수 있다.

profile
Moonlilght

0개의 댓글