MariaDB ColumnStore Union/Union All 관련 버그
- MariaDB ColumnStore Union/Union All 관련 버그가 있습니다.
- 버그 발생 상황
SELECT * |
- 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