전용 Exadata 인프라에서 Autonomous Database로 Apache Iceberg 테이블 쿼리
Autonomous Database는 Apache Iceberg 테이블 쿼리를 지원합니다.
주:
Apache Iceberg 테이블 쿼리 지원은 Oracle Database 19c(버전 19.28부터) 및 Oracle Database 23ai(버전 23.9부터)에서 제공됩니다.지원되는 구성
- Amazon Web Services AWS의 Iceberg 테이블:
- AWS Glue Data Catalog에 등록된 Iceberg 테이블로, Spark 또는 Athena로 생성됩니다.
자세한 내용은 ACID 트랜잭션이 있는 Apache Iceberg 테이블을 읽고 쓰고 시간 이동을 수행하려면 AWS Glue 커넥터를 사용 및 Iceberg 테이블 사용을 참조하십시오.
- 루트 메타데이터 파일에 대한 URL을 직접 제공하여 AWS S3에 저장된 Iceberg 테이블입니다.
- AWS Glue Data Catalog에 등록된 Iceberg 테이블로, Spark 또는 Athena로 생성됩니다.
- Oracle Cloud Infrastructure(OCI) Object Storage의 Iceberg 테이블:
- Hadoop 카탈로그를 사용하여 OCI Data Flow로 생성된 Iceberg 테이블입니다.
자세한 내용은 Oracle 데이터 플로우 예 및 Hadoop 카탈로그 사용을 참조하십시오.
- 루트 메타데이터 파일에 대한 URL을 직접 제공하여 OCI Object Storage에 저장된 Iceberg 테이블.
- Hadoop 카탈로그를 사용하여 OCI Data Flow로 생성된 Iceberg 테이블입니다.
제한사항
- 분할된 빙산 테이블
Oracle은 Iceberg 분할 테이블을 지원하지 않습니다.
- Iceberg 테이블의 행 레벨 업데이트
Oracle은 Iceberg 테이블 업데이트에 대해 읽기 병합을 지원하지 않습니다. Iceberg 메타데이터에서 삭제된 파일이 발생하는 질의는 실패합니다. 읽은 병합에 대한 자세한 내용은 Enum RowLevelOperationMode을 참조하십시오.
- 스키마 진화
Oracle External Table에 대한 스키마는 수정되며 External Table 생성 시 Iceberg 스키마 버전을 반영합니다. Iceberg 메타데이터가 Iceberg 테이블을 만드는 데 사용된 것과 비교하여 다른 스키마 버전을 가리키는 경우 질의가 실패합니다. 외부 테이블이 생성된 후 Iceberg 스키마가 변경되면 외부 테이블을 재생성하는 것이 좋습니다.
Apache Iceberg 테이블 조회 관련 개념
다음 개념에 대한 이해는 Apache Iceberg 테이블을 질의하는 데 유용합니다.
Iceberg 카탈로그
Iceberg 카탈로그는 테이블 메타데이터(예: 테이블 스냅샷, 테이블 스키마 및 분할 정보)를 관리하는 서비스입니다. Iceberg 테이블에 대한 최신 스냅샷을 질의하려면 질의 엔진이 먼저 카탈로그에 액세스하여 최신 메타데이터 파일의 위치를 가져와야 합니다. AWS Glue, Hive, Nessie, Hadoop 등 사용 가능한 여러 카탈로그 구현이 이미 있습니다. Autonomous Database는 AWS Glue 카탈로그 및 Spark에서 사용되는 HadoopCatalog 구현을 지원합니다.
자세한 내용은 최적 동시성을 참조하십시오.
메타 데이터 파일의 특징
메타데이터 파일은 테이블 스냅샷, 분할 체계 및 스키마 정보를 추적하는 JSON 문서입니다. 메타 데이터 파일은 매니페스트 목록 및 매니페스트 파일 계층의 시작점입니다. 이 매니페스트는 분할 및 열 통계를 포함한 정보와 함께 테이블의 데이터 파일을 추적합니다. 자세한 내용은 Iceberg 테이블 사양을 참조하십시오.
트랜잭션
Iceberg는 Copy-on-write 또는 Merge-on-read를 사용하여 테이블에 대한 행 레벨 업데이트를 지원합니다. Copy-on-write는 갱신된 행을 반영하는 새 데이터 파일을 생성하고 Merge-on-read는 읽는 동안 데이터 파일과 병합되어야 하는 새 "삭제 파일"을 생성합니다. Oracle은 Copy on Write(COW, 기록 중 복사)를 지원합니다. 빙산 테이블에 대한 질의는 삭제 파일이 발생하는 경우 실패합니다. 자세한 내용은 RowLevelOperationMode을 참조하십시오.
스키마 전개
Iceberg는 스키마의 발전을 지원합니다. 스키마 변경 사항은 스키마 ID를 사용하여 Iceberg 메타데이터에 반영됩니다. Oracle External Table에는 테이블 생성 시 가장 최신 스키마 버전에 의해 결정되는 고정 스키마가 있습니다. Query된 메타 데이터가 테이블 생성 시 사용된 것과 다른 스키마 버전을 가리키면 Iceberg query가 실패합니다. 자세한 내용은 스키마 전개를 참조하십시오.
분할 영역
Iceberg는 비용이 많이 드는 데이터 레이아웃 변경 없이 테이블의 메타데이터를 처리/변경하는 데 의존하는 숨겨진 파티셔닝 및 파티션 전환과 같은 고급 파티셔닝 옵션을 지원합니다.
예: Apache Iceberg 테이블 조회
이 예에서는 데이터 카탈로그를 사용하고 루트 매니페스트 파일에 직접 URL을 사용하여 AWS(Amazon Web Services) 및 OCI(Oracle Cloud Infrastructure)에서 Apache Iceberg 테이블을 쿼리하는 방법을 보여줍니다.
Apache Iceberg용 외부 테이블 생성에 대한 자세한 내용은 CREATE_EXTERNAL_TABLE Procedure for Apache Iceberg를 참조하십시오.
접착제 데이터 카탈로그를 사용하여 AWS에서 Iceberg 테이블 쿼리
이 예제에서는 Iceberg 테이블 iceberg_parquet_time_dim
.
example_1_table.png에 대한 설명을 질의합니다.
테이블은 Glue 데이터베이스 my-iceberg-db
에 속하며 s3://my-iceberg-bucket/iceberg-loc
폴더에 저장됩니다.
iceberg_parquet_time_dim
에 대한 테이블 세부정보는 다음과 같습니다.

그림 example_1_details_v1.png에 대한 설명
다음과 같이 iceberg_parquet_time_dim
에 대한 외부 테이블을 생성할 수 있습니다.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => '',
format =>
'{"access_protocol":
{
"protocol_type": "iceberg",
"protocol_config":
{
"iceberg_catalog_type": "aws_glue",
"iceberg_glue_region": "us-west-1",
"iceberg_table_path": "my-iceberg-db.iceberg_parquet_time_dim"
}
}
}'
);
END;
/
protocol_config 섹션에서는 테이블이 AWS Glue를 카탈로그 유형으로 사용하고 카탈로그의 영역을 us-west-1
로 설정하도록 지정합니다.
AWS_CRED
인증서는 AWS API 키와 함께 dbms_cloud.create_credential
를 사용하여 생성됩니다. Glue 데이터 카탈로그 인스턴스는 각 계정에 대해 단일 Glue 데이터 카탈로그 영역이 있으므로 영역 us-west-1
에 대해 AWS_CRED
와 연관된 계정 ID에 의해 결정됩니다. protocol_config
섹션의 iceberg_table_path
요소는 $database_name.$table_name
경로를 사용하여 Glue 테이블 이름과 데이터베이스 이름을 지정합니다. 마지막으로 column_list
및 field_list
매개변수는 테이블의 스키마가 Iceberg 메타데이터에서 자동으로 파생되므로 널로 유지됩니다.
자격 증명 만들기에 대한 자세한 내용은 CREATE_CREDENTIAL Procedure를 참조하십시오.
AWS Glue 리소스에 대한 자세한 내용은 AWS Glue 리소스 ARN 지정을 참조하십시오.
루트 메타데이터 파일의 위치를 사용하여 AWS에서 Iceberg 테이블 쿼리
Iceberg 테이블에 대한 메타데이터 파일의 위치를 알고 있는 경우 다음과 같이 카탈로그를 지정하지 않고 외부 테이블을 생성할 수 있습니다.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => 'https://my-iceberg-bucket.s3.us-west-1.amazonaws.com/iceberg-loc/metadata/00004-1758ee2d-a204-4fd9-8d52-d17e5371a5ce.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}');
END;
/
file_uri_list
매개변수를 사용하여 메타데이터 파일의 위치를 AWS S3 가상 호스트 스타일 URL 형식으로 지정합니다. 이 형식에 대한 자세한 내용은 AWS S3 버킷에 액세스하기 위한 방법을 참조하십시오.
이 예제에서 데이터베이스는 메타 데이터 파일에 직접 액세스하므로 format
파라미터에 protocol_config
섹션을 제공할 필요가 없습니다. 메타 데이터 파일 위치를 사용하여 External Table을 생성하는 경우 데이터베이스는 메타 데이터 파일에서 참조하는 가장 최근 스냅샷을 query합니다. 새 스냅샷 및 새 메타데이터 파일을 만드는 Iceberg 테이블에 대한 후속 업데이트는 데이터베이스에 표시되지 않습니다.
OCI에서 Hadoop 카탈로그를 사용하는 Iceberg 테이블 쿼리
이 예제에서는 OCI Data Flow를 사용하여 생성된 Iceberg 테이블 icebergTablePy
를 질의합니다. 여기서 Spark는 Iceberg 카탈로그에 대해 HadoopCatalog 구현을 사용합니다. HadoopCatalog는 warehouse
디렉토리를 사용하고 Iceberg 메타데이터를 이 디렉토리 아래의 $database_name/$table_name
하위 폴더에 배치합니다. 또한 최신 메타데이터 파일 버전의 버전 번호를 포함하는 version-hint.text
파일을 사용합니다. Github의 예는 Iceberg Support on OCI Data Flow를 참조하십시오.
샘플 테이블 db.icebergTablePy
는 OCI 버킷 my-iceberg-bucket
에서 iceberg
라는 warehouse
폴더를 사용하여 생성되었습니다. 테이블 icebergTablePy
에 대한 OCI의 스토리지 레이아웃은 다음과 같습니다.

그림 example_3_table_v1.png에 대한 설명
다음과 같이 db.icebergTablePy
테이블에 대한 외부 테이블을 생성합니다.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim3',
credential_name => 'OCI_CRED',
file_uri_list => '',
format =>'{"access_protocol":{"protocol_type":"iceberg",
"protocol_config":{"iceberg_catalog_type": "hadoop",
"iceberg_warehouse":"https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg",
"iceberg_table_path": "db.icebergTablePy"}}}');
END;
/
루트 메타데이터 파일의 위치를 사용하여 OCI에서 Iceberg 테이블 질의
다음과 같이 메타데이터 파일의 URL을 직접 사용하여 이전 섹션에서 설명한 Iceberg 테이블을 쿼리할 수 있습니다.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim4',
credential_name => 'OCI_CRED',
file_uri_list => 'https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg/db/icebergTablePy/metadata/v2.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}'
);
END;
/
이 예에서는 file_uri_list
매개변수를 사용하여 고유 OCI URI 형식을 사용하여 메타데이터 파일에 대한 URI를 지정합니다. 메타데이터 파일 URI를 사용할 때 외부 테이블은 항상 특정 파일에 저장된 최신 스냅샷을 질의합니다. 새 스냅샷 및 새 메타데이터 파일을 생성하는 후속 업데이트는 질의에 액세스할 수 없습니다.
고유 OCI URI 형식에 대한 자세한 내용은 클라우드 오브젝트 스토리지 URI 형식을 참조하십시오.