티스토리 뷰

반응형
  • MariaDB ColumnStore Union/Union All 관련 버그가 있습니다.
  • 버그 발생 상황   

SELECT *
FROM
(
   SELECT *
   FROM
   (
       SELECT a, b
       FROM 컬럼스토어_테이블
       UNION ALL
       SELECT a, b
       FROM 컬럼스토어_테이블
   ) V1  

) V2

=> V1까지는 데이터가 깨지지 않는데, V2를 조회하면 a,b 값이 마구 섞여져 
   조회가 됩니다.

 

  • MariaDB ColumnStore 1.2.5GA / 1.1.7GA 모두에서 동일하게 발생이 되었습니다.

 

  • 임시 해결 방안을 매뉴얼에서 찾을 수 있었습니다.

             MariaDB에 접속한 세션에서  "set infinidb_vtable_mode = 0 "으로 변경해 주면 데이터가 깨지지 않고

             출력이 됩니다.

             해당 세션에만 적용됨으로 필요시 매번 Operating Mode를 변경해 주어야 합니다.

             그리고 위 매뉴얼 내용에 Join은 nested-loop로 동작한다고 되어 있는 데 실제로 Join 횟수가 많으면

             조회 속도가 현저히 느려 졌습니다.

             버그 패치 전까지 필요시에 임시테이블 또는 Operating Mode를 변경해서 사용해야 합니다.

 

  •  마지막으로 "set infinidb_vtable_mode = 0 "으로 조회할 때 한가지 더 주의해야 할 내용이 있습니다.

             SELECT 절에서 상수를 사용하려면 마지막에 추가해서 사용해야 합니다.

              select '2019' as ym,  count(1), sum(prdt_price)   -- X

              select  count(1), sum(prdt_price) , '2019' as ym  -- O

              상수를 첫번째에 놓으면 count(1) 값이 무조건 0으로 나옵니다. (이것도 버그인가 ㅜㅜ)

             

                          

# 2019.12.27 추가

귀찮은 방법이지만 아래와 같이 SQL를 작성하면 데이터가 깨지지 않습니다.

문자열을 저장하는 컬럼에 모두 cast 연산자를 사용해 주면 됩니다.

SELECT *
FROM
(
   SELECT *
   FROM
   (
       SELECT cast(a as char) as string_value       #문자열 컬럼
                         , b                             as numeric_value  #숫자 컬럼
       FROM 컬럼스토어_테이블
       UNION ALL
       SELECT cast(a as char) as string_value       #문자열 컬럼
                         , b                             as numeric_value  #숫자 컬럼
       FROM 컬럼스토어_테이블
   ) V1  

) V2

 

반응형