Windows PCでParquetファイルを読み込むのって、簡単な方法がイマイチなくて困ってました。
個人の話ならpythonスクリプト書くなりなんなりで好きにやればいいわけですが…やはり簡単な方法を用意し、チームに展開できないと。
と思い度々調べていたんですが、なんとDBeaverで簡単に読み込める方法があるということをこちらのStackOverflowの回答から発見いたしました。
後から調べたところ、本質的にはDuck DBがParquetの読み込みをサポートしているということで、Duck DBをサポートしているDBクライアントツールなら何でもいけるかと。
チームに展開する際の備忘録としても、整理した内容をこちらに残します。
Duck DB インスタンスの用意
と言ってもMySQLなどのように環境の準備が別で必要だったりはしません。
DBeaverの「新しい接続」からDuckDBというのを選択すればいいだけ。
その後表示される以下の画面の「パス」には :memory: と記述するとインメモリのDBインスタンスとなります。
試しにテスト接続を押してみましょう。
初回だと恐らくこのタイミングでドライバのインストール画面が表示されると思いますが、基本OKOKと選ぶ感じで。
Finishのボタンを押すとDBの接続の一覧に"memory"という名前のDuckDBとの接続が追加されていることと思います。
ちなみにDuckDB公式の手順はこちら
https://duckdb.org/docs/guides/sql_editors/dbeaver
Parquetファイルを読み込む
作成された接続を右クリックで新しいSQLエディタを開きます。
そして以下のようなクエリでファイルを指定して読み込んだらもう完了!
SELECT * FROM 'parquetファイルへの絶対パス'
-- example
SELECT * FROM 'C:\Users\nantoka-user\Downloads\test.parquet'
※適当なサンプルファイルをこちらから頂きました。
https://github.com/mukunku/ParquetViewer/tree/master/src/ParquetViewer.Tests/Data
CTASでテーブルも作れる
読み込める、ということはもちろんCTASによってテーブル化できます。
大きなファイルをいちいち読み込む処理をかけるよりは、恐らくテーブルに持ってしまってその後の集計クエリなどをかけるのが良いかと。
CREATE TABLE test_p AS SELECT * FROM 'C:\Users\nantoka-user\Downloads\RANDOM_TEST_FILE1.parquet'
parquetファイルへの書き出しもできる
以下のクエリで書き込みもできるようです。テスト用データの作成などに便利ですね。
COPY {テーブル名} TO 'ファイルパス' (FORMAT 'parquet')
-- example
COPY example_table TO 'C:\Users\nantoka-user\Downloads\example.parquet' (FORMAT 'parquet')
終わりに
少し前はtimestamp型の読み込みができなかったりもしたんですが、どんどんIssue対応で機能がアップデートされています。
今できないこともじきに対応されると思われますし、自身でDBeaverやDuckDBのリポジトリにIssueを上げてみるのも良いのではないでしょうか。