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サーバーを必要とせずにローカル/リモートファイルで作業するためのポータブルな完全機能ツールです。