본문 바로가기
카테고리 없음

[Vertica] 여러 Row 만들기 Timeseries 활용

by 쿡노트 2023. 11. 13.
반응형

Vertica DB에서 여러 Row, Column를 만들 수 있는 재귀 쿼리를 기재한다.
우선 Oracle에서만 제공하는 계층 쿼리 CONNECT BY LEVEL을 활용할 수 없어서, Vertica DB에서 제공하는 RECURSIVE WITH 절로 여러 Row, Column을 만들 수 있다.
예시를 들겠지만 RECURSIVE 사용시 앞단에, 쿼리 호출마다 ALTER SESSION을 사용해야 하므로 Vertica DB에 보다 효율적인 Timeseries를 활용법도 기재한다. 

1. Oracle (CONNECT BY LEVEL)  

--1.1 Oracle 1~3까지 여러 Row, Column 만들기

--1.2 Oracle 2023년 1월 부터 12월까지 생성

2. Vertica (Recursive WITH절)

--2.1 Vertica 1~3까지 여러 Row, Column 만들기

ALTER SESSION SET PARAMETER WithClauseRecursionLimit=2; -- 1 ~ 3까지 생성

WITH RECURSIVE nums (n) AS (
   SELECT 1
   UNION ALL
   SELECT n+1 FROM nums
  )
SELECT n,DECODE(n,1,'A',2,'B',3,'C') AS COL2 FROM nums;

3. Vertica (Timeseries WITH절)

--3.1 Vertica 1~3까지 여러 Row, Column 만들기

WITH limits(ts) AS (
  SELECT DATE '2000-01-01'::timestamp + 1 
  UNION ALL 
  SELECT DATE '2000-01-01'::timestamp + 3
)
SELECT
  tm::DATE - DATE '2000-01-01' AS COL1,
  DECODE(COL1,1,'A',2,'B',3,'C') AS COL2
FROM limits
TIMESERIES tm AS '1 day' OVER(ORDER BY ts);

--3.2 Vertica 2023년 1월 부터 12월까지 생성

WITH limits(ts) AS (
  SELECT DATE '2000-01-01'::timestamp + 1
  UNION ALL 
  SELECT DATE '2000-01-01'::timestamp + 12
)
SELECT
  '2023년 ' || LPAD(TO_CHAR(tm::DATE - DATE '2000-01-01'),2,'0') || '월' AS COL1
FROM limits
TIMESERIES tm AS '1 Day' OVER(ORDER BY ts);

 

 

TIMESERIES  기본 구문 

TIMESERIES 시간칼럼 (=ts) AS 시간 단위 분할(second, min, day...) OVER (ORDER BY 시간칼럼) 

**참조) Vertica Casting 3가지 구문

1) tm::DATE -> tm 컬럼을  Date 타입으로 Casting

2) DATE '2000-01-01' -> '2000-01-01' Data 타입으로 Casting

3) SELECT CAST('2000-01-01' AS DATE);

Oracle 참조 URL 

https://meyouus.tistory.com/175

 

오라클 순번 채번 CONNECT BY LEVEL 활용하기

안녕하세요. 오라클 디비 이용 시 알아두면 유용한 쿼리가 [CONNECT BY LEVEL]입니다. Connect By Start With는 계층 쿼리로 상하 관계를 질의하는 데 사용하는데요. LEVEL은 순위를 의미합니다. 이를 응용한

meyouus.tistory.com

Vertica Recursive WITH절 URL

https://www.vertica.com/docs/11.0.x/HTML/Content/Authoring/AnalyzingData/Queries/Subqueries/WithClauseRecursion.htm

Vertica Timeseries URL

https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/SELECT/TIMESERIESClause.htm

 

감사합니다!

반응형