| 入力 | 出力 | エイリアス |
|---|---|---|
| ✔ | ✗ |
説明
HiveText は、Apache Hive
のテーブルで使われるテキストシリアライゼーションフォーマット (Hive の LazySimpleSerDe が生成するフォーマット) を読み取ります。これは CSV に似た区切り付きテキスト
フォーマットで、フィールドは Hive のデフォルトの区切り文字 \x01 (Ctrl-A) で
区切られます。フィールドの区切り文字は
input_format_hive_text_fields_delimiter で設定できます。
HiveText は入力専用のフォーマットです。データにはヘッダー行がありません。値は宛先テーブルのカラムに位置に基づいて
対応付けられるため、カラム名と型はデータから推論されるのではなく、テーブル (または明示的に指定された
構造) から取得されます。読み取り時、ClickHouse は
日付と時刻を best-effort モードでパースし (date_time_input_format を参照) 、
末尾の省略されたフィールドをカラムのデフォルト値で補完し、認識できないフィールドは
スキップします。
フィールド内では、値は Hive のネストされた区切り文字ではなく、CSV と同じエスケープ規則を使って
パースされます。特に、
型 Array のカラムは角括弧付きの
表現 (たとえば "['a','b','c']") から読み取られ、
Hive のコレクション区切り文字 \x02 で区切られた値からは読み取られません。
ネストされた区切り文字の設定は効果がありません
input_format_hive_text_collection_items_delimiter および
input_format_hive_text_map_keys_delimiter の設定は
互換性のために受け付けられますが、現時点ではパース時に使用されません。input_format_hive_text_allow_variable_number_of_columns を参照) 。
テーブルよりフィールド数が少ない行では、不足しているカラムがデフォルト値で補完され、
余分な末尾フィールドがある行では、その余分なフィールドはスキップされます。
使用例
input_format_hive_text_fields_delimiter を使ってデフォルトのフィールド区切り文字をコンマ (,) に上書きしています。
HiveTextファイルの読み込み
hive_data.txt ファイルがあるとします。
hive_data.txt
FORMAT HiveText を使ってそのテーブルにファイルの内容を挿入します:
Query
Response
1,3 には 2 つのフィールドしかないため、不足しているカラム c
にはデフォルト値 0 が設定されます。
可変数のカラム
input_format_hive_text_allow_variable_number_of_columns = 1 では、
テーブルのカラム数より多くのフィールドを持つ行では、末尾の余分なフィールドは
そのままスキップされます:
hive_extras.txt
Query
Response
input_format_hive_text_allow_variable_number_of_columns = 0 を設定すると、
フィールド数が厳密にチェックされ、テーブルのフィールド数より少ない行があると
パース時に例外が発生します。
フォーマット設定
| Setting | Description | Default |
|---|---|---|
input_format_hive_text_fields_delimiter | Hive テキストファイル内のフィールド間の区切り文字 | \x01 |
input_format_hive_text_collection_items_delimiter | Hive テキストファイル内のコレクション (array または map) の項目間の区切り文字。指定できますが、現時点ではパース時に使用されません。 | \x02 |
input_format_hive_text_map_keys_delimiter | Hive テキストファイル内の map のキーと値のペア間の区切り文字。指定できますが、現時点ではパース時に使用されません。 | \x03 |
input_format_hive_text_allow_variable_number_of_columns | Hive Text 入力で余分なカラムを無視し (ファイルのカラム数が想定より多い場合) 、不足しているフィールドはデフォルト値として扱います | 1 |