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
- 表(列配列外)の場合:
- コメント