IBM Cloud Docs
UnityカタログREST APIおよびIcebergカタログREST API

UnityカタログREST APIおよびIcebergカタログREST API

Metadata Serviceは、Iceberg REST CatalogおよびUnity Catalog Open API仕様から選択したAPIを実装しています。 標準的なRESTクライアントからこれらのAPIを活用することができる。 RESTクライアントを使用すると、エンジンを使わずにメタストアと直接やり取りできるという利点がある。

UnityカタログREST API

含まれるAPIは以下の通り:

カタログ

  • POST /カタログ
  • GET /カタログ
  • GET / {name} /{名前}
  • PATCH {name}
  • DELETE {name}

スキーマ

  • POST /schemas
  • GET /スキーマ
  • GET {full_name}
  • PATCH {full_name}
  • DELETE {full_name}

テーブル

  • POST /テーブル
  • テーブル
  • GET {full_name}
  • DELETE {full_name}

GETカタログ用Unity APIサンプル

curl -k -X GET "https://80e7cce9-c14f-4aa8-8a3b-c52adc25efac.cdc406pd09pasng7elgg.lakehouse.dev.appdomain.cloud:32230/api/2.1/unity-catalog/catalogs" --header "Authorization: Bearer $token" --header 'Content-Type: application/json'

{
  "catalogs": [
    {
      "name": "ad_catalog",
      "comment": "",
      "properties": {
        "catalogType": "delta",
        "storageName": "func-test-bucket"
      },
      "created_at": 1733724384000,
      "updated_at": 0,
      "id": "3186f83a-8879-46c4-b48e-125741c34e88",
      "owner": "anurag",
      "created_by": "anurag",
      "updated_by": null
    },
    {
      "name": "testth",
      "comment": "",
      "properties": {
        "catalogType": "iceberg",
        "storageName": "mdshms"
      },
      "created_at": 1733724482000,
      "updated_at": 0,
      "id": "9ce30ab7-1321-4189-bb10-765093d1932c",
      "owner": "antony",
      "created_by": "antony",
      "updated_by": null
    }
  ],
  "next-page-token": null
}

カタログ用GETスキーマのサンプルUnity API

curl -k -X GET "https://80e7cce9-c14f-4aa8-8a3b-c52adc25efac.cdc406pd09pasng7elgg.lakehouse.dev.appdomain.cloud:32230/api/2.1/unity-catalog/schemas?catalog_name=mrmadira_hive_catalog" --header "Authorization: Bearer $token" --header 'Content-Type: application/json'

{
  "schemas": [
    {
      "name": "dec92024",
      "catalog_name": "mrmadira_hive_catalog",
      "comment": null,
      "properties": {
        "locationUri": "s3a://testbucket/dec92024"
      },
      "full_name": "mrmadira_hive_catalog.dec92024",
      "created_at": 0,
      "updated_at": 0,
      "schema_id": "135"
    }
  ]
}

行動と限界

スキーマを変更しないという制約のため、いくつかの必須フィールドはUnity REST仕様の properties フィールドに含める必要があります。

カタログを作成する場合、 locationUri 、バケツ名( watsonx.data に登録)、 catalogType フィールドは必須であり、 properties フィールドに記入する必要がある:

"properties": {
    "locationUri": "s3a://func-test-bucket/unity_schema",
    "bucket": "func-test-bucket",
    "catalogType": "ICEBERG"
}

スキーマを作成する場合、 locationUriは必須フィールドであり、 properties フィールドに含める必要があります:

"properties": {
    "locationUri": "s3a://func-test-bucket/unity_schema"
}

テーブルを作成する場合、Unityの仕様には利用できない追加フィールドがある。 メタデータ・サービスは、これらのフィールドに提供されたいかなる情報も無視し、データベースに保存しない:

"columns": [
    {
      "type_json": "string",
      "type_name": "string",
      "type_precision": 0,
      "type_scale": 0,
      "type_interval_type": "string",
      "position": 0,
      "nullable": true,
      "partition_index": 0
    }
]

