테이블이 있으며 조건에 따라 decimal 유형의 열을 정수로 변환하려고합니다. 가능한 한 공연자로서 이것을해야합니다.고성능으로 select 절에 표현식을 변환하는 방법
내 현재 작업 쿼리는 다음과 같습니다 select *, (case when C_CUSTKEY < 20 then 1 else 0 end) as bit from TPCH.CUSTOMER
그러나 나는이 문제를 개선하기 위해 노력하고있어. 즉석에서 전환을 수행 할 수 있습니까? 이 같은 : select *, cast((C_CUSTKEY < 20) as integer) as bit from TPCH.CUSTOMER
심지어 같은 간단한 버전 : sql syntax error: incorrect syntax near "<"
업데이트 1
그래서 : select *, (C_CUSTKEY < 20) as bit from TPCH.CUSTOMER
는 상관없이 내가 무엇을 사용 기능, 난 항상 다음과 같은 오류를 얻을 더 나은 이해를 위해 내가하고 싶은 일의 실제 사용은 다음과 같습니다 :
select ((case when col1 < x then 1 else 0 end) + (case when col2 > y then 2 else 0 end)) as bitset from TPCH.CUSTOMER
일반적으로 많은 수의 '대/소문자'표현식 (> 100)이있을 수 있습니다.
- 이제 첫 번째 문제는 표현이 매우 낮다는 내가 나는 그것의 가능한 경우
2 * to_int(col2 > y)
같은 플라이 떨어지게의 변환에 알고 싶어 있도록 성능을 개선하기 위해 필요하지만이 작업을 수행 할 수있는 방법을 찾을 수 없습니다 . 여기에 사용 사례에 대한SQL internal parse tree depth exceeds its maximum: parse tree depth exceeds its maximum:255
내가 현재하고있는 것이지만 실제로 BIT 열을 구체화하고 싶지는 않습니다. 또한 (field
Jan
@Jan 내가 게시 한 예는 게시 된 SPS11에서 작동합니다. 구체화하고 싶지 않으면 select 명령의 투영 부분에서 대소 문자를 사용하십시오. –
그래서 질문에 썼다는 뜻인가요? 그건 내 목적이 너무 느리다. 'case when'표현의 성능을 향상시켜야합니다. ("C_CUSTKEY"> 40) then 2 else 0 end) + ...'''더 많은 것을 가진'''("C_CUSTKEY"<20) then then else 0 end) '표현이 매우 느릴 때. – Jan