pivot

개요

테이블을 여러 컬럼들을 축으로 회전 및 각종 통계 정보를 행과 열 별로 구할 수 있습니다.

타입

TEXT, INTEGER, BIGINT, REAL, DATE, TIMESTAMP

설명

SPLITROW, SPLITCOL, AS 의 문구를 지원하며, SPLITROW는 가로축 기반으로 그리고 SPLITCOL은 세로축 기반으로 데이터를 축 기준으로 회전 하거나 aggregation을 할 수 있습니다. AS는 결과 값의 field의 별칭을 줄 수 있습니다.

pivot 의 결과를 sort 하고자 할 때, 옵션 SORTROW , SORTCOL을 사용할 수 있습니다.

  • SORTROW,SORTCOL 의 인자로는 ascdesc를 사용 할 수 있습니다.

  • 예) SORTCOL asc or SORTCOL desc

# SPLITCOL 인 DATE 컬럼에 대해 desc 로 정렬
... | pivot count(LEVEL_INT) SPLITCOL DATE SORTCOL desc

# SPLITROW 인 HOST 컬럼에 대해 asc 로 정렬
... | pivot count(LEVEL_INT) SPLITROW HOST SORTROW asc

# SPLITROW 인 HOST 와 SPLITCOL 인 DATE 컬럼에 대해 asc, desc 로 정렬
... | pivot count(LEVEL_INT) SPLITROW HOST SPLITCOL DATE SORTROW asc SORTCOL desc

Parameters

... | pivot FUNCTION (ASLIAS)? (, FUNCTION (ASLIAS)?)* (SPLITROW FIELD_NAME(, FIELD_NAME)*)? (SPLITCOL FIELD_NAME)? (FILTER filter_expr)? (COLSIZE N)? ((SORT order)? | (SORTROW order)? (SORTCOL order)?)

이름

설명

필수/옵션

FUNCTION

FUNC(FIELD_NAME) 입니다. 지원하는 *FUNC의 종류는 아래 표를 참조해주세요. FIELD_NAME은 field 이름을 뜻합니다.
예 : avg(fieldA), count(fieldB), …

필수

ASLIAS

AS FIELD_NAME 입니다. AS는 예약어 이며 FIELD_NAME은 field 이름을 뜻합니다.
예 : avg(fieldA) as avg_fieldA

옵션

SPLITROW

SPLITROW는 예약어이며, 여기에 정의된 field를 그룹핑하여 출력합니다. 각 FIELD_NAME, 으로 구분 됩니다.
예 : splitrow fieldA, fieldB

옵션

SPLITCOL

SPLITCOL은 예약어이며, 여기에 정의된 field를 그룹핑하여 가로축으로 피봇하여 출력합니다. 즉 field의 데이터가 컬럼명이 됩니다.
예 : splitcol fieldA

옵션

FILTER filter_expr

FILTER는 예약어이며 filter_expr은 filter 조건을 뜻합니다.
예 : filter fieldA=’valueA’

옵션

COLSIZE N

COLSIZE는 예약어이며 N은 몇 개의 컬럼을 보여 줄 지에 대한 개수입니다.
이 때, 컬럼의 개수에 해당하는 것은 SPLITCOL로 지정된 필드의 피벗 결과 컬럼의 개수입니다. SPLITROW의 필드와는 관계가 없습니다.
예 : colsize 10

옵션

SORT order

삭제될 옵션

옵션

SORTROW order

SORTROW는 예약어이며 orderasc/desc의 값이 들어 갑니다. SPLITROW로 지정된 필드에 대한 Sort 결과를 나타내 줍니다.
예 : sortrow desc

옵션

SORTCOL order

SORTCOL은 예약어이며 orderasc/desc의 값이 들어 갑니다. SPLITCOL로 지정된 필드의 피벗 결과에 대한 Sort 결과를 나타내 줍니다.
예 : sortcol desc

옵션

order

ASC, DESC는 일반적인 정렬을 의미합니다.
요일 정렬: WEEK ASC, WEEK DESC
달 정렬: MONTH ASC, MONTH DESC
계절 정렬: SEASON ASC, SEASON DESC

옵션

FUNC의 종류

이름

설명

지원 타입

avg()

평균 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

count()

카운트를 구합니다.

모든Type 가능

first()

첫 번째 값을 구합니다.

모든Type 가능

last()

마지막 값을 구합니다.

모든Type 가능

max()

제일 큰 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

min()

제일 작은 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

median()

중간 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

sum()

전체 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

stddev()

표준편차 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

stddev_samp()

표준편차 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

stddev_pop()

모표준편차 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

variance()

표본분산 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

var_samp()

표본분산 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

var_pop()

모분산 값을 구합니다.

TEXT, BINARY, BOOLEAN 불가능

countDistinct()

유니크한 값의 갯수를 구합니다.