リクエストオブジェクトのプロパティに余分な値が渡された場合、それらは現在のHMSスキーマに準拠しているため、どのテーブルにも保存されません。 必要であれば、将来的に properties フィールドに詳細を追加することができます。

詳細は APIドキュメント を参照。

アイスバーグ カタログ REST API

含まれるAPIは以下の通り:

名前空間

  • 名前空間の一覧
  • 名前空間を作成します。
  • 名前空間のメタデータ・プロパティをロードする
  • 名前空間が存在するかどうかをチェックする
  • 名前空間を削除する

アイスバーグ・テーブル関連

  • 指定された名前空間にテーブルを作成する
  • metadata_locationを使ったテーブル登録
  • テーブルをロードする
  • テーブルが存在するかチェックする
  • テーブル名の変更
  • アトミック・トランザクションで複数のテーブルの更新をコミットする
  • テーブルの更新をコミットする
  • 表のドロップ

ビュー

  • すべてのビュー識別子をリストする
  • ビューをロードする
  • ビューが存在するかどうかをチェックする
  • ビューの名前を変更する
  • ビューの削除

構成

  • カタログをプレフィックスとして設定するための設定エンドポイント

アイスバーグAPIのサンプル

カタログの名前空間を取得する

curl -k --request GET   --url 'https://80e7cce9-c14f-4aa8-8a3b-c52adc25efac.cdc406pd09pasng7elgg.lakehouse.dev.appdomain.cloud:32230/mds/iceberg/v1/hemant_test/namespaces'   --header 'Accept: application/json'   --header "Authorization: Bearer $token"  --header 'Content-Type: application/json'  | jq

{
  "namespaces": [
    [
      "hemant_test"
    ],
    [
      "order_schema_ad"
    ],
    [
      "schema1150850f-ece4-4c27-8794-e05b984adff5"
    ]
  ],
  "next-page-token": null
}

スキーマのテーブルを取得する

curl -k --request GET   --url 'https://80e7cce9-c14f-4aa8-8a3b-c52adc25efac.cdc406pd09pasng7elgg.lakehouse.dev.appdomain.cloud:32230/mds/iceberg/v1/hemant_test/namespaces/schema_cpd'   --header 'Accept: application/json'   --header "Authorization: Bearer $token"  --header 'Content-Type: application/json'  | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    74    0    74    0     0     52      0 --:--:--  0:00:01 --:--:--    52
{
  "namespace": [
    "schema_cpd"
  ],
  "properties": {
    "owner": "hemant"
  }
}

行動と限界

スキーマを変更しないという制約のため、以下の機能はサポートされていない:

  • マルチレベル名前空間の作成
  • Hive は DBS テーブル内のすべてのデータベースまたはネームスペースのカタログであるため、Iceberg 以外のカタログに存在するネームスペースの作成はサポートされません。
  • スキーマを列挙すると、指定した接頭辞を持つ現在のカタログの名前空間のみが返されます。 ただし、別のカタログに存在するネームスペースを作成しようとすると、 Namespace Already Exists 例外が返されます。
  • テーブルを一覧表示する場合、Iceberg テーブルのみが返されます。 同じデータベースまたはネームスペースに Hive または Delta テーブルとして存在する名前のテーブルを作成しようとすると、同じ名前の Iceberg テーブルの作成は許可されません。
  • X-Iceberg-Access-Delegation はサポートされていない。
  • メトリクスのエンドポイントはダミーのみ追加。

詳細は APIドキュメント を参照。

一般的な制限:カタログおよびテーブル作成でサポートされていない属性

現在のスキーマの制限により、カタログおよびテーブルを作成する際に、以下の属性は保存されません

  • カタログ用:
    • コメント
  • テーブル(カラム配列内)の場合:
    • 型精度
    • type_scale
    • type_interval_type
    • position
    • NULL 可能
    • partition_index
  • 表(列配列外)の場合:
    • コメント