.. role:: raw-html-m2r(raw) :format: html pivot ===== 개요 ---- 테이블을 여러 컬럼들을 축으로 회전 및 각종 통계 정보를 행과 열 별로 구할 수 있습니다. 타입 ---------------------------------------------------------------------------------------------------- TEXT, INTEGER, BIGINT, REAL, DATE, TIMESTAMP 설명 ---- ``SPLITROW``\ , ``SPLITCOL``\ , ``AS`` 의 문구를 지원하며, ``SPLITROW``\ 는 가로축 기반으로 그리고 ``SPLITCOL``\ 은 세로축 기반으로 데이터를 축 기준으로 회전 하거나 aggregation을 할 수 있습니다. ``AS``\ 는 결과 값의 field의 별칭을 줄 수 있습니다. pivot 의 결과를 sort 하고자 할 때, 옵션 ``SORTROW`` , ``SORTCOL``\ 을 사용할 수 있습니다. * ``SORTROW``\ ,\ ``SORTCOL`` 의 인자로는 ``asc`` 및 ``desc``\ 를 사용 할 수 있습니다. * 예) ``SORTCOL asc`` or ``SORTCOL desc`` .. code-block:: none # 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 ---------- .. code-block:: python ... | pivot FUNCTION (ASLIAS)? (, FUNCTION (ASLIAS)?)* (SPLITROW FIELD_NAME(, FIELD_NAME)*)? (SPLITCOL FIELD_NAME)? (FILTER filter_expr)? (COLSIZE N)? ((SORT order)? | (SORTROW order)? (SORTCOL order)?) .. list-table:: :header-rows: 1 * - 이름 - 설명 - 필수/옵션 * - FUNCTION - ``FUNC(FIELD_NAME)`` 입니다. 지원하는 *\ ``FUNC``\ 의 종류는 아래 표를 참조해주세요. ``FIELD_NAME``\ 은 field 이름을 뜻합니다.\ :raw-html-m2r:`
`\ 예 : avg(fieldA), count(fieldB), ... - 필수 * - ASLIAS - ``AS FIELD_NAME`` 입니다. ``AS``\ 는 예약어 이며 ``FIELD_NAME``\ 은 field 이름을 뜻합니다.\ :raw-html-m2r:`
` 예 : avg(fieldA) as avg_fieldA - 옵션 * - SPLITROW - ``SPLITROW``\ 는 예약어이며, 여기에 정의된 field를 그룹핑하여 출력합니다. 각 ``FIELD_NAME``\ 는 ``,`` 으로 구분 됩니다.\ :raw-html-m2r:`
`\ 예 : splitrow fieldA, fieldB - 옵션 * - SPLITCOL - ``SPLITCOL``\ 은 예약어이며, 여기에 정의된 field를 그룹핑하여 가로축으로 피봇하여 출력합니다. 즉 field의 데이터가 컬럼명이 됩니다.\ :raw-html-m2r:`
`\ 예 : splitcol fieldA - 옵션 * - FILTER filter_expr - ``FILTER``\ 는 예약어이며 ``filter_expr``\ 은 filter 조건을 뜻합니다.\ :raw-html-m2r:`
` 예 : filter fieldA='valueA' - 옵션 * - COLSIZE N - ``COLSIZE``\ 는 예약어이며 ``N``\ 은 몇 개의 컬럼을 보여 줄 지에 대한 개수입니다.\ :raw-html-m2r:`
`\ 이 때, 컬럼의 개수에 해당하는 것은 ``SPLITCOL``\ 로 지정된 필드의 피벗 결과 컬럼의 개수입니다. ``SPLITROW``\ 의 필드와는 관계가 없습니다.\ :raw-html-m2r:`
`\ 예 : colsize 10 - 옵션 * - SORT order - 삭제될 옵션 - 옵션 * - SORTROW order - ``SORTROW``\ 는 예약어이며 ``order``\ 은 ``asc/desc``\ 의 값이 들어 갑니다. ``SPLITROW``\ 로 지정된 필드에 대한 Sort 결과를 나타내 줍니다.\ :raw-html-m2r:`
`\ 예 : sortrow desc - 옵션 * - SORTCOL order - ``SORTCOL``\ 은 예약어이며 ``order``\ 은 ``asc/desc``\ 의 값이 들어 갑니다. ``SPLITCOL``\ 로 지정된 필드의 피벗 결과에 대한 Sort 결과를 나타내 줍니다.\ :raw-html-m2r:`
`\ 예 : sortcol desc - 옵션 * - ``order`` - ``ASC``\ , ``DESC``\ 는 일반적인 정렬을 의미합니다.\ :raw-html-m2r:`
`\ 요일 정렬: ``WEEK ASC``\ , ``WEEK DESC``\ :raw-html-m2r:`
`\ 달 정렬: ``MONTH ASC``\ , ``MONTH DESC``\ :raw-html-m2r:`
`\ 계절 정렬: ``SEASON ASC``\ , ``SEASON DESC`` - 옵션 \ ``FUNC``\ 의 종류 .. list-table:: :header-rows: 1 * - 이름 - 설명 - 지원 타입 * - ``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 가능 요일 정렬 아래 이름이나 별명에 대해 우선적으로 정렬합니다. .. list-table:: :header-rows: 1 * - 이름 - 별명 - 설명 * - Monday - MON - 월요일 * - Tuesday - TUE - 화요일 * - Wednesday - WED - 수요일 * - Thursday - THU - 목요일 * - Friday - FRI - 금요일 * - Saturday - SAT - 토요일 * - Sunday - SUN - 일요일 달 정렬 아래 이름이나 별명에 대해 우선적으로 정렬합니다. .. list-table:: :header-rows: 1 * - 이름 - 별명 - 설명 * - 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월 계절 정렬 아래 이름에 대해 우선적으로 정렬합니다. .. list-table:: :header-rows: 1 * - 이름 - 의미 * - spring - 봄 * - summer - 여름 * - fall, autumn - 가을 * - winter - 겨울 Examples ---------------------------------------------------------------------------------------------------- - 예제 데이터 .. list-table:: :header-rows: 1 * - 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 된 결과를 내림차순으로 표시합니다. .. code-block:: python * | 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 .. list-table:: :header-rows: 1 * - 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)`` 가 컬럼으로 생성되어 보여집니다. .. code-block:: python * | pivot count(*) as 개수, avg(sepal_width) as 평균_sepal_width SPLITCOL Species SORTCOL desc .. list-table:: :header-rows: 1 * - Iris-setosa_평균_sepal_width - Iris-setosa_개수 - setosa_평균_sepal_width - setosa_개수 * - 6.914285714285714 - 7 - 4.371428571428572 - 7 * countDistinct .. code-block:: python * | pivot countDistinct(Species) .. list-table:: :header-rows: 1 * - countDistinct * - 2 - 예제 데이터 2 .. list-table:: :header-rows: 1 * - 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`` .. code-block:: python * | pivot count(*) as CNT SPLITROW date_group(DATETIME, 10H) as TIME, HOST SORTROW asc .. list-table:: :header-rows: 1 * - 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