모든Type 가능

요일 정렬

아래 이름이나 별명에 대해 우선적으로 정렬합니다.

이름

별명

설명

Monday

MON

월요일

Tuesday

TUE

화요일

Wednesday

WED

수요일

Thursday

THU

목요일

Friday

FRI

금요일

Saturday

SAT

토요일

Sunday

SUN

일요일

달 정렬

아래 이름이나 별명에 대해 우선적으로 정렬합니다.

이름

별명

설명

January

JAN

1월

February

FEB

2월

March

MAR

3월

April

APR

4월

May

5월

June

6월

July

7월

August

AUG

8월

September

SEPT

9월

October

OCT

10월

November

NOV

11월

December

DEC

12월

계절 정렬

아래 이름에 대해 우선적으로 정렬합니다.

이름

의미

spring

summer

여름

fall, autumn

가을

winter

겨울

Examples

  • 예제 데이터

sepal_length

sepal_width

speceis

5.1

3.5

Iris-setosa

4.9

3.0

Iris-setosa

4.7

3.2

Iris-setosa

3.7

4.7

Iris-setosa

5.8

8.2

Iris-setosa

7.3

2.6

Iris-setosa

7.4

5.4

Iris-setosa

6.5

7.8

setosa

6.2

4.7

setosa

5.9

12.5

setosa

4.3

5.2

setosa

5.7

7.3

setosa

5.2

3.8

setosa

2.5

7.1

setosa

  • count, avg, stddev, min, max, median, sum 통계 & SPLITROW Species
    • Species 는 3개 종이므로 SPLITROW Species 는 3개의 행으로 split 되어 결과가 나옵니다.

    • Species 이름으로 그룹핑 된 결과 에서 갯수, sepal_width 필드의 평균, 표준편차, 최소값, 최대값, 중간값, 합계를 구합니다.

  • SORTROW
    • SPLITROW Species SORTROW desc 는 Species 가 행으로 split 된 결과를 내림차순으로 표시합니다.

*  | pivot count(*) as 개수,
           avg(sepal_width) as 평균_sepal_width,
           stddev(sepal_width) as 표준편차_sepal_width,
           min(sepal_width) as 최소값_sepal_width,
           max(sepal_width) as 최대값_sepal_width,
           median(sepal_width) as 중간값_epal_width,
           sum(sepal_width) as 합계_sepal_width
     SPLITROW Species SORTROW desc

species

개수

평균_sepal_width

표본표준편차_sepal_width

모표준편차_sepal_width

최소값_sepal_width

최대값_sepal_width

중간값_epal_width

합계_sepal_width

분산_sepal_width

Iris-setosa

7

4.371428571428572

1.9567952419830796

1.8116403661672287

2.6

8.2

3.5

30.6

3.829047619047619

setosa

7

6.914285714285714

2.8783262332060113

2.6648122804047416

3.8

12.5

7.1

48.4

8.284761904761906

  • count, avg 통계 & SPLICOL Species & SORTCOL
    • SPLITCOL Species 는 Species결과_함수명(alias) 가 컬럼으로 생성되어 보여집니다.

*  | pivot count(*) as 개수, avg(sepal_width) as 평균_sepal_width SPLITCOL Species SORTCOL desc

Iris-setosa_평균_sepal_width

Iris-setosa_개수

setosa_평균_sepal_width

setosa_개수

6.914285714285714

7

4.371428571428572

7

  • countDistinct

*  | pivot countDistinct(Species)

countDistinct

2

  • 예제 데이터 2

DATETIME

HOST

“2020-07-03 12:14:00”

gcs1

“2020-07-03 12:24:00”

gcs1

“2020-07-05 12:34:00”

gcs1

“2020-07-03 11:34:00”

gcs1

“2020-07-04 04:34:00”

gcs1

“2020-07-03 04:34:00”

gcs2

“2020-07-04 02:34:00”

gcs2

“2020-07-03 01:34:00”

gcs2

“2020-07-04 05:34:00”

gcs2

“2020-07-05 03:34:00”

gcs2

“2020-07-04 12:13:00”

gcs2

“2020-07-03 12:14:00”

gcs2

  • HOST 별로 10시간 단위로 로그 COUNT 를 구합니다. SPLITROW 필드,필드 SORTROW asc/desc

* | pivot count(*) as CNT SPLITROW date_group(DATETIME, 10H) as TIME, HOST SORTROW asc

TIME

HOST

CNT

2020-07-03 00:00:00

gcs2

2

2020-07-03 10:00:00

gcs1

3

2020-07-03 10:00:00

gcs2

1

2020-07-04 00:00:00

gcs1

1

2020-07-04 00:00:00

gcs2

2

2020-07-04 10:00:00

gcs2

1

2020-07-05 00:00:00

gcs2

1

2020-07-05 10:00:00

gcs1

1