Oracle 커넥터
Oracle 커넥터 (Oracle connector)
Oracle 커넥터는 Trino 쿼리에서 외부 Oracle 데이터베이스의 데이터를 조회하고 테이블을 만들 수 있게 해줍니다. 커넥터를 활용하면 Oracle과 Hive처럼 서로 다른 데이터베이스, 또는 여러 Oracle 데이터베이스 인스턴스의 데이터를 조인할 수 있어요.
출처: 문서
본문
요구 사항 (Requirements)
Oracle에 연결하려면 다음이 필요합니다:
- Oracle 23 이상.
- Trino 코디네이터와 워커에서 Oracle로의 네트워크 접근. 기본 포트는 1521.
설정 (Configuration)
Oracle 커넥터를 example 카탈로그로 설정하려면 etc/catalog에 example.properties라는 파일을 만들고 다음 연결 속성을 넣어주세요:
connector.name=oracle
# connection-url의 정확한 문법은 Oracle 버전과 설정에 따라 다릅니다. 다음 예제 URL은
# "orcl"이라는 Oracle SID에 연결합니다.
connection-url=jdbc:oracle:thin:@example.net:1521:orcl
connection-user=root
connection-password=secret
connection-url은 JDBC 드라이버에 전달할 연결 정보와 파라미터를 정의합니다. Oracle 커넥터는 Oracle JDBC Thin 드라이버를 사용하며, URL 문법은 Oracle 설정에 따라 다를 수 있습니다. 예를 들어 Oracle SID에 연결하는지 서비스 이름에 연결하는지에 따라 연결 URL이 다릅니다. 자세한 내용은 Oracle Database JDBC driver 문서를 참고하세요.
connection-user와 connection-password는 일반적으로 필수이며 연결 자격 증명(보통 서비스 사용자)을 결정합니다. 시크릿 (secrets)을 사용하면 카탈로그 속성 파일에 실제 값을 넣지 않고도 관리할 수 있습니다.
Oracle은 기본적으로 JDBC 드라이버의 REMARKS 컬럼으로 메타데이터 주석을 노출하지 않습니다. oracle.remarks-reporting.enabled 설정 옵션으로 활성화할 수 있습니다.
기본적으로 Oracle 커넥터는 성능 향상을 위해 연결 풀링을 사용합니다. 아래 설정은 전형적인 기본값을 보여줍니다:
oracle.connection-pool.max-size=30
oracle.connection-pool.min-size=1
oracle.connection-pool.inactive-timeout=20m
oracle.connection-pool.wait-duration=3s
연결 풀링을 비활성화하려면 속성을 다음처럼 설정하세요:
oracle.connection-pool.enabled=false
데이터 소스 인증 (Data source authentication)
커넥터는 데이터 소스 연결용 자격 증명을 여러 방법으로 제공할 수 있습니다:
- 커넥터 설정 파일에 inline으로
- 별도의 properties 파일로
- 키 스토어 파일로
- Trino에 연결할 때 추가 자격 증명 (extra credentials)으로
시크릿 (secrets)을 활용하면 카탈로그 속성 파일에 민감한 값을 저장하지 않을 수 있어요.
다음 표는 연결 자격 증명 설정 속성을 설명합니다:
| 속성 이름 | 설명 |
|---|---|
credential-provider.type |
자격 증명 공급자 유형. INLINE, FILE, KEYSTORE 중 하나여야 하며 기본값은 INLINE. |
connection-user |
연결 사용자 이름. |
connection-password |
연결 비밀번호. |
user-credential-name |
사용자 이름으로 사용할 추가 자격 증명 속성 이름. |
password-credential-name |
비밀번호로 사용할 추가 자격 증명 속성 이름. |
connection-credential-file |
자격 증명이 있는 properties 파일 위치. connection-user와 connection-password 속성을 포함해야 합니다. |
keystore-file-path |
자격 증명을 읽을 Java Keystore 파일 위치. |
keystore-type |
키 스토어 파일 형식(예: JKS 또는 PEM). |
keystore-password |
키 스토어 비밀번호. |
keystore-user-credential-name |
사용자 이름으로 사용할 키 스토어 엔티티 이름. |
keystore-user-credential-password |
사용자 이름 키 스토어 엔티티의 비밀번호. |
keystore-password-credential-name |
비밀번호로 사용할 키 스토어 엔티티 이름. |
keystore-password-credential-password |
비밀번호 키 스토어 엔티티의 비밀번호. |
여러 Oracle 서버 (Multiple Oracle servers)
여러 Oracle 서버에 연결하려면 커넥터를 별도의 카탈로그로 또 설정하세요. 예를 들어 sales.properties라는 파일을 만들면 Trino가 sales라는 카탈로그를 생성합니다.
일반 설정 속성 (General configuration properties)
다음 표는 커넥터의 일반적인 카탈로그 설정 속성을 설명합니다:
| 속성 이름 | 설명 | 기본값 |
|---|---|---|
case-insensitive-name-matching |
대소문자 구분 없는 스키마/테이블 이름 지원 여부. | false |
case-insensitive-name-matching.cache-ttl |
대소문자 구분 없는 이름이 캐시되는 기간. | 1m |
case-insensitive-name-matching.config-file |
이름 매핑 설정 파일(JSON) 경로. | null |
case-insensitive-name-matching.config-file.refresh-period |
이름 매핑 파일 변경 확인 주기. | 0s |
metadata.cache-ttl |
테이블/컬럼 통계를 포함한 메타데이터 캐시 기간. | 0s |
metadata.cache-missing |
메타데이터가 없음을 캐시할지 여부. | false |
metadata.schemas.cache-ttl |
스키마 메타데이터 캐시 기간. | metadata.cache-ttl 값 |
metadata.tables.cache-ttl |
테이블 메타데이터 캐시 기간. | metadata.cache-ttl 값 |
metadata.statistics.cache-ttl |
테이블 통계 캐시 기간. | metadata.cache-ttl 값 |
metadata.cache-maximum-size |
메타데이터 캐시에 저장되는 최대 객체 수. | 10000 |
write.batch-size |
배치 실행에서의 최대 명령문 수. 기본값에서 바꾸지 마세요. | 1000 |
dynamic-filtering.enabled |
동적 필터를 JDBC 쿼리로 푸시다운. | true |
dynamic-filtering.wait-timeout |
JDBC 쿼리 시작 전에 조인의 빌드 측에서 동적 필터가 모이기를 기다리는 최대 시간. 큰 타임아웃은 더 상세한 동적 필터를 만들 수 있지만 일부 쿼리 대기 시간을 늘릴 수 있습니다. | 20s |
쿼리 메타데이터 추가 (Appending query metadata)
query.comment-format 선택 파라미터로 각 쿼리와 함께 데이터 소스에 전송되는 SQL 주석을 설정할 수 있습니다. 이 주석의 형식은 어떤 문자든 포함할 수 있으며 다음 메타데이터를 지원합니다:
$QUERY_ID: 쿼리 식별자.$USER: 쿼리를 Trino에 제출한 사용자 이름.$SOURCE: 쿼리를 제출하는 데 사용된 클라이언트 도구 식별자 (예:trino-cli).$TRACE_TOKEN: 클라이언트 도구로 설정된 추적 토큰.
주석은 쿼리에 더 많은 맥락을 제공할 수 있으며, 이 정보는 데이터 소스의 로그에서 확인할 수 있습니다. Trino 클러스터의 환경 변수를 주석에 포함하려면 ${ENV:VARIABLE-NAME} 문법을 사용하세요.
다음 예제는 Trino가 보내는 각 쿼리를 식별하는 간단한 주석을 설정합니다:
query.comment-format=Query sent by Trino.
이 설정에서 SELECT * FROM example_table; 같은 쿼리는 주석이 덧붙여져 데이터 소스로 전송됩니다:
SELECT * FROM example_table; /*Query sent by Trino.*/
다음 예제는 메타데이터를 사용해 앞선 예제를 개선합니다:
query.comment-format=Query $QUERY_ID sent by user $USER from Trino.
Jane이 쿼리 식별자 20230622_180528_00000_bkizg로 쿼리를 보냈다면 다음 주석 문자열이 데이터 소스로 전송됩니다:
SELECT * FROM example_table; /*Query 20230622_180528_00000_bkizg sent by user Jane from Trino.*/
일부 JDBC 드라이버 설정과 로깅 구성은 주석이 제거되게 할 수 있습니다.
도메인 압축 임계값 (Domain compaction threshold)
큰 조건 목록을 데이터 소스로 푸시다운하면 성능이 저하될 수 있습니다. Trino는 기본적으로 큰 조건을 더 단순한 범위 조건으로 압축해 성능과 조건 푸시다운 사이의 균형을 맞춥니다. domain-compaction-threshold 카탈로그 설정 속성 또는 domain_compaction_threshold 카탈로그 세션 속성으로 이 임계값의 기본값인 256을 조정할 수 있습니다.
대소문자 구분 없는 매칭 (Case insensitive matching)
case-insensitive-name-matching을 true로 설정하면 Trino는 소문자 이름을 원격 시스템의 실제 이름에 매핑해 비소문자 스키마와 테이블을 조회할 수 있습니다. 다만 이름이 대소문자만 다른 두 스키마/테이블("customers"와 "Customers")이 있으면 모호성 때문에 조회가 실패합니다.
이런 경우 case-insensitive-name-matching.config-file 카탈로그 설정 속성으로 원격 스키마/테이블을 각각의 Trino 스키마/테이블에 매핑하는 설정 파일을 지정하세요. JSON 파일은 빈 배열이라도 schemas와 tables 속성을 모두 포함해야 합니다.
{
"schemas": [
{
"remoteSchema": "CaseSensitiveName",
"mapping": "case_insensitive_1"
},
{
"remoteSchema": "cASEsENSITIVEnAME",
"mapping": "case_insensitive_2"
}],
"tables": [
{
"remoteSchema": "CaseSensitiveName",
"remoteTable": "tablex",
"mapping": "table_1"
},
{
"remoteSchema": "CaseSensitiveName",
"remoteTable": "TABLEX",
"mapping": "table_2"
}]
}
mapping 속성에 정의된 테이블/스키마 중 하나를 대상으로 한 쿼리는 해당 원격 엔티티에 대해 실행됩니다. 매핑 설정 파일이 변경되면 기본적으로 Trino를 재시작해야 변경 사항이 로드됩니다. case-insensitive-name-matching.config-file.refresh-period를 설정하면 재시작 없이 속성을 갱신할 수 있습니다:
case-insensitive-name-matching.config-file.refresh-period=30s
장애 허용 실행 지원 (Fault-tolerant execution support)
커넥터는 쿼리 처리의 장애 허용 실행을 지원합니다. 어떤 재시도 정책으로든 읽기와 쓰기 연산 모두 지원됩니다.
Oracle 조회 (Querying Oracle)
Oracle 커넥터는 각 Oracle 데이터베이스에 대해 스키마를 제공합니다. SHOW SCHEMAS로 사용 가능한 Oracle 데이터베이스를 확인할 수 있습니다:
SHOW SCHEMAS FROM example;
Trino에서 테이블에 접근하려면 Oracle 사용자가 해당 테이블에 접근 권한이 있어야 합니다.
예제 (Examples)
web이라는 Oracle 데이터베이스가 있으면 SHOW TABLES로 이 데이터베이스의 테이블을 볼 수 있습니다:
SHOW TABLES FROM example.web;
web 데이터베이스의 clicks 테이블 컬럼 목록은 다음 중 하나로 확인할 수 있습니다:
DESCRIBE example.web.clicks;
SHOW COLUMNS FROM example.web.clicks;
web 데이터베이스의 clicks 테이블에 접근하려면 다음을 실행하세요:
SELECT * FROM example.web.clicks;
데이터 유형 매핑 (Type mapping)
Trino와 Oracle은 서로 지원하지 않는 유형이 있으므로, 이 커넥터는 데이터를 읽거나 쓸 때 일부 유형을 변환합니다. 각 방향의 매핑은 아래 표를 참고하세요.
Oracle에서 Trino로의 유형 매핑:
| Oracle 데이터베이스 유형 | Trino 유형 | 비고 |
|---|---|---|
NUMBER(p, s) |
DECIMAL(pʹ, sʹ) 또는 NUMBER |
입력 데이터를 손실 없이 Trino DECIMAL로 표현할 수 있으면 DECIMAL로 매핑. 1 ≤ p ≤ 38이고 0 ≤ s ≤ p이면 pʹ = p, sʹ = s, 아니면 더 넓은 유형 사용. 손실 없이 표현할 수 없으면 NUMBER로 매핑. |
NUMBER |
NUMBER |
|
FLOAT[(p)] |
DOUBLE |
p가 53을 넘으면 정밀도 손실이 있을 수 있음. Oracle FLOAT의 기본 정밀도는 53. |
BINARY_FLOAT |
REAL |
|
BINARY_DOUBLE |
DOUBLE |
|
VARCHAR2(n CHAR) |
VARCHAR(n) |
|
VARCHAR2(n BYTE) |
VARCHAR(n) |
|
NVARCHAR2(n) |
VARCHAR(n) |
|
CHAR(n) |
CHAR(n) |
|
NCHAR(n) |
CHAR(n) |
|
CLOB |
VARCHAR |
|
NCLOB |
VARCHAR |
|
RAW(n) |
VARBINARY |
|
BLOB |
VARBINARY |
|
DATE |
TIMESTAMP(0) |
datetime 유형 매핑 참고 |
TIMESTAMP(p) |
TIMESTAMP(p) |
datetime 유형 매핑 참고 |
TIMESTAMP(p) WITH TIME ZONE |
TIMESTAMP WITH TIME ZONE |
datetime 유형 매핑 참고 |
그 외 유형은 지원되지 않습니다.
Trino에서 Oracle로의 유형 매핑:
| Trino 유형 | Oracle 데이터베이스 유형 | 비고 |
|---|---|---|
TINYINT |
NUMBER(3) |
|
SMALLINT |
NUMBER(5) |
|
INTEGER |
NUMBER(10) |
|
BIGINT |
NUMBER(19) |
|
DECIMAL(p, s) |
NUMBER(p, s) |
|
NUMBER |
NUMBER |
|
REAL |
BINARY_FLOAT |
|
DOUBLE |
BINARY_DOUBLE |
|
VARCHAR |
NCLOB |
|
VARCHAR(n) |
VARCHAR2(n CHAR) 또는 NCLOB |
character 유형 매핑 참고 |
CHAR(n) |
CHAR(n CHAR) 또는 NCLOB |
character 유형 매핑 참고 |
VARBINARY |
BLOB |
|
DATE |
DATE |
datetime 유형 매핑 참고 |
TIMESTAMP |
TIMESTAMP(3) |
datetime 유형 매핑 참고 |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP(3) WITH TIME ZONE |
datetime 유형 매핑 참고 |
그 외 유형은 지원되지 않습니다. 아래 표에 없는 유형은 Trino가 CREATE TABLE AS SELECT 연산을 수행할 수 없으며, 기존 테이블에 데이터를 삽입할 때는 Oracle to Trino 유형 매핑이 사용됩니다.
datetime 유형 매핑 (Mapping datetime types)
소수 초 정밀도(p)가 9보다 큰 타임스탬프를 쓰면 소수 초가 9자리로 반올림됩니다.
Oracle DATE 유형은 시/분/초를 저장하므로 Trino TIMESTAMP(0)으로 매핑됩니다.
Trino와 Oracle JDBC 드라이버가 사용하는 라이브러리의 날짜/시간 차이 때문에 1582-10-15보다 이른 datetime 값을 삽입하거나 선택하면 잘못된 날짜가 삽입될 수 있습니다.
character 유형 매핑 (Mapping character types)
Trino의 VARCHAR(n)은 n이 4000 이하이면 VARCHAR2(n CHAR)로, 더 크거나 무제한이면 NCLOB로 매핑됩니다.
Trino의 CHAR(n)은 n이 2000 이하이면 CHAR(n CHAR)로, 더 크면 NCLOB로 매핑됩니다.
CREATE TABLE AS로 CHAR 값에서 NCLOB 컬럼을 만들면 컬럼의 초기 값에서 끝 공백이 제거됩니다. 기존 NCLOB 컬럼에 CHAR 값을 삽입하면 끝 공백이 유지됩니다:
CREATE TABLE vals AS SELECT CAST('A' as CHAR(2001)) col;
INSERT INTO vals (col) VALUES (CAST('BB' as CHAR(2001)));
SELECT LENGTH(col) FROM vals;
_col0
-------
2001
1
(2 rows)
컬럼의 실제 크기에 맞지 않는 CHAR를 쓰려고 하면 실패합니다. 이는 동등한 VARCHAR 유형에도 해당됩니다.
유형 매핑 설정 속성 (Type mapping configuration properties)
| 속성 이름 | 설명 | 기본값 |
|---|---|---|
unsupported-type-handling |
지원되지 않는 컬럼 유형 처리 방식: IGNORE(컬럼 접근 불가) 또는 CONVERT_TO_VARCHAR(무제한 VARCHAR로 변환). 해당 카탈로그 세션 속성은 unsupported_type_handling. |
IGNORE |
jdbc-types-mapped-to-varchar |
무제한 VARCHAR로 변환할 유형의 쉼표 구분 목록을 강제 매핑. |
— |
숫자를 decimal로 변환하는 설정 속성 (Number to decimal configuration properties)
| 설정 속성 이름 | 세션 속성 이름 | 설명 | 기본값 |
|---|---|---|---|
oracle.number.default-scale |
number_default_scale |
정밀도와 스케일이 없는 Oracle NUMBER 유형의 기본 Trino DECIMAL 스케일. 설정하지 않으면 해당 컬럼은 지원되지 않는 것으로 취급. |
미설정 |
oracle.number.rounding-mode |
number_rounding_mode |
Oracle NUMBER 유형의 반올림 모드. Oracle NUMBER가 Trino가 지원하는 것보다 높은 스케일을 지정할 때 유용. 가능한 값: UNNECESSARY, CEILING, FLOOR, HALF_DOWN, HALF_EVEN, HALF_UP, UP, DOWN. |
UNNECESSARY |
SQL 지원 (SQL support)
커넥터는 Oracle의 데이터와 메타데이터에 대해 읽기/쓰기 접근을 제공합니다. 전역 사용 가능 명령문과 읽기 연산 명령문에 더해 다음 기능을 지원합니다:
- INSERT — 비트랜잭션 INSERT 참고
- UPDATE — UPDATE 제한 참고
- DELETE — DELETE 제한 참고
- TRUNCATE
- CREATE TABLE
- CREATE TABLE AS
- DROP TABLE
- ALTER TABLE — ALTER TABLE RENAME TO 제한 참고
- COMMENT
- 프로시저
- 테이블 함수
비트랜잭션 INSERT (Non-transactional INSERT)
커넥터는 INSERT 문으로 행 추가를 지원합니다. 기본적으로 데이터는 임시 테이블에 먼저 기록됩니다. insert.non-transactional-insert.enabled 카탈로그 속성 또는 해당 non_transactional_insert 카탈로그 세션 속성을 true로 설정하면 이 단계를 건너뛰고 대상 테이블에 직접 기록해 성능을 높일 수 있습니다.
이 속성을 켜면 드물게 insert 작업 중 예외가 발생할 때 데이터가 손상될 수 있습니다. 트랜잭션이 비활성화되므로 롤백이 불가능합니다.
UPDATE 제한 (UPDATE limitation)
상수 할당과 상수 조건을 가진 UPDATE 문만 지원합니다. 산술 표현식, 함수 호출 등 비상수 UPDATE 문은 지원되지 않습니다. 한 행의 모든 컬럼 값을 동시에 갱신할 수는 없습니다.
DELETE 제한 (DELETE limitation)
WHERE 절이 지정되면 해당 절의 조건을 데이터 소스에 완전히 푸시다운할 수 있을 때만 DELETE가 동작합니다.
ALTER TABLE RENAME TO 제한 (ALTER TABLE RENAME TO limitation)
여러 스키마에 걸친 테이블 이름 변경은 지원하지 않습니다. 예를 들어 다음 문은 지원됩니다:
ALTER TABLE example.schema_one.table_one RENAME TO example.schema_one.table_two
다음 문은 스키마를 넘어 이름을 바꾸려 하므로 지원되지 않습니다:
ALTER TABLE example.schema_one.table_one RENAME TO example.schema_two.table_two
프로시저 (Procedures)
system.flush_metadata_cache()
JDBC 메타데이터 캐시를 비웁니다:
USE example.example_schema;
CALL system.flush_metadata_cache();
system.execute('query')
execute 프로시저는 연결된 데이터 소스에서 쿼리를 직접 실행하게 해줍니다. 쿼리는 연결된 데이터 소스의 지원 문법을 사용해야 합니다. Trino에 없는 기능에 접근하거나, 결과 집합을 반환하지 않아 query나 raw_query 패스스루 테이블 함수로 사용할 수 없는 쿼리를 실행할 때 유용합니다.
쿼리 텍스트는 Trino가 파싱하지 않고 그대로 전달하므로, 연결된 데이터 소스의 보안/접근 제어만 적용됩니다.
USE example.example_schema;
CALL system.execute(query => 'ALTER TABLE your_table ALTER COLUMN your_column DROP DEFAULT');
테이블 함수 (Table functions)
커넥터는 Oracle에 접근하기 위한 특정 테이블 함수를 제공합니다.
query(varchar) -> table
query 함수는 연결된 데이터베이스를 직접 조회하게 해줍니다. 전체 쿼리가 푸시다운되어 Oracle에서 처리되므로 Oracle 고유 문법이 필요합니다.
연결된 데이터 소스에 전달되는 네이티브 쿼리는 결과 집합으로 테이블을 반환해야 합니다. 검증과 보안 검사는 오직 데이터 소스가 자체 설정으로 수행합니다. 패스스루 쿼리는 데이터 읽기에만 사용하세요.
간단한 예로, example 카탈로그를 조회해 전체 테이블을 선택합니다:
SELECT
*
FROM
TABLE(
example.system.query(
query => 'SELECT
*
FROM
tpch.nation'
)
);
실용적인 예로, Oracle SQL의 MODEL 절을 사용할 수 있습니다:
SELECT
SUBSTR(country, 1, 20) country,
SUBSTR(product, 1, 15) product,
year,
sales
FROM
TABLE(
example.system.query(
query => 'SELECT
*
FROM
sales_view
MODEL
RETURN UPDATED ROWS
MAIN
simple_model
PARTITION BY
country
MEASURES
sales
RULES
(sales['Bounce', 2001] = 1000,
sales['Bounce', 2002] = sales['Bounce', 2001] + sales['Bounce', 2000],
sales['Y Box', 2002] = sales['Y Box', 2001])
ORDER BY
country'
)
);
쿼리 엔진은 이 함수의 결과 순서를 보존하지 않습니다. 전달한 쿼리에 ORDER BY 절이 있으면 함수 결과 순서가 예상과 다를 수 있습니다.
성능 (Performance)
커넥터는 다음 섹션에 설명된 여러 성능 개선을 포함합니다.
시노님 (Synonyms)
성능상 이유로 Trino는 Oracle SYNONYM 지원을 기본적으로 비활성화합니다. SYNONYM을 포함하려면 다음 설정 속성을 추가하세요:
oracle.synonyms.enabled=true
푸시다운 (Pushdown)
커넥터는 다음 연산에 대해 푸시다운을 지원합니다:
- 조인 푸시다운
- LIMIT 푸시다운
또한 다음 함수에 대한 집계 푸시다운을 지원합니다: avg(), count()(그리고 count(distinct x)), max(), min(), sum(). stddev()/stddev_samp(), stddev_pop(), var_pop(), variance()/var_samp() 함수는 DOUBLE 유형 컬럼에서만, covar_samp()/covar_pop()은 REAL 또는 DOUBLE 유형 컬럼에서만 푸시다운이 지원됩니다.
커넥터는 성능이 향상될 수 있는 곳에서 푸시다운을 수행하지만, 정확성을 지키기 위해 일부 연산은 푸시다운되지 않을 수 있습니다.
조인 푸시다운 (Join pushdown)
join-pushdown.enabled 카탈로그 설정 속성 또는 join_pushdown_enabled 카탈로그 세션 속성이 커넥터의 조인 연산 푸시다운 여부를 제어합니다. 기본값은 false이며, 조인 푸시다운을 켜면 일부 쿼리 성능에 부정적 영향을 줄 수 있습니다.
조건 푸시다운 지원 (Predicate pushdown support)
커넥터는 CLOB, NCLOB, BLOB, RAW(n) Oracle 데이터베이스 유형을 사용하는 컬럼이나, 이러한 유형으로 매핑되는 Trino 데이터 유형에 대한 조건 푸시다운을 지원하지 않습니다.
다음 예제에서 name은 VARCHAR 유형 컬럼으로 Oracle에서는 NCLOB로 매핑되므로 두 쿼리 모두 조건이 푸시다운되지 않습니다:
SHOW CREATE TABLE nation;
-- Create Table
----------------------------------------
-- CREATE TABLE oracle.trino_test.nation (
-- name VARCHAR
-- )
-- (1 row)
SELECT * FROM nation WHERE name > 'CANADA';
SELECT * FROM nation WHERE name = 'CANADA';
다음 예제에서 name은 VARCHAR(25) 유형 컬럼으로 Oracle에서는 VARCHAR2(25)로 매핑되므로 두 쿼리 모두 조건이 푸시다운됩니다:
SHOW CREATE TABLE nation;
-- Create Table
----------------------------------------
-- CREATE TABLE oracle.trino_test.nation (
-- name VARCHAR(25)
-- )
-- (1 row)
SELECT * FROM nation WHERE name > 'CANADA';
SELECT * FROM nation WHERE name = 'CANADA';
더 알아보기 (Learn more)
Oracle 커넥터로 다른 데이터 소스와 데이터를 조합해보세요. 커넥터의 일반적인 개념은 커넥터 개요 문서에서 확인할 수 있어요.