external_table_functions_use_nulls
mysql, postgresql, odbc 테이블 함수가 널 허용 컬럼(Nullable columns)을 사용하는 방식을 정의합니다. 가능한 값:- 0 — 테이블 함수가 널 허용 컬럼을 명시적으로 사용합니다.
- 1 — 테이블 함수가 널 허용 컬럼을 암시적으로 사용합니다.
0으로 지정하면 테이블 함수는 컬럼을 널 허용으로 만들지 않으며, NULL 대신 기본값을 삽입합니다. 이는 배열 내부의 NULL 값에도 적용됩니다.
external_table_strict_query
true로 설정하면, 외부 데이터베이스로 푸시다운할 수 없는 외부 테이블(MySQL, PostgreSQL, SQLite, ODBC, JDBC) 컬럼에 대한 필터가 데이터를 가져온 후 로컬에서 적용되는 대신 예외를 발생시키며 거부됩니다.
이 검사는 최상위 WHERE 프레디케이트와 최상위 AND의 각 논리곱 항을 대상으로 합니다. 외부 테이블 컬럼에 대한 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)을 그대로 유지하며 거부되지 않습니다.