외부 테이블 관련 설정
외부 테이블 관련 설정
mysql, postgresql, odbc 등 외부 테이블 함수가 Nullable 컬럼을 어떻게 사용하는지, 그리고 외부 테이블 컬럼에 대한 필터를 어떻게 처리할지를 제어하는 설정들이에요. 이 설정들은 system.settings 테이블에서 확인할 수 있고 소스 코드에서 자동 생성된 값들이에요.
출처: 문서
본문
이 설정들은 system.settings에서 확인할 수 있고, 소스 코드에서 자동 생성된 값들이에요.
external_table_functions_use_nulls
mysql, postgresql, odbc 테이블 함수가 Nullable 컬럼을 어떻게 사용하는지 정의해요.
가능한 값:
- 0 — 테이블 함수가 Nullable 컬럼을 명시적으로 사용해요.
- 1 — 테이블 함수가 Nullable 컬럼을 암시적으로 사용해요.
사용법
설정이 0이면 테이블 함수는 Nullable 컬럼을 만들지 않고 NULL 대신 기본값을 삽입해요. 이는 배열 안의 NULL 값에도 적용돼요.
external_table_strict_query
true로 설정하면 외부 데이터베이스로 푸시다운할 수 없는 외부 테이블(MySQL, PostgreSQL, SQLite, ODBC, JDBC) 컬럼에 대한 필터가 데이터를 가져온 후 로컬에서 적용되는 대신 예외로 거부돼요.
이 검사는 최상위 WHERE 술어와 최상위 AND의 각 conjunct를 다뤄요. 외부 테이블 컬럼에 대한 PREWHERE는 이 설정의 대상이 아니에요. 이런 테이블 엔진은 PREWHERE를 지원하지 않으며, 그런 쿼리는 설정과 무관하게 ILLEGAL_PREWHERE로 거부된답니다.
이 검사는 필터가 푸시다운될 수 있는 곳에서만 실행돼요. 외부 테이블이 쿼리의 유일한 테이블이거나, INNER JOIN의 양쪽, 또는 외부 조인의 보존 측(LEFT JOIN의 왼쪽, RIGHT JOIN의 오른쪽)일 때요. LEFT/RIGHT JOIN의 비보존 측과 FULL JOIN의 양쪽에서는 아무것도 푸시다운되지 않고 검사도 이루어지지 않아요. 따라서 외부 테이블 컬럼에 대한 필터는 엄격 모드에서도 조인 후 로컬로 적용돼요.
검사가 실행되는 곳에서, 주변 쿼리에 조인된 다른 테이블을 참조하는 술어는 푸시다운되지 않고 검사에서 제외돼요. 그것이 조인된 측만 참조하든(예: WHERE r.flag), 하나의 비-AND 표현식 안에서 외부 테이블과 섞든(예: WHERE l.id = 1 OR r.flag) 말이죠. 그런 술어는 일반적인 ClickHouse 평가 지점(조인 후 WHERE, 그 전의 PREWHERE)을 유지하고 거부되지 않아요.