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

Parquet

InputOutputAlias

説明

Apache Parquet は、Hadoop エコシステムで広く使用されている列指向ストレージ形式です。ClickHouseはこの形式の読み取りおよび書き込み操作をサポートしています。

データ型のマッチング

以下の表は、サポートされているデータ型と、INSERTおよびSELECTクエリにおける ClickHouse の データ型 との対応を示しています。

Parquet データ型(INSERTClickHouse データ型Parquet データ型(SELECT
BOOLBoolBOOL
UINT8, BOOLUInt8UINT8
INT8Int8/Enum8INT8
UINT16UInt16UINT16
INT16Int16/Enum16INT16
UINT32UInt32UINT32
INT32Int32INT32
UINT64UInt64UINT64
INT64Int64INT64
FLOATFloat32FLOAT
DOUBLEFloat64DOUBLE
DATEDate32DATE
TIME (ms)DateTimeUINT32
TIMESTAMP, TIME (us, ns)DateTime64TIMESTAMP
STRING, BINARYStringBINARY
STRING, BINARY, FIXED_LENGTH_BYTE_ARRAYFixedStringFIXED_LENGTH_BYTE_ARRAY
DECIMALDecimalDECIMAL
LISTArrayLIST
STRUCTTupleSTRUCT
MAPMapMAP
UINT32IPv4UINT32
FIXED_LENGTH_BYTE_ARRAY, BINARYIPv6FIXED_LENGTH_BYTE_ARRAY
FIXED_LENGTH_BYTE_ARRAY, BINARYInt128/UInt128/Int256/UInt256FIXED_LENGTH_BYTE_ARRAY
JSONJSONJSON

配列は入れ子にすることができ、引数として Nullable 型の値を持つことができます。Tuple および Map 型も入れ子にすることができます。

サポートされていない Parquet データ型は次のとおりです:

  • FIXED_SIZE_BINARY
  • UUID
  • ENUM.

ClickHouse テーブルのカラムのデータ型は、挿入された Parquet データの対応するフィールドと異なる場合があります。データを挿入する際、ClickHouse は上記の表に従ってデータ型を解釈し、その後、ClickHouse のテーブルカラムに設定されているデータ型にデータを キャスト します。

使用例

データの挿入

以下のデータを持つ Parquet ファイル、football.parquet を使用します:

    ┌───────date─┬─season─┬─home_team─────────────┬─away_team───────────┬─home_team_goals─┬─away_team_goals─┐
 1. │ 2022-04-30 │   2021 │ Sutton United         │ Bradford City       │               1 │               4 │
 2. │ 2022-04-30 │   2021 │ Swindon Town          │ Barrow              │               2 │               1 │
 3. │ 2022-04-30 │   2021 │ Tranmere Rovers       │ Oldham Athletic     │               2 │               0 │
 4. │ 2022-05-02 │   2021 │ Port Vale             │ Newport County      │               1 │               2 │
 5. │ 2022-05-02 │   2021 │ Salford City          │ Mansfield Town      │               2 │               2 │
 6. │ 2022-05-07 │   2021 │ Barrow                │ Northampton Town    │               1 │               3 │
 7. │ 2022-05-07 │   2021 │ Bradford City         │ Carlisle United     │               2 │               0 │
 8. │ 2022-05-07 │   2021 │ Bristol Rovers        │ Scunthorpe United   │               7 │               0 │
 9. │ 2022-05-07 │   2021 │ Exeter City           │ Port Vale           │               0 │               1 │
10. │ 2022-05-07 │   2021 │ Harrogate Town A.F.C. │ Sutton United       │               0 │               2 │
11. │ 2022-05-07 │   2021 │ Hartlepool United     │ Colchester United   │               0 │               2 │
12. │ 2022-05-07 │   2021 │ Leyton Orient         │ Tranmere Rovers     │               0 │               1 │
13. │ 2022-05-07 │   2021 │ Mansfield Town        │ Forest Green Rovers │               2 │               2 │
14. │ 2022-05-07 │   2021 │ Newport County        │ Rochdale            │               0 │               2 │
15. │ 2022-05-07 │   2021 │ Oldham Athletic       │ Crawley Town        │               3 │               3 │
16. │ 2022-05-07 │   2021 │ Stevenage Borough     │ Salford City        │               4 │               2 │
17. │ 2022-05-07 │   2021 │ Walsall               │ Swindon Town        │               0 │               3 │
    └────────────┴────────┴───────────────────────┴─────────────────────┴─────────────────┴─────────────────┘

データを挿入します:

INSERT INTO football FROM INFILE 'football.parquet' FORMAT Parquet;

データの読み取り

Parquet 形式を使用してデータを読み取ります:

SELECT *
FROM football
INTO OUTFILE 'football.parquet'
FORMAT Parquet
ヒント

Parquet はバイナリ形式であり、端末上で人間が読みやすい形式では表示されません。Parquet ファイルを出力するには INTO OUTFILE を使用してください。

Hadoop とのデータ交換には、HDFS table engine を使用できます。

フォーマット設定

設定説明デフォルト
input_format_parquet_case_insensitive_column_matchingParquet カラムと CH カラムの照合の際に大文字小文字を無視します。0
input_format_parquet_preserve_orderParquet ファイルから読み取る際に行の順序を変更しないようにします。通常、これにより速度が大幅に遅くなります。0
input_format_parquet_filter_push_downParquet ファイルを読み取る際に、WHERE/PREWHERE 式と Parquet メタデータの最小/最大統計に基づいて、全行グループをスキップします。1
input_format_parquet_bloom_filter_push_downParquet ファイルを読み取る際に、WHERE 式と Parquet メタデータのブloomフィルターに基づいて、全行グループをスキップします。0
input_format_parquet_use_native_readerParquet ファイルを読み取る際に、Arrow リーダーの代わりにネイティブリーダーを使用します。0
input_format_parquet_allow_missing_columnsParquet 入力フォーマットを読み取る際に欠落しているカラムを許可します。1
input_format_parquet_local_file_min_bytes_for_seekParquet 入力フォーマットで無視して読み取る代わりに、ローカル読み取り(ファイル)をシークするために必要な最小バイト数です。8192
input_format_parquet_enable_row_group_prefetchパーケット解析中に行グループのプリフェッチを有効にします。現在、シングルスレッドの解析のみがプリフェッチできます。1
input_format_parquet_skip_columns_with_unsupported_types_in_schema_inferenceスキーマ推論中にサポートされていない型のカラムをスキップします。0
input_format_parquet_max_block_sizeParquet リーダーの最大ブロックサイズです。65409
input_format_parquet_prefer_block_bytesParquet リーダーから出力される平均ブロックバイト数です。16744704
input_format_parquet_enable_json_parsingParquet ファイルを読み取る際に、JSON カラムを ClickHouse の JSON カラムとして解析します。1
output_format_parquet_row_group_size行のターゲット行グループサイズです。1000000
output_format_parquet_row_group_size_bytes圧縮前のバイト単位でのターゲット行グループサイズです。536870912
output_format_parquet_string_as_string文字列カラムに対して Parquet の String 型を使用します。1
output_format_parquet_fixed_string_as_fixed_byte_arrayFixedString カラムに対して Parquet の FIXED_LENGTH_BYTE_ARRAY 型を使用します。1
output_format_parquet_version出力フォーマット用の Parquet フォーマットバージョンです。サポートされているバージョン: 1.0, 2.4, 2.6, および 2.latest(デフォルト)2.latest
output_format_parquet_compression_methodParquet 出力フォーマット用の圧縮方法です。サポートされているコーデック: snappy, lz4, brotli, zstd, gzip, none(非圧縮)zstd
output_format_parquet_compliant_nested_typesパーケットファイルスキーマでは、リスト要素に対して 'item' の代わりに 'element' という名前を使用します。これは Arrow ライブラリ実装の履歴的な遺物です。通常の互換性を高め、古いバージョンの Arrow では問題が発生する場合があります。1
output_format_parquet_use_custom_encoderより高速な Parquet エンコーダー実装を使用します。1
output_format_parquet_parallel_encoding複数のスレッドで Parquet エンコーディングを行います。output_format_parquet_use_custom_encoder が必要です。1
output_format_parquet_data_page_size圧縮前のターゲットページサイズ(バイト単位)です。1048576
output_format_parquet_batch_sizeこの行数ごとにページサイズを確認します。平均値サイズが数 KB を超えるカラムがある場合は減少を検討してください。1024
output_format_parquet_write_page_indexパーケットファイルにページインデックスを書き込む可能性を追加します。1
input_format_parquet_import_nested廃止された設定で、何も行いません。0