全部產品
Search
文件中心

Object Storage Service:通過Flink訪問OSS Tables

更新時間:May 27, 2026

OSS Tables 相容 Apache Iceberg REST Catalog 協議。您可以通過 Flink 的 Iceberg Connector 對接 OSS Tables,使用 Flink SQL 進行建表、寫入和查詢操作,實現流式或批量資料入湖。本文以 Apache Flink 1.20 為例介紹接入流程。

步驟二:建立Table Bucket

在開始寫入資料之前,需要建立 Table Bucket 和 Namespace。可以使用 ossutil 或 AWS CLI 建立。

方式一:使用ossutil

1. 安裝或升級 ossutil

安裝ossutil 2.3.0以上版本,如已安裝 ossutil,可執行以下命令升級到最新版本:

ossutil update -f

2. 配置憑證

執行 ossutil config 命令,按提示輸入 AccessKey ID、AccessKey Secret 和 Region。

3. 建立 Table Bucket

ossutil tables-api create-table-bucket --name {table bucket名稱} --endpoint http://{endpint} --region {region}

命令執行成功後,返回結果中包含 Table Bucket ARN,請記錄該值。

4. 建立 Namespace

ossutil tables-api create-namespace --table-bucket-arn {Table Bucket ARN} --namespace {Namespace名稱} --endpoint http://{endpint}
重要

Namespace 和 Table 名稱不能包含連字號(-),可使用底線(_),這是因為名稱會用於 SQL 陳述式中的標識符。

5. 建立 Table

您可以選擇以下任一方式建立 Iceberg 表:

  • 通過其他計算引擎建立(如 Spark)。

  • 通過 ossutil 建立:先將表 schema 儲存為 JSON 檔案,再調用 create-table

    以下樣本的 schema 檔案 schema.json 定義了 3 個欄位:

    {
      "iceberg": {
        "schema": {
          "fields": [
            {"name": "event_id", "type": "string", "required": true},
            {"name": "event_time", "type": "string"},
            {"name": "event_type", "type": "string"}
          ]
        }
      }
    }

    基於 schema 檔案建立 Table:

    ossutil tables-api create-table --table-bucket-arn {bucketArn} --namespace {namespace名稱} --name  {表名稱} --format ICEBERG --metadata file://{檔案路徑} --endpoint --endpoint http://{endpint}

方式二:使用AWS CLI

OSS Tables 相容 S3 Tables API,也可以使用 AWS CLI 管理 Table Bucket。

1. 安裝 AWS CLI

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

2. 配置憑證

執行 aws configure 命令,按提示輸入 AccessKey ID、AccessKey Secret 和 Region。

3. 建立 Table Bucket

aws s3tables --endpoint http://{endpint} create-table-bucket --region {region} --name {table bucket名稱}

命令執行成功後,返回結果中包含 Table Bucket ARN。

4. 建立 Namespace

aws s3tables --endpoint http://{endpoint} create-namespace --table-bucket-arn {Table Bucket ARN} --namespace {namespace名稱}

5. 建立 Table

  • 通過其他計算引擎(如 Spark)建立表

  • 使用 AWS CLI 建立。使用 AWS CLI 時,先將完整的入參儲存為 JSON 檔案 create-table.json,再調用 create-table

    {
        "tableBucketARN": "{BucketArn}",
        "namespace": "{namespace名稱}",
        "name": "{表明}",
        "format": "ICEBERG",
        "metadata": {
            "iceberg": {
                "schema": {
                    "fields": [
                         {"name": "event_id", "type": "string","required": true},
                         {"name": "event_time", "type": "string"},
                         {"name": "event_type", "type": "string"}
                    ]
                }
            }
        }
    }
    aws s3tables --endpoint http://{endpoint} create-table --cli-input-json file://{檔案路徑}

6. 管理後台維護任務

OSS Tables 支援自動執行 Iceberg 表的後台維護(如檔案清理、檔案合并等),通過 AWS CLI 可以查詢和配置維護任務。

查詢 Table 維護任務狀態:

aws s3tables get-table-maintenance-job-status \
   --table-bucket-arn="{bucketArn}" \
   --namespace="{namespace名稱}" \
   --name="{表名}" 

配置 Bucket 級維護策略(檔案清理):

aws s3tables put-table-bucket-maintenance-configuration \
   --table-bucket-arn {tableArn} \
   --type icebergUnreferencedFileRemoval \
   --value '{"status":"enabled","settings":{"icebergUnreferencedFileRemoval":{"unreferencedDays":4,"nonCurrentDays":10}}}' 

配置 Table 級維護策略(小檔案合并):

aws s3tables put-table-maintenance-configuration \
   --table-bucket-arn {bucketArn} \
   --type icebergCompaction \
   --namespace {namespace名稱} \
   --name {表名} \
   --value='{"status":"enabled","settings":{"icebergCompaction":{"targetFileSizeMB":256}}}'