
データレイクにデータを溜めるだけでは、どこに何があるか分からない「データ沼(Data Swamp)」化してしまいます。それを防ぎ、データを安全かつ迅速に利活用するためにデータカタログが必要不可欠です。
■ はじめに
Object Storageをデータレイクとして使用していると、日次や時間単位でCSV、Parquetなどのファイルが増えていきます。
ファイル数が少ないうちはオブジェクト名を見れば内容を想像できますが、ファイルが増えてくると、次のようなことが分かりにくくなります。
- どのバケットやフォルダ相当のプレフィックスに目的のデータがあるか
- ファイルにどのような列が含まれているか
- 各列が文字列、数値、日付、BOOLEANなど、どのようなデータ型なのか
- 日付ごとに分割されたファイルが、どのデータセットに属するのか
- 新しいファイルが追加されたとき、メタデータが更新されているか
OCI Data Catalogでは、Object Storageをデータ・アセットとして登録してハーベストすることで、ファイル名、パス、フィールド名、データ型などの技術メタデータを抽出し、検索可能なカタログとして管理できます。
CSVとApache Parquetは、OCI Data CatalogがObject Storageからフィールドを抽出できる対応形式です。また、ファイル名パターンを使用すると、日付ごとに分割された複数ファイルを1つの論理データ・エンティティとしてまとめられます。
今回の記事を第1回として、OCI Object Storageに保存した構造化データとドキュメントをOCI Data Catalogで管理し、最終的にAutonomous AI DatabaseのSelect AI with RAGへつなげるところまで検証してみてみます。
| 回 | 内容 |
|---|---|
| 第1回 | Object Storage内のCSVとParquetをカタログ化し、データ型、論理データ・エンティティ、増分ハーベストを確認 |
| 第2回 | Oracle DatabaseマニュアルPDFとdocument_inventory.parquetを使用し、PDFの基本メタデータとCustom Propertiesで文書名、製品バージョン、公式URL、Object Storage上の保存場所などを管理 |
| 第3回 | Data Catalogで所在と管理情報を確認できるObject Storage上のPDFをAutonomous AI Databaseから読み込み、Vector Index化してSelect AI with RAGでマニュアルへ質問 |
3回の関係は次のとおりです。
第1回: CSV/Parquetの技術メタデータをカタログ化
|
| 同じObject Storageアクセスとハーベストの基盤を利用
v
第2回: PDF原本+文書インベントリParquetをカタログ化
|
| 同じObject Storage上のPDFを利用
v
第3回: Autonomous AI DatabaseでVector Index化
|
v
Select AI with RAG
第1回では、Object Storage、Data Catalog、Resource Principalによるアクセス、データ・アセットの作成、ハーベストという基本的な流れを確認します。第2回では、同じ考え方をOracle DatabaseマニュアルPDFと文書インベントリParquetへ拡張し、第3回では同じObject Storage上のPDFをAutonomous AI Databaseから読み込んでVector Index化します。
ということで、同じ注文データをCSVとParquetで作成してObject Storageへ配置し、OCI Data Catalogで自動カタログ化してみてみます。
なお、本記事でいう「自動カタログ化」は、初回設定後のメタデータ更新を、増分ハーベストとスケジュールで定期実行する構成を指します。
今回は、次の内容を確認します。
| 確認項目 | 内容 |
|---|---|
| CSVとParquet | 同じレコードを2つの形式で用意 |
| 技術メタデータ | 列名とデータ型を技術メタデータとして抽出 |
| 日本語データ | 顧客名、都道府県、商品名、備考に日本語を格納したCSV/Parquetを使用 |
| NULL |
coupon_usedとnotesにNULLを格納 |
| 論理データ・エンティティ | 日付ごとの複数ファイルを形式単位で集約 |
| 増分ハーベスト | 新しい日付ファイルだけを追加して再ハーベスト |
| スケジュール | ハーベスト・ジョブを定期実行 |
■ Agenda
-
今回作成する構成
-
使用するリソース名
-
テストデータの確認
-
初回データをObject Storageへアップロード
-
OCI Data Catalogの作成
-
Resource Principal用IAMポリシーの作成
-
ファイル名パターンの作成
-
Object Storageデータ・アセットの作成
-
Resource Principal接続の追加
-
ファイル名パターンをデータ・アセットへ割り当て
-
初回ハーベストの実行
-
論理データ・エンティティの確認
-
CSVとParquetの属性を比較
-
ハーベスト・ジョブをスケジュール
-
増分データを追加
-
CSVとParquetをカタログ化して分かったこと
-
Data Catalogが自動でしてくれること、人が設計すること
-
注意点
-
まとめ
-
次回以降
-
解説動画
-
参考情報
■ 今回作成する構成
今回の構成は次のとおりです。
ローカルPC / OCI Cloud Shell
|
| oci os object bulk-upload
v
OCI Object Storage
└── demo/
├── sales_orders_csv/
│ ├── dt=2026-07-20/*.csv
│ └── dt=2026-07-21/*.csv
└── sales_orders_parquet/
├── dt=2026-07-20/*.parquet
└── dt=2026-07-21/*.parquet
|
| Harvest(Resource Principal)
v
OCI Data Catalog
├── Object Storage Data Asset
├── Filename Pattern
├── Harvest Job
├── sales_orders_csv Logical Data Entity
└── sales_orders_parquet Logical Data Entity
└── Attributes / Data Types
初回は2026年7月20日と21日のファイルをアップロードします。その後、2026年7月22日のファイルを追加し、増分ハーベストを確認します。
● 今回確認する結果
今回の検証では、Object Storageへ日付ごとに分割したCSVとParquetファイルを配置し、ファイル名パターンを使用してData Catalogへハーベストします。
先に結果をまとめると、初回ハーベスト後にファイルを追加しても、ファイル名パターンに一致するファイルは、同じ論理データ・エンティティへまとめて管理されました。
| 確認タイミング | Object Storage内のファイル数 | 論理データ・エンティティ数 | 確認する内容 |
|---|---|---|---|
| 初回ハーベスト後 | 4ファイル | 2エンティティ | CSVとParquetが、それぞれ1つの論理データ・エンティティとして作成される |
| 増分ハーベスト後 | 6ファイル | 2エンティティ | 新しいファイルが追加されても、既存の論理データ・エンティティへまとめられる |
つまり、Object Storage上では日付ごとにファイルが増えていきますが、Data Catalog上ではCSVとParquetをそれぞれデータセット単位で探せる状態を維持します。
このあと、実際にファイルを配置して初回ハーベストを実行し、CSVとParquetの属性型の違いを確認します。さらに新しい日付のファイルを追加し、増分ハーベストによって既存の論理データ・エンティティへ反映されるか確認してみてみます。
■ 使用するリソース名
本記事では、次の名前を例として使用します。実際の環境に合わせて置き換えます。
| リソース | 設定例 |
|---|---|
| Object Storageバケット | data-catalog-csv-parquet-demo |
| Data Catalog | data-catalog-demo |
| 動的グループ | data-catalog-demo-dg |
| IAMポリシー | data-catalog-object-storage-read-policy |
| データ・アセット | object-storage-csv-parquet-demo |
| 接続 | object-storage-resource-principal |
| ファイル名パターン | sales-orders-format-pattern |
| ハーベスト・ジョブ | sales-orders-harvest-job |
| スケジュール | sales-orders-daily-harvest |
■ テストデータの確認
● テストデータの構成
今回使用するテストデータは、次の3段階に分けています。
oci_data_catalog_blog_part1_csv_parquet/
├── 01_initial_upload/
│ └── demo/
│ ├── sales_orders_csv/
│ │ ├── dt=2026-07-20/
│ │ └── dt=2026-07-21/
│ └── sales_orders_parquet/
│ ├── dt=2026-07-20/
│ └── dt=2026-07-21/
├── 02_incremental_upload/
│ └── demo/
│ ├── sales_orders_csv/dt=2026-07-22/
│ └── sales_orders_parquet/dt=2026-07-22/
└── 03_optional_schema_evolution/
└── demo/
├── sales_orders_csv/dt=2026-07-23/
└── sales_orders_parquet/dt=2026-07-23/
第1回では、01_initial_uploadと02_incremental_uploadを使用します。
03_optional_schema_evolutionには列を追加したスキーマ・バージョン2を収録していますが、こちらは本シリーズとは別の追加検証用とします。
・ テストデータ:
oci_data_catalog_blog_part1_csv_parquet.zip
・ チェックサム:
SHA256SUMS.txt
ZIPを展開し、Pythonパッケージは仮想環境へインストールします。
unzip oci_data_catalog_blog_part1_csv_parquet.zip
cd oci_data_catalog_blog_part1_csv_parquet
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
以降のコマンドは、仮想環境を有効にしたプロジェクト・ルートで実行します。
● CSVデータの確認
2026年7月20日のCSVは、次のような内容です。
order_id,order_timestamp,order_date,customer_id,customer_name,prefecture,product_id,product_name,quantity,unit_price,amount,payment_method,coupon_used,notes,source_system,schema_version
SO-20260720-001,2026-07-20T00:12:00Z,2026-07-20,C001,佐藤 花子,東京都,P100,OCI Data Catalog 入門,1,12800,12800,VISA,true,初回購入,demo-commerce,1
SO-20260720-002,2026-07-20T01:05:00Z,2026-07-20,C002,鈴木 一郎,神奈川県,P300,Parquet データ分析,2,15800,31600,BANK_TRANSFER,false,,demo-commerce,1
SO-20260720-003,2026-07-20T02:20:00Z,2026-07-20,C003,高橋 美咲,大阪府,P200,Object Storage 実践,1,9800,9800,PAYPAY,,領収書希望,demo-commerce,1
初回データの内容は次のとおりです。
| 項目 | 値 |
|---|---|
| CSVファイル数 | 2 |
| Parquetファイル数 | 2 |
| 1ファイルの行数 | 6 |
| CSVの合計行数 | 12 |
| Parquetの合計行数 | 12 |
| 列数 | 16 |
| 注文金額の合計 | 243,000 |
coupon_usedがNULLの行 |
2 |
notesがNULLの行 |
3 |
CSVとParquetには、同じレコードを格納しています。
● Parquetスキーマの確認
Parquetは列指向のファイル形式で、ファイル内に列名、物理型、論理型、NULL可否などのスキーマ情報を保持します。
同梱スクリプトでParquetのスキーマを確認します。
python scripts/inspect_parquet.py \
01_initial_upload/demo/sales_orders_parquet/dt=2026-07-20/sales_orders_20260720_part001.parquet
主な出力は次のとおりです。
% python scripts/inspect_parquet.py 01_initial_upload/demo/sales_orders_parquet/dt=2026-07-20/sales_orders_20260720_part001.parquet
File : 01_initial_upload/demo/sales_orders_parquet/dt=2026-07-20/sales_orders_20260720_part001.parquet
Size : 2473 bytes
Rows : 6
Created by : oci-data-catalog-blog-testdata 1.0
Schema:
- order_id: BYTE_ARRAY / UTF8 (REQUIRED)
- order_timestamp: INT64 / TIMESTAMP_MILLIS (REQUIRED)
- order_date: INT32 / DATE (REQUIRED)
- customer_id: BYTE_ARRAY / UTF8 (REQUIRED)
- customer_name: BYTE_ARRAY / UTF8 (REQUIRED)
- prefecture: BYTE_ARRAY / UTF8 (REQUIRED)
- product_id: BYTE_ARRAY / UTF8 (REQUIRED)
- product_name: BYTE_ARRAY / UTF8 (REQUIRED)
- quantity: INT32 (REQUIRED)
- unit_price: DOUBLE (REQUIRED)
- amount: DOUBLE (REQUIRED)
- payment_method: BYTE_ARRAY / UTF8 (REQUIRED)
- coupon_used: BOOLEAN (OPTIONAL)
- notes: BYTE_ARRAY / UTF8 (OPTIONAL)
- source_system: BYTE_ARRAY / UTF8 (REQUIRED)
- schema_version: INT32 (REQUIRED)
Preview:
[
{
"order_id": "SO-20260720-001",
"order_timestamp": "2026-07-20T00:12:00+00:00",
"order_date": "2026-07-20",
"customer_id": "C001",
"customer_name": "佐藤 花子",
"prefecture": "東京都",
"product_id": "P100",
"product_name": "OCI Data Catalog 入門",
"quantity": 1,
"unit_price": 12800.0,
"amount": 12800.0,
"payment_method": "VISA",
"coupon_used": true,
"notes": "初回購入",
"source_system": "demo-commerce",
"schema_version": 1
},
{
"order_id": "SO-20260720-002",
"order_timestamp": "2026-07-20T01:05:00+00:00",
"order_date": "2026-07-20",
"customer_id": "C002",
"customer_name": "鈴木 一郎",
"prefecture": "神奈川県",
"product_id": "P300",
"product_name": "Parquet データ分析",
"quantity": 2,
"unit_price": 15800.0,
"amount": 31600.0,
"payment_method": "BANK_TRANSFER",
"coupon_used": false,
"notes": null,
"source_system": "demo-commerce",
"schema_version": 1
},
{
"order_id": "SO-20260720-003",
"order_timestamp": "2026-07-20T02:20:00+00:00",
"order_date": "2026-07-20",
"customer_id": "C003",
"customer_name": "高橋 美咲",
"prefecture": "大阪府",
"product_id": "P200",
"product_name": "Object Storage 実践",
"quantity": 1,
"unit_price": 9800.0,
"amount": 9800.0,
"payment_method": "PAYPAY",
"coupon_used": null,
"notes": "領収書希望",
"source_system": "demo-commerce",
"schema_version": 1
}
]
今回の比較で特に確認したい列は次のとおりです。
| 列 | CSV上の表現 | Parquet内部の型 |
|---|---|---|
order_timestamp |
2026-07-20T00:12:00Z |
INT64 / TIMESTAMP_MILLIS |
order_date |
2026-07-20 |
INT32 / DATE |
quantity |
1 |
INT32 |
unit_price |
12800 |
DOUBLE |
coupon_used |
true、false、空欄 |
BOOLEAN (OPTIONAL) |
notes |
日本語、空欄 | UTF8 (OPTIONAL) |
CSVでは値がテキストとして保存されます。一方、ParquetではDATE、TIMESTAMP、BOOLEANなどの型とNULL可否をファイル内部に保持できます。
■ 初回データをObject Storageへアップロード
● Object Storageバケットの作成
OCIコンソールで、今回使用するObject Storageバケットを作成します。
1) Object Storageバケット画面
ナビゲーション・メニューから[ストレージ] > [バケット]をクリックします。

次の設定例でバケットを作成します。
| 項目 | 設定例 |
|---|---|
| コンパートメント | <compartment-name> |
| バケット名 | data-catalog-csv-parquet-demo |
| デフォルト・ストレージ層 | 標準 |
● 初回データのアップロード
1) 初回データ・アップロード
01_initial_upload配下を一括アップロードします。
oci os object bulk-upload \
--bucket-name data-catalog-csv-parquet-demo \
--src-dir ./01_initial_upload \
--verify-checksum
% oci os object bulk-upload \
--bucket-name data-catalog-csv-parquet-demo \
--src-dir ./01_initial_upload \
--verify-checksum
・・・
Uploaded demo/sales_orders_csv/dt=2026-07-20/sales_orders_20260720_part001.csv [####################################] 100%
・・・
Uploaded demo/sales_orders_csv/dt=2026-07-21/sales_orders_20260721_part001.csv [####################################] 100%
Uploaded demo/sales_orders_parquet/dt=2026-07-20/sales_orders_20260720_part001.parquet [####################################] 100%
Uploaded demo/sales_orders_parquet/dt=2026-07-21/sales_orders_20260721_part001.parquet [####################################] 100%
skipped-objects : なし
upload-failures : なし
checksum : 4ファイルとも一致
bulk-uploadでは、--src-dir配下のサブディレクトリが、そのままObject Storageのオブジェクト名に反映されます。
アップロード後は、次の4ファイルが配置されます。
demo/sales_orders_csv/dt=2026-07-20/sales_orders_20260720_part001.csv
demo/sales_orders_csv/dt=2026-07-21/sales_orders_20260721_part001.csv
demo/sales_orders_parquet/dt=2026-07-20/sales_orders_20260720_part001.parquet
demo/sales_orders_parquet/dt=2026-07-21/sales_orders_20260721_part001.parquet
2) 初回データ・アップロード確認
OCIコンソールでは今回のようなプレフィックス階層をツリー形式で一覧しにくいため、ここではOCI CLIのoci os object listでもdemo/配下をまとめて確認します。
・ OCIコンソールのバケット画面で確認
・ OCI CLIで確認
oci os object listでdemo/配下をまとめて確認します。
% oci os object list \
--bucket-name data-catalog-csv-parquet-demo \
--prefix "demo/" \
--all \
--query 'data[].name' \
--raw-output
[
"demo/sales_orders_csv/dt=2026-07-20/sales_orders_20260720_part001.csv",
"demo/sales_orders_csv/dt=2026-07-21/sales_orders_20260721_part001.csv",
"demo/sales_orders_parquet/dt=2026-07-20/sales_orders_20260720_part001.parquet",
"demo/sales_orders_parquet/dt=2026-07-21/sales_orders_20260721_part001.parquet"
]
この時点では、初回ハーベスト対象の2026年7月20日と21日の4ファイルだけが配置されています。
■ OCI Data Catalogの作成
すでにData Catalogを作成済みの場合は、この手順を省略できます。
1) OCIコンソールからData Catalogを開く
ナビゲーション・メニューから[分析とAI] > [データ・レイク] > [データ・カタログ]をクリックします。

2) Data Catalog一覧画面
「データ・カタログの作成」をクリックします。
3) Data Catalog作成画面
次の項目を設定し、[Create]をクリックします。
| 項目 | 設定例 |
|---|---|
| コンパートメントに作成 | <compartment-name> |
| 名前 | data-catalog-demo |
4) Data Catalog作成完了
作成したData Catalogを開き、OCIDを控えておきます。次の動的グループで使用します。

■ Resource Principal用IAMポリシーの作成
Data CatalogからObject Storageへアクセスできるように、動的グループとIAMポリシーを作成します。
● 動的グループの作成
1) 動的グループ画面
OCIコンソールから[アイデンティティとセキュリティ] > [ドメイン]を開き、対象ドメインの[動的グループ]タブで[動的グループの作成]をクリックします。

2) 動的グループ作成画面
動的グループ名をdata-catalog-demo-dgとし、次の一致ルールを設定します。
Any {resource.id = '<Data CatalogのOCID>'}
● Object Storage読取りポリシーの作成
1) ポリシー編集画面
今回のバケットだけを読み取れるように、対象を限定したポリシーを作成します。
Allow dynamic-group data-catalog-demo-dg to read object-family
in compartment <compartment-name>
where any {target.bucket.name='data-catalog-csv-parquet-demo'}
公式チュートリアルのようにテナンシ全体へ権限を付与することもできますが、今回は検証用バケットへ範囲を限定します。
ナビゲーション・メニューから[アイデンティティとセキュリティ] > [ポリシー]を開き、対象ポリシーの[ステートメント]タブで[Edit Policy Statements]をクリックして登録します。
■ ファイル名パターンの作成
Object Storageには、2日分で合計4ファイルあります。このまま個別ファイルとしてハーベストすると、ファイル数に応じてデータ・エンティティが増えていきます。
今回は、CSVファイル群とParquetファイル群を、それぞれ1つの論理データ・エンティティへまとめます。
1) Data Catalog Home画面
Data CatalogのHome画面にある+をクリックし、リストから[ファイル名パターンの管理]をクリックします。

2) ファイル名パターン画面
「ファイル名パターンの作成」をクリックします。
3) ファイル名パターンの作成画面
次のように設定し、[作成]をクリックします。
| 項目 | 設定値 |
|---|---|
| 名前 | sales-orders-format-pattern |
| 説明 | CSVとParquetを形式単位で論理データ・エンティティ化 |
| パターン・タイプ | 正規表現 |
式は次のとおりです。
{bucketName:data-catalog-csv-parquet-demo}/demo/{logicalEntity:sales_orders_csv|sales_orders_parquet}/.*$
バケット名が異なる場合は、data-catalog-csv-parquet-demoを実際のバケット名へ置き換えます。

● テスト式で確認
1) ファイル名パターン画面
作成したファイル名パターンをクリックし、[Test]をクリックします。

2) Test Expression画面
次のオブジェクト名を「テスト・ファイル名」へ貼り付けます。
data-catalog-csv-parquet-demo/demo/sales_orders_csv/dt=2026-07-20/sales_orders_20260720_part001.csv
data-catalog-csv-parquet-demo/demo/sales_orders_csv/dt=2026-07-21/sales_orders_20260721_part001.csv
data-catalog-csv-parquet-demo/demo/sales_orders_parquet/dt=2026-07-20/sales_orders_20260720_part001.parquet
data-catalog-csv-parquet-demo/demo/sales_orders_parquet/dt=2026-07-21/sales_orders_20260721_part001.parquet
[Test Expression]をクリックし、CSVとParquetが別々の論理データ・エンティティとして導出されることを確認します。

テスト結果では、
sales_orders_csvとsales_orders_parquetに対応する2つのグループが導出されました。画面上の論理データ・エンティティ名には、バケット名が付加される場合があります。
■ Object Storageデータ・アセットの作成
1) Data Catalog Home画面
[データ・アセットの作成]をクリックします。

2) データ・アセット作成画面
次のように設定し、[作成]をクリックします。
| 項目 | 設定例 |
|---|---|
| 名前 | object-storage-csv-parquet-demo |
| タイプ | Oracle Object Storage |
| URL | https://swiftobjectstorage.<region-identifier>.oraclecloud.com |
| ネームスペース |
<Object Storage Namespace>※Object Storageの画面で確認できます |
東京リージョンの場合のURL例は次のとおりです。
https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com
Object Storageネームスペースは、OCIコンソールのテナンシ詳細にある「オブジェクト・ストレージ設定」で確認できます。
■ Resource Principal接続の追加
作成したデータ・アセットを開き、「接続情報」から[接続の追加]をクリックします。
1) データ・アセット: 接続の追加画面
次の項目を設定し、[接続のテスト]をクリックして、接続に成功することを確認します。
| 項目 | 設定例 |
|---|---|
| 名前 | object-storage-resource-principal |
| タイプ | Resource Principal |
| OCIリージョン | Object Storageと同じリージョン |
| コンパートメント | バケットを作成したコンパートメント |
| デフォルト接続 | 有効 |
Resource Principalは、Object Storageデータ・アセットに対する推奨接続方式です。
2) 接続の追加: 接続のテスト成功画面
接続のテストが成功したら、[追加]をクリックします。

3) 接続の追加完了
データ・アセット画面の接続の項目に、追加した内容が表示されます。

■ ファイル名パターンをデータ・アセットへ割り当て
データ・アセットの「サマリー」タブにある「ファイル名パターン」から、作成したパターンを割り当てます。
1) データ・アセット サマリー画面
[ファイル名パターンの割当て]をクリックします。

2) ファイル名パターンの割当て画面
sales-orders-format-patternを選択し、[割り当て]をクリックします。
3) ファイル名パターンの割当て完了
データ・アセット サマリー画面に割り当てたファイル名パターンが追加されます。

ファイル名パターンは、初回ハーベストより前に割り当てておきます。ハーベスト後に新しいパターンを割り当てたり、式を変更したりすると、既存の論理データ・エンティティが非アクティブになる場合があります。その場合は、変更を反映するために完全ハーベスト(フル・ハーベスト)を実行します。
■ 初回ハーベストの実行
作成したデータ・アセットを開き、サマリー画面からハーベストを開始します。
1) データ・アセットの詳細画面
データ・アセットの詳細画面で[Harvest]をクリックします。

2) Harvest: 接続の選択画面
デフォルト接続として作成したobject-storage-resource-principalを選択します。
3) Harvest: ハーベスト対象の選択画面
「使用可能なバケット」から、data-catalog-csv-parquet-demoをハーベスト対象へ追加します。
4) Harvest: ジョブの作成画面
次のように設定し、[ジョブの作成]をクリックします。
| 項目 | 設定値 |
|---|---|
| ジョブ名 | sales-orders-harvest-job |
| 増分ハーベスト | 有効 |
| 認識されないファイルを含める | 無効 |
| 一致したファイルのみを含める | 有効 |
| 実行時刻 | 今すぐジョブを実行 |
「増分ハーベスト」を有効にすると、初回実行後は変更または追加された対象を中心にハーベストします。今回のような論理データ・エンティティでは、既存のファイル名パターンに一致する新規ファイルが、対応する論理データ・エンティティへ追加されます。
「一致したファイルのみを含める」を有効にすることで、割り当てたファイル名パターンに一致するCSVとParquetだけを対象にします。
5) Harvest: ジョブのSUCCEEDEDを確認
ジョブを作成し、ステータスがSUCCEEDEDになることを確認します。
■ 論理データ・エンティティの確認
フィルタでデータ・エンティティ・タイプを「論理」に設定します。
1) Data Catalog Home画面
[データ・エンティティ]をクリックします。

2) データ・エンティティ画面
CSVとParquetの2つの論理データ・エンティティが作成されていることを確認します。

それぞれの論理データ・エンティティには、2026年7月20日と21日の2ファイルが関連付けられました。
3) CSVデータ・エンティティ画面
作成したCSVの論理データ・エンティティ画面にある「ファイル」タブを開き、2026年7月20日と21日の2ファイルが含まれていることを確認します。

4) Parquetデータ・エンティティ画面
作成したParquetの論理データ・エンティティ画面にある「ファイル」タブを開き、2026年7月20日と21日の2ファイルが含まれていることを確認します。

■ CSVとParquetの属性を比較
各論理データ・エンティティの「属性」タブを開き、列名とデータ型を比較します。
今回のデータには16列あります。
order_id
order_timestamp
order_date
customer_id
customer_name
prefecture
product_id
product_name
quantity
unit_price
amount
payment_method
coupon_used
notes
source_system
schema_version
● CSV属性確認
1) sales_orders_csv: Summary画面
[Attributes]タブをクリックします。

2) sales_orders_csv: Attributes画面
列名とデータ型を確認します。

● Parquet属性確認
1) sales_orders_parquet: Summary画面
[Attributes]タブをクリックします。

2) sales_orders_parquet: Attributes画面
列名とデータ型を確認します。

実測結果のうち、型の違いが分かりやすい主な属性を次の表に整理します。
| 属性 | CSVで表示された型 | Parquetで表示された型 | Parquet内部の型 |
|---|---|---|---|
order_id |
String |
STRING |
UTF8 |
order_timestamp |
String |
TIMESTAMP(MILLIS, true) |
TIMESTAMP_MILLIS |
order_date |
String |
TIMESTAMP(MILLIS, true) |
DATE |
customer_name |
String |
STRING |
UTF8 |
quantity |
Long |
INTEGER(32,true) |
INT32 |
unit_price |
Long |
DOUBLE |
DOUBLE |
amount |
Long |
DOUBLE |
DOUBLE |
coupon_used |
String |
BOOLEAN |
BOOLEAN / OPTIONAL |
notes |
String |
STRING |
UTF8 / OPTIONAL |
schema_version |
Long |
INTEGER(32,true) |
INT32 |
実測では、CSVのorder_timestamp、order_date、coupon_usedはStringとして表示されました。一方、CSVの整数値はLongとして推定されています。CSVファイル自体にはスキーマが埋め込まれていないため、Data Catalogが内容を解析して型を推定した結果です。
Parquetでは、order_timestampはTIMESTAMP(MILLIS, true)、coupon_usedはBOOLEAN、quantityはINTEGER(32,true)として表示されました。ファイル内でDOUBLEとして定義したunit_priceとamountも、Data Catalog上でDOUBLEとして確認できました。
特に興味深かったのは、Parquet内部ではDATEとして定義したorder_dateが、Data Catalog上ではTIMESTAMP(MILLIS, true)と表示された点です。少なくとも今回の環境では、Parquet内部の論理型とData Catalog上の属性型が1対1ではなく、カタログ側の型へマッピングされて表示されました。
また、Parquet内部ではcoupon_usedとnotesをOPTIONALとして作成していますが、Data Catalogの属性一覧ではNULL可否までは確認できませんでした。日本語を含むCSVとParquetのハーベストは成功しました。ただし、Data Catalogの主目的はメタデータ管理であり、今回確認した属性画面にはデータ値が表示されません。日本語値そのものの表示や文字化けの有無は、別の読取りツールで確認する必要があります。
■ ハーベスト・ジョブをスケジュール
初回ハーベストが成功したため、同じジョブを定期実行するスケジュールを作成します。
Data Catalogのスケジュールでは、毎時、毎日、毎週、毎月を選択できます。
1) Data Catalog Home画面
[Schedules]タブをクリックし、スケジュール画面を表示します。

2) スケジュール一覧画面
スケジュール作成ボタンをクリックします。

3) スケジュール作成画面
次のように設定し、[Schedule]をクリックします。
| 項目 | 設定例 |
|---|---|
| ジョブ | sales-orders-harvest-job |
| 名前 | sales-orders-daily-harvest |
| 頻度 | 毎日 |
| ローカル開始時刻 | 03:00 |
| ローカル終了時刻 | 検証期間に合わせて設定 |
これで、初回設定後はObject Storageへ追加されたファイルのメタデータを定期的に更新できるようになります。
■ 増分データを追加
● 増分データの追加
初回ハーベスト後、2026年7月22日のCSVとParquetを追加します。
1) 2026年7月22日のCSVとParquetファイル追加
oci os object bulk-upload \
--bucket-name data-catalog-csv-parquet-demo \
--src-dir ./02_incremental_upload \
--verify-checksum
追加されるオブジェクトは次の2つです。
demo/sales_orders_csv/dt=2026-07-22/sales_orders_20260722_part001.csv
demo/sales_orders_parquet/dt=2026-07-22/sales_orders_20260722_part001.parquet
% oci os object bulk-upload \
--bucket-name data-catalog-csv-parquet-demo \
--src-dir ./02_incremental_upload \
--verify-checksum
Uploaded demo/sales_orders_csv/dt=2026-07-22/sales_orders_20260722_part001.csv [####################################] 100%
Uploaded demo/sales_orders_parquet/dt=2026-07-22/sales_orders_20260722_part001.parquet [####################################] 100%
skipped-objects : なし
upload-failures : なし
checksum : 2ファイルとも一致
2) バケット画面: 追加したCSVファイルを確認
demo/sales_orders_csv/dt=2026-07-22/sales_orders_20260722_part001.csvを確認します。
3) バケット画面: 追加したParquetファイルを確認
demo/sales_orders_parquet/dt=2026-07-22/sales_orders_20260722_part001.parquetを確認します。
今回は、日次スケジュールを作成するところまで確認しました。2026年7月22日分の増分反映は、スケジュール実行を待たず、ジョブを手動で再実行して確認します。
● ジョブを手動実行
スケジュール実行を待つこともできますが、今回は増分結果をすぐに確認するため、「ジョブ」画面からsales-orders-harvest-jobを手動で再実行します。
増分ハーベスト完了後、CSVとParquetの論理データ・エンティティを開き、「ファイル」タブに2026年7月22日分が追加されたことを確認します。
1) Data Catalogのジョブ画面
2) ジョブを実行
[Run]をクリックしてジョブを実行します。

3) ジョブ実行中
4) ジョブ完了
ジョブが完了し、ステータスがSUCCEEDEDになったことを確認します。

● 増分データの追加確認
初回と増分の結果を整理します。
| 項目 | 初回 | 増分後 |
|---|---|---|
| CSVファイル数 | 2 | 3 |
| Parquetファイル数 | 2 | 3 |
| テストデータのCSV合計行数 | 12 | 18 |
| テストデータのParquet合計行数 | 12 | 18 |
| 論理データ・エンティティ数 | 2 | 2 |
ファイルは増えましたが、論理データ・エンティティはCSV用とParquet用の2つのままです。
■ CSVとParquetをカタログ化して分かったこと
今回の検証では、Object Storage上に日付ごとに分割して配置したCSVとParquetを、OCI Data Catalogで形式単位の論理データ・エンティティとして管理する構成を作成しました。
実測結果をもとに、次のように整理できます。
| 観点 | CSV | Parquet |
|---|---|---|
| ファイル内スキーマ | ヘッダーに列名は持てるが、データ型を含むスキーマは保持しない | 列名、型、NULL可否などを保持 |
| Data Catalogでの日時 | String |
TIMESTAMP(MILLIS, true) |
| Data Catalogでの日付 | String |
内部はDATEだが、画面ではTIMESTAMP(MILLIS, true)
|
| Data CatalogでのBOOLEAN | String |
BOOLEAN |
| Data Catalogでの数値 | サンプル値からLongと推定 |
INTEGER(32,true)またはDOUBLE
|
| NULL可否 | 空欄との区別に注意 | ファイル内部ではOPTIONALだが、属性一覧では直接確認できない |
| 日付別ファイルの管理 | ファイル名パターンで1つの論理データ・エンティティへ集約 | 同左 |
今回の検証では、Parquet内部の型とData Catalog上の型が、必ずしも同じ名称で表示されないことも確認できました。Data Catalogは元ファイルを書き換えるのではなく、抽出したメタデータを標準化してカタログへ登録します。そのため、ファイル内部の型を厳密に確認するときはParquet検査ツール、データセットの所在や検索にはData Catalogというように使い分けると分かりやすくなります。
論理データ・エンティティを使用することで、日付ファイルが増えても、データ・カタログ上ではデータセット単位で探しやすい状態を維持できます。
また、増分ハーベストとスケジュールを組み合わせることで、Object Storageへ新しいファイルが追加された後のメタデータ更新を自動化できます。
■ Data Catalogが自動でしてくれること、人が設計すること
今回、Object Storageをハーベストすると、ファイル名、パス、形式、フィールド名、データ型などの技術メタデータが自動的に収集されました。
ここだけを見ると、Object Storageへファイルを保存すれば、Data Catalogがファイルの内容を理解し、業務単位のデータセットへ自動的に整理してくれるようにも見えます。
しかし、今回CSVとParquetを実際にカタログ化してみて、Data Catalogが自動で収集してくれる範囲と、データを作成・運用する側が設計する範囲は、分けて考える必要があると分かりました。
● 自動収集しやすいメタデータと、人が設計するメタデータ
メタデータは、すべてを同じものとして考えるのではなく、次の3つに分けると分かりやすくなります。
- ファイル管理メタデータ: ファイル名、パス、形式、サイズ、更新日時など
- 技術メタデータ: フィールド名、データ型、スキーマ、パーティションなど
- 業務メタデータ: データの意味、Owner、品質基準、機密区分、利用条件など
Data Catalogが自動収集しやすいのは、元ファイルから機械的に判別できるファイル管理メタデータと技術メタデータです。一方、データが業務上何を意味するのか、誰が管理するのか、どの品質を満たすべきかといった情報は、人が定義して運用する必要があります。
| 項目 | Data Catalogで自動収集しやすい | 人が設計・運用すること |
|---|---|---|
| ファイル名、パス、形式 | ○ | 命名規則、フォルダ構成、配置規則 |
| サイズ、更新日時 | ○ | 保持期間、更新サイクル |
| CSV/Parquetのフィールド | ○ | 列名、型、スキーマの統一 |
| 複数ファイルのグループ化 | △ | ファイル名パターンを設計してData Catalogへ登録 |
| データの業務上の意味 | × | 用語、説明、利用目的を定義 |
| Owner、管理責任者 | × | Owner/Data Stewardを決定 |
| 品質、正確性、鮮度 | × | 品質基準、検証方法、監視方法を設計 |
| 機密区分、利用条件 | × | 分類、権限、ガバナンスを設計 |
| 分析・AI向けデータセット | × | 加工、統合、重複排除、構造化を実施 |
対応形式であれば、Data CatalogはObject Storage内のファイルからフィールド情報を抽出できます。一方、未対応形式から収集できるのは、主にファイル名やパスなどの基本情報です。Oracle公式ドキュメント
また、複数ファイルを1つの論理データ・エンティティへまとめる場合も、Data Catalogが業務内容を推測して自動的に仕分けるわけではありません。どのファイルを同じデータセットとして扱うのかを表すファイル名パターンを、人が設計してデータ・アセットへ割り当てます。Oracle公式ドキュメント
● 今回の検証でも、事前にデータを設計していた
今回の検証では、Data Catalogを実行する前に、次のような設計を行っていました。
| 今回の作業 | 自動収集/事前設計 |
|---|---|
| ファイル名、パス、形式の取得 | Data Catalogが自動収集 |
| CSV/Parquetのフィールド取得 | Data Catalogが自動収集 |
sales_orders_YYYYMMDD_part001という命名 |
事前に人が設計 |
sales_orders_csvとsales_orders_parquetのフォルダ分離 |
事前に人が設計 |
dt=YYYY-MM-DDによる日付別の配置 |
事前に人が設計 |
| Parquetの列名とデータ型 | Parquet作成時に人が設計 |
| CSVとParquetを分けてまとめるファイル名パターン | 人がData Catalogへ登録 |
| 「注文データ」という業務上の意味 | 人が定義 |
| Owner、品質基準、更新頻度 | 人が運用ルールを定義 |
つまり、初回ハーベストで4ファイルを2つの論理データ・エンティティとして管理できたのは、Data Catalogだけの働きではありません。ファイル名、フォルダ構成、Parquetスキーマ、ファイル名パターンをあらかじめ設計していたため、Data Catalogがその構造を収集し、検索可能な形へ整理できました。
● Parquetへ変換すれば、業務メタデータまで完成するわけではない
Parquetは、列名、データ型、NULL可否などのスキーマをファイル内に保持できます。そのため、CSVよりもデータ構造を明確にしやすく、今回の検証でもTIMESTAMP、BOOLEAN、INTEGER、DOUBLEなどの型がData Catalogへ反映されました。
ただし、Parquetへ変換するだけで、次のような業務上の意味まで自動的に決まるわけではありません。
-
amountは税込金額なのか、税抜金額なのか - 注文データは確定値なのか、処理途中の値なのか
- どのシステムが正とされるデータを管理しているのか
- 誰がデータ品質に責任を持つのか
- どの時点までのデータが反映されているのか
- 個人情報を含み、利用制限が必要なのか
Parquetなどへ構造化することは、技術メタデータを明確にするための重要な工程です。その上で、Business Glossary、タグ、Description、Data ownerやUpdate frequencyなどのCustom Propertiesを使用し、業務メタデータを追加していく必要があります。Oracle公式ドキュメント
● 実運用では、データを整備する流れも必要になる
Data Catalogを活用するためには、ハーベストだけでなく、データを継続的に設計・作成・運用する流れが必要です。
- Raw: 受け取った元ファイルをそのまま保存する領域
- Standardized: 列名、データ型、文字コード、日付形式、命名規則などを統一する領域
- Curated: 業務単位で統合し、品質確認や重複排除を行った利用向けデータセット
- Data Catalog: 整備されたデータの場所と構造を収集し、検索や意味づけを行う層
ここで重要なのは、Data CatalogがRawデータをStandardizedやCuratedへ自動変換するわけではないことです。変換処理やデータ品質管理は、ETL/ELTなどのデータ・パイプラインとして別途設計します。Data Catalogは、その結果として作られたデータセットを発見・理解・管理しやすくする役割を担います。
Data Catalogは、散らかったファイルを自動的に完成されたデータセットへ変換するサービスではありません。人が設計・構造化したデータについて、場所・構造・意味を見つけやすくするサービスです。
今回の検証で増分ハーベストによるメタデータ更新は自動化できました。一方、その前提となるファイルの命名、配置、スキーマ、グループ化、業務上の意味は、継続して設計・運用する必要があります。この境界を理解しておくと、Data Catalogを導入した後に「思っていた自動化と違った」となることを避けやすくなると考えます。
■ 注意点
● ファイル名パターンはハーベスト前に割り当てる
ファイル名パターンを後から追加または変更すると、既存の論理データ・エンティティが非アクティブになる場合があります。また、増分ハーベストではファイル名パターンの式や割当ての変更を追跡しないため、変更後は完全ハーベスト(フル・ハーベスト)を実行します。
まずテスト式で実際のオブジェクト名を確認し、パターンをデータ・アセットへ割り当ててから初回ハーベストを実行すると分かりやすくなります。
● CSVの型は実データで確認する
CSVではDATE、TIMESTAMP、BOOLEAN、NULLなどがテキストや空欄として記録されます。値の揺れや欠損値によって、想定と異なる型として認識されないかを実データで確認します。
● Parquetでも複数ファイルのスキーマをそろえる
同じ論理データ・エンティティへまとめるParquetファイルは、基本的に同じスキーマで作成します。
テストデータの03_optional_schema_evolutionには3列を追加したファイルも用意しています。異なるスキーマのファイルを追加した場合の見え方は、別の検証として確認します。
■ まとめ
OCI Data Catalogを使用して、Object Storage内のCSVとParquetから技術メタデータを抽出し、日付ごとに分割されたファイルを論理データ・エンティティとして管理してみてみました。
一方で、Data Catalogがファイルを業務の意味に従って自動的に仕分けし、分析可能なデータセットへ変換してくれるわけではありません。命名規則、フォルダ構成、Parquetスキーマ、ファイル名パターン、業務上の意味などは、データを作成・運用する側で設計する必要があります。
今回、特に興味深かったのは、同じ注文データを格納していても、CSVとParquetではData Catalog上に見える型情報が大きく異なったことです。
CSVでは日時やBOOLEANがStringとして表示されました。一方、ParquetではTIMESTAMP、BOOLEAN、INTEGER、DOUBLEなどの型が反映されました。ただし、Parquet内部でDATEとして定義した列が、Data CatalogではTIMESTAMP(MILLIS, true)として表示されるなど、元ファイルの論理型とカタログ上の属性型が必ずしも1対1ではないことも確認できました。
また、日付ごとのファイルをファイル名パターンでまとめることで、CSVとParquetのファイル数が増えても、データセット単位の論理データ・エンティティとして探せる状態を維持できたので、Object Storageをデータレイクとして運用するときに分かりやすくなります。
Object Storageへファイルを置くだけでもデータレイクは作れます。しかし、Oracle DatabaseやAIから活用していくためには、どこに何のデータがあり、どのような属性を持っているのかを検索できる状態にしておくことが重要です。今回、実際にハーベストしてみたことで、データを置くところから、見つけて使える状態へ進めるためのData Catalogの役割がかなり分かりやすくなりました。
今回確認したObject Storage、Data Catalog、Resource Principal、データ・アセット作成、ハーベストの流れは、第2回でOracle Databaseマニュアルを管理するときの基盤になります。第2回では、第1回のバケットとData Catalogインスタンスを再利用することも、新しい文書専用データ・アセットを作成することもできます。
■ 次回以降
● 第2回: Oracle DatabaseマニュアルPDFの管理情報をカタログ化
第2回では、Oracle DatabaseマニュアルPDFをObject Storageへ配置します。PDFについては、[Include Unrecognized Files]を有効にしてファイル名やパスなどの基本メタデータをハーベストします。
あわせて、document_inventory.parquetに次のような文書管理情報を格納し、PDF原本と文書インベントリを組み合わせてカタログ化してみてみます。
document_id
document_family_id
product_version
document_title
official_url
object_name
object_uri
rag_enabled
Object Storage上のPDFファイル名は英数字を使用し、正式な文書名、製品バージョン、公式URLなどは文書インベントリParquetで管理します。これにより、第3回のVector Index作成でマルチバイト文字を含むファイル名がスキップされる点にも対応できる構成にします。
なお、文書インベントリParquetの各行がPDFのData Entityへ自動的に転記されるわけではありません。第2回ではCustom Propertiesを使用し、PDFのData Entityへ文書名、製品バージョン、公式URL、RAG対象フラグなどを設定します。
● 第3回: Object Storage上のPDFをSelect AI with RAGで検索
第3回では、第2回でカタログ化したPDFをData CatalogからVector Indexへ転送するのではなく、Autonomous AI Databaseが同じObject Storage上のPDFを直接読み込み、文書をチャンク分割してEmbeddingを生成し、Vector Indexへ格納します。
Data CatalogはPDFの所在や文書管理情報を管理し、Autonomous AI DatabaseはPDF本文のVector Index化と意味検索を担当します。第2回で作成するdocument_id、document_family_id、object_name、object_uri、rag_enabledを引き続き使用し、対象文書と文書インベントリの対応を確認しながら、Select AI with RAGでOracle Databaseマニュアルへ自然言語で質問してみてみます。
■ 解説
Datacatalog, Metadata,Parquetについてわかりやすく解説しています。
セールストークにもどうぞ
■ おまけ
■ 参考情報
- OCI Data Catalog - 技術メタデータのハーベスト
- OCI Data Catalog - Oracle Object Storageからのハーベスト
- OCI Data Catalog - 論理データ・エンティティとしてのObject Storageファイルのハーベスト
- OCI Data Catalog - ファイル名パターンの作成
- OCI Data Catalog - 論理データ・エンティティの制限事項
- OCI Data Catalog - ポリシーの例
- OCI Data Catalog - ジョブ・スケジュールの作成
- OCI Object Storage - オブジェクトの一括アップロード
- OCI Data Catalog - データ・アセットのハーベスト
- Autonomous AI Database - Select AI with Retrieval Augmented Generation (RAG)
- Apache Parquet - File Format




























