この記事について
- この記事はdatatech-jp Advent Calendar 2024の12月14日分として記載しています
背景
- オブジェクトストレージ上に格納されたparquet形式のファイル群をデータソースとするデータレイクハウス(watsonx.data)の環境構築に際して、Create Tableの際にそのデータファイルのメタデータ(データ列名や型など)を確認する必要がありました
- この記事の、「4.IBM Cloud Object Storage」の箇所(下図ご参照)
- 手元にparquet形式のデータはあるが、その中身はバイナリ形式であるため、そのままでは内容を確認できませんでした
parquet データフォーマットとは
-
列志向のデータフォーマットです
-
バイナリ形式のファイルなので、そのままでは読めません
duckDB とは
-
オープンソースの列志向データベースです
-
parquet 形式に対応しています
-
今回使ったクライアントとしてのコマンドラインは以下です
-
こちらをMACにインストールして、MAC上にダウンロードしたparquetファイルを読んでみます
データファイル(*.parquet)の読み方
- 手元のpaquet形式のファイルを確認
shumpei.kubo@ShumpeinoMacBook-Pro Downloads % ls -ltra | grep parquet
-rw-r--r--@ 1 shumpei.kubo staff 75558 6 2 2023 13297ee9-aca9-4912-8ff6-befb37041382.parquet
-rw-r--r--@ 1 shumpei.kubo staff 132088 4 15 2024 aircraft(1).parquet
-rw-r--r--@ 1 shumpei.kubo staff 2559 8 6 19:04 ORDER04.6ce8572f-d3b4-4a06-8de2-994d99b82291.parquet
-rw-r--r--@ 1 shumpei.kubo staff 2555 8 6 19:25 dstest.f1bf9f7c-e3b6-4318-903c-03e549e2e9c7.parquet
-rw-r--r--@ 1 shumpei.kubo staff 2555 8 7 02:28 order_table0807_1.9c3f0f67-a871-4bf7-a8da-40aaac639d4e.parquet
-rw-r--r--@ 1 shumpei.kubo staff 2554 8 7 11:22 order_table_p0807.parquet
-rw-r--r--@ 1 shumpei.kubo staff 97334 10 22 16:35 sdc1729581708923.parquet
-rw-r--r--@ 1 shumpei.kubo staff 61661 10 31 17:25 returned_file_and_reason.parquet
-rw-r--r--@ 1 shumpei.kubo staff 97334 11 12 10:28 sdc-1729581708923-1-000.parquet
shumpei.kubo@ShumpeinoMacBook-Pro Downloads %
- 任意のファイルをduckdbコマンドで読み出す
shumpei.kubo@ShumpeinoMacBook-Pro Downloads % duckdb -c "select * from order_table_p0807.parquet"
┌──────────────┬────────────────────┬────────────────────┬────────────────────┬───────────────────────┬──────────────────┬───────────────────┬───────────────────┐
│ ORDER_NUMBER │ RETAILER_NAME │ RETAILER_NAME_MB │ RETAILER_SITE_CODE │ RETAILER_CONTACT_CODE │ SALES_STAFF_CODE │ SALES_BRANCH_CODE │ ORDER_METHOD_CODE │
│ int32 │ varchar │ varchar │ int32 │ int32 │ int32 │ int32 │ int32 │
├──────────────┼────────────────────┼────────────────────┼────────────────────┼───────────────────────┼──────────────────┼───────────────────┼───────────────────┤
│ 827148 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10230 │ 40 │ 5 │
│ 827292 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10246 │ 40 │ 5 │
│ 100025 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10056 │ 19 │ 5 │
│ 828835 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 812263 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10230 │ 40 │ 5 │
│ 808651 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10356 │ 40 │ 5 │
│ 817756 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10356 │ 40 │ 5 │
│ 800260 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10356 │ 40 │ 5 │
│ 820248 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 826318 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 818146 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 828486 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10246 │ 40 │ 5 │
│ 807492 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10360 │ 40 │ 5 │
│ 834409 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 807124 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10346 │ 40 │ 5 │
│ 813194 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 821591 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10246 │ 40 │ 5 │
│ 803285 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 804877 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 829317 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10230 │ 40 │ 5 │
│ · │ · │ · │ · │ · │ · │ · │ · │
│ · │ · │ · │ · │ · │ · │ · │ · │
│ · │ · │ · │ · │ · │ · │ · │ · │
│ 822236 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10360 │ 40 │ 5 │
│ 823147 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10230 │ 40 │ 5 │
│ 831861 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10246 │ 40 │ 5 │
│ 834369 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10346 │ 40 │ 5 │
│ 100390 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10056 │ 19 │ 5 │
│ 100468 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10056 │ 19 │ 5 │
│ 813168 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10356 │ 40 │ 5 │
│ 803967 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10234 │ 40 │ 5 │
│ 816220 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10247 │ 40 │ 5 │
│ 804100 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10346 │ 40 │ 5 │
│ 100572 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10056 │ 19 │ 5 │
│ 822935 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10246 │ 40 │ 5 │
│ 103032 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10056 │ 19 │ 5 │
│ 802533 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10346 │ 40 │ 5 │
│ 802672 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10356 │ 40 │ 5 │
│ 803547 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10234 │ 40 │ 5 │
│ 814163 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10356 │ 40 │ 5 │
│ 805181 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10346 │ 40 │ 5 │
│ 819911 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10351 │ 40 │ 5 │
│ 820722 │ The Sports Factory │ The Sports Factory │ 20577 │ 3596 │ 10247 │ 40 │ 5 │
├──────────────┴────────────────────┴────────────────────┴────────────────────┴───────────────────────┴──────────────────┴───────────────────┴───────────────────┤
│ 90 rows (40 shown) 8 columns │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
shumpei.kubo@ShumpeinoMacBook-Pro Downloads %
- 非常に見やすい形式で、列名やデータ型、サンプルデータが読み取れます
- 上記の場合、行数はトータルで90行あるようですが、デフォルトでは真ん中を除いて40行が表示されました
10000行を超えるデータでも表示されるのは40行です
shumpei.kubo@ShumpeinoMacBook-Pro Downloads % duckdb -c "select * from airclaft.parquet"
┌─────────────┬───────────────────┬──────────────────────┐
│ tail_number │ manufacturer │ model │
│ varchar │ varchar │ varchar │
├─────────────┼───────────────────┼──────────────────────┤
│ N789SW │ Boeing │ B-737-7H4 │
│ N198UW │ Airbus │ A321-211 │
│ N681UP │ Boeing │ B747-1 │
│ N54711 │ Boeing │ B737-700PAX │
│ N390SW │ Boeing │ B-737-3H4 │
│ N258FE │ Boeing │ B727-2 │
│ N10323 │ Boeing │ B737-300PAX │
│ N956NN │ Boeing │ B737PASSENGER │
│ N8616 │ Boeing │ 737-800PASSENGERONLY │
│ N765AT │ Boeing │ B727-2 │
│ N641SW │ Boeing │ B-737-3H4 │
│ N493DN │ McDonnell-Douglas │ MD-82-PSGR │
│ N351WQ │ Bombardier │ Q400 │
│ N206UW │ Boeing │ B757-2B7 │
│ N928EV │ Bombardier │ CRJ200-2B19 │
│ N828MH │ Boeing │ B767-400 │
│ N730YX │ Embraer │ ERJ-170-200LR │
│ N606AA │ Boeing │ B757-223PASSENGER │
│ N439UA │ Airbus │ AirbusA320-232PAX │
│ N309DQ │ Boeing │ B-737-7L │
│ · │ · │ · │
│ · │ · │ · │
│ · │ · │ · │
│ N335AA │ Boeing │ B767-223ERPASSENGER │
│ N185UW │ Airbus │ A321-211 │
│ N920CA │ Canadair │ RJ100/ER │
│ N816NW │ Airbus │ A330-PSGR │
│ N715SF │ Canadair │ RJ100/ER │
│ N589UA │ Boeing │ B757-222PAX │
│ N950NN │ Boeing │ B737PASSENGER │
│ N424 │ Boeing │ 737-700PASSENGERONLY │
│ N295UX │ Embraer │ EMB-120 │
│ N14181 │ Embraer │ ERJ-145XR │
│ N987 │ Boeing │ 717-200PASSENGERONLY │
│ N8926E │ McDonnell-Douglas │ DC-9-30 │
│ N7848B │ Douglas │ COMMANDO │
│ N673AW │ Airbus │ A320-232 │
│ N530PA │ BAE │ JETSTM31 │
│ N923TW │ McDonnell-Douglas │ SUPER80PASSENGER │
│ N379WN │ Boeing │ 737-300PASSENGERONLY │
│ N821NN │ Boeing │ B737-823PASSENGER │
│ N247LR │ Bombardier │ CRJ-900-PSGR │
│ N722AN │ Boeing │ B777-300PASSENGER │
├─────────────┴───────────────────┴──────────────────────┤
│ 13101 rows (40 shown) 3 columns │
└────────────────────────────────────────────────────────┘
shumpei.kubo@ShumpeinoMacBook-Pro Downloads %
- このメタデータを使って、parquetファイル群が入っているフォルダをデータソースとしてデータレイクハウスからSQLで読み出す、というお話は、また別途、どこかで記載します