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

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ファイルの構造を調べることができます:

2番目の引数として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サーバーを必要とせずにローカル/リモートファイルで作業できる、ポータブルなフル機能ツールです。