在專用 Exadata 基礎架構上使用自治式 AI 資料庫查詢 Apache Iceberg 表格

自治式 AI 資料庫支援查詢 Apache Iceberg 表格。

備註:從版本 19.28 開始,Oracle Database 19c 以及從版本 23.9 開始的 Oracle Database 23ai 中,支援查詢 Apache Iceberg 表格。

支援的組態

支援下列特定組態:

限制

查詢 Apache Iceberg 表格的相關概念

對下列概念的理解有助於查詢 Apache Iceberg 表格。

Iceberg 目錄

Iceberg 目錄是管理表格中繼資料的服務,如表格快照,表格機制和分割資訊 。為了查詢 Iceberg 表格的最新快照,查詢引擎必須先存取目錄 ,並取得最新的中繼資料檔案的位置 。已經有許多可用的目錄導入,包括 AWS Glue、Hive、Nessie 和 Hadoop。自治式 AI 資料庫支援 Spark 使用的 AWS Glue 目錄和 HadoopCatalog 實作。

如需詳細資訊,請參閱 Optimistic Concurrency

中繼資料的檔案

中繼資料檔案是 JSON 文件,可追蹤表格快照、分割配置和結構描述資訊。中繼資料檔案是資訊清單清單與資訊清單檔案階層的進入點。清單會追蹤表格的資料檔,以及包括分割與資料欄統計資料的資訊。如需詳細資訊,請參閱 Iceberg 表格規格

交易

Iceberg 支援使用寫入時複製或讀取時合併之表格的列層級更新。寫入時複製會產生反映更新之資料列的新資料檔,而讀取時合併會產生新的「刪除檔案」,此檔案必須在讀取期間與資料檔合併。Oracle 支援寫入時複製。如果 iceberg 表格遇到刪除檔案,則查詢會失敗。如需詳細資訊,請參閱 RowLevelOperationMode

綱要發展

Iceberg 支援架構演進 。綱要變更會使用綱要 ID 反映在 Iceberg 描述資料中。請注意,Oracle 外部表格有一個固定的綱要,由表格建立時的最新綱要版本決定。當查詢的中繼資料與表格建立時所使用的綱要版本相較之下,Iceberg 查詢失敗。如需詳細資訊,請參閱 Schema Evolution

分割

Iceberg 支援進階分割選項,例如隱藏的分割和分割區演進,這些選項仰賴處理 / 更改表格的中繼資料,而無須進行昂貴的資料配置變更。

範例:查詢 Apache Iceberg 表格

這些範例顯示如何使用資料目錄,並使用根資訊清單檔案的直接 URL 查詢 Amazon Web Services (AWS) 和 Oracle Cloud Infrastructure (OCI) 上的 Apache Iceberg 表格。

如需為 Apache Iceberg 建立外部表格的詳細資訊,請參閱 CREATE_EXTERNAL_TABLE Procedure for Apache Iceberg

使用 Glue 資料目錄查詢 AWS 上的 Iceberg 表格

在此範例中,我們查詢 Iceberg 表格 iceberg_parquet_time_dim

表格屬於 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 是使用 dbms_cloud.create_credential 與 AWS API 金鑰建立。由於每個帳戶都有單一 Glue 資料目錄區域,因此 Glue 資料目錄實例是由與 AWS_CRED 區域 us-west-1 相關聯的帳戶 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 區段。使用描述資料檔案位置建立外部表格時,資料庫會查詢描述資料檔案所參照的最新快照。隨後更新的 Iceberg 表格,這些表格會建立新的快照和中繼資料檔案,並不會顯示給資料庫 。

查詢在 OCI 上使用 Hadoop 目錄的 Iceberg 表格

在此範例中,我們查詢使用 OCI Data Flow 建立的 Iceberg 表格 icebergTablePy,其中 Spark 在 Iceberg 目錄中使用 HadoopCatalog 實作。HadoopCatalog 使用 warehouse 目錄,並將 Iceberg 中繼資料置於此目錄下的 $database_name/$table_name 子資料夾中。它也使用 version-hint.text 檔案,其中包含最新描述資料檔案版本的版本號碼。請參閱 OCI 資料流程的 Iceberg 支援,瞭解 Github 上的範例。

範例表格 db.icebergTablePy 是使用 warehouse 資料夾 (名稱為 iceberg) 在 OCI 儲存桶 my-iceberg-bucket 中建立的。OCI 上表格 icebergTablePy 的儲存體配置如下所示:

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 格式

相關內容

Apache Iceberg 的 CREATE_EXTERNAL_TABLE 程序