メインコンテンツまでスキップ
メインコンテンツまでスキップ

ClickHouseでのParquetの取り扱い

Parquetは、データを列指向の方法で効率的に保存するためのファイル形式です。ClickHouseはParquetファイルの読み書きをサポートしています。

ヒント

クエリ内でファイルパスを参照する場合、ClickHouseが読み取ろうとする位置は、利用しているClickHouseのバリアントによって異なります。

clickhouse-localを使用している場合、ClickHouse Localを起動した場所を基準にして読み取ります。 ClickHouse Serverまたはclickhouse client経由でClickHouse Cloudを使用している場合、サーバーの/var/lib/clickhouse/user_files/ディレクトリを基準にして読み取ります。

Parquetからのインポート

データをロードする前に、file()関数を使用して、例のparquetファイルの構造を確認できます:

第二引数としてParquetを使用しているので、ClickHouseはファイル形式を認識します。これにより、列とその型が表示されます:

データを実際にインポートする前に、SQLのパワーを使用してファイルを探索することもできます:

ヒント

file()およびINFILE/OUTFILEに対して明示的な形式設定をスキップすることができます。 その場合、ClickHouseはファイル拡張子に基づいて形式を自動的に検出します。

既存のテーブルへのインポート

Parquetデータをインポートするテーブルを作成しましょう:

次に、FROM INFILE句を使用してデータをインポートできます:

ClickHouseがParquetの文字列(dateカラム内)をDate型に自動的に変換したことに注意してください。これは、ClickHouseがターゲットテーブル内の型に基づいて自動的に型変換を行うためです。

ローカルファイルをリモートサーバーに挿入する

ローカルのParquetファイルをリモートのClickHouseサーバーに挿入したい場合、以下のようにファイルの内容をclickhouse-clientにパイプすることで実行できます:

Parquetファイルから新しいテーブルを作成する

ClickHouseはparquetファイルのスキーマを読み取るため、即座にテーブルを作成できます:

これにより、指定されたparquetファイルから自動的にテーブルが作成され、データが挿入されます:

デフォルトでは、ClickHouseはカラム名、型、値に厳格です。しかし、インポート中に存在しないカラムやサポートされていない値をスキップする場合もあります。これはParquet設定で管理できます。

Parquet形式へのエクスポート

ヒント

ClickHouse CloudでINTO OUTFILEを使用する場合、ファイルが書き込まれるマシン上でclickhouse clientでコマンドを実行する必要があります。

任意のテーブルやクエリ結果をParquetファイルにエクスポートするには、INTO OUTFILE句を使用できます:

これにより、作業ディレクトリにexport.parquetファイルが作成されます。

ClickHouseとParquetデータ型

ClickHouseとParquetのデータ型はほぼ同じですが、若干の違いがあります。例えば、ClickHouseはDateTime型をParquetのint64としてエクスポートします。その後、再びClickHouseにインポートすると、数字が表示されます(time.parquetファイル):

この場合、型変換を使用することができます:

さらなる読み物

ClickHouseは、さまざまなシナリオやプラットフォームをカバーするために、テキストおよびバイナリの多くの形式をサポートしています。以下の記事で、その他の形式やそれらとの連携方法について詳しく探求してください:

また、clickhouse-localも確認してください。これは、Clickhouseサーバーを必要とせずにローカル/リモートファイルで作業するためのポータブルな完全機能ツールです。