JSONObjectEachRow
Input | Output | Alias |
---|---|---|
✔ | ✔ |
説明
このフォーマットでは、すべてのデータが単一の JSON オブジェクトとして表現され、各行はこのオブジェクトの別々のフィールドとして表されます。これは、JSONEachRow
フォーマットに似ています。
使用例
基本例
以下の JSON があるとします:
オブジェクト名をカラム値として使用するには、特別な設定である format_json_object_each_row_column_for_object_name
を使用できます。
この設定の値は、結果のオブジェクト内の行に対して JSON キーとして使用されるカラムの名前に設定されます。
出力
テーブル test
が次の二つのカラムを持っているとしましょう:
これを JSONObjectEachRow
フォーマットで出力し、format_json_object_each_row_column_for_object_name
設定を使用しましょう:
入力
前の例からの出力を data.json
という名前のファイルに保存したとしましょう:
スキーマ推論にも対応しています:
データの挿入
ClickHouse では以下が可能です:
- オブジェクト内のキーと値のペアの順序に制限がない。
- 一部の値を省略すること。
ClickHouse は、要素間の空白やオブジェクト後のカンマを無視します。すべてのオブジェクトを1行で渡すことができます。行の改行で区切る必要はありません。
省略値の処理
ClickHouse は省略された値を対応する データ型 のデフォルト値で置き換えます。
もし DEFAULT expr
が指定されている場合、ClickHouse は input_format_defaults_for_omitted_fields 設定に応じて異なる置き換えルールを使用します。
以下のテーブルを考えましょう:
input_format_defaults_for_omitted_fields = 0
の場合、x
とa
のデフォルト値は0
です(UInt32
データ型のデフォルト値として)。input_format_defaults_for_omitted_fields = 1
の場合、x
のデフォルト値は0
ですが、a
のデフォルト値はx * 2
になります。
input_format_defaults_for_omitted_fields = 1
の設定でデータを挿入する場合、ClickHouse は input_format_defaults_for_omitted_fields = 0
の設定での挿入と比べて、より多くの計算リソースを消費します。
データの選択
UserActivity
テーブルを例にとりましょう:
クエリ SELECT * FROM UserActivity FORMAT JSONEachRow
は以下を返します:
JSON フォーマットとは異なり、無効な UTF-8 シーケンスの置き換えは行われません。値は JSON
と同様にエスケープされます。
任意のバイトセットを文字列として出力できます。テーブル内のデータが情報を失うことなく JSON 形式でフォーマットできると確信している場合は、JSONEachRow
フォーマットを使用してください。
入れ子構造の使用
Nested
データ型のカラムを持つテーブルがある場合、同じ構造の JSON データを挿入することができます。この機能は、input_format_import_nested_json 設定を有効にして使用します。
例えば、以下のテーブルを考えましょう:
Nested
データ型の説明で示されているように、ClickHouse は入れ子構造の各コンポーネントを別々のカラム(私たちのテーブルに対しては n.s
と n.i
)として扱います。以下の方法でデータを挿入できます:
階層的な JSON オブジェクトとしてデータを挿入するには、input_format_import_nested_json=1
を設定します。
この設定がない場合、ClickHouse は例外をスローします。
フォーマット設定
設定 | 説明 | デフォルト | メモ |
---|---|---|---|
input_format_import_nested_json | 入れ子の JSON データを入れ子のテーブルにマッピングします(JSONEachRow フォーマットで機能します)。 | false | |
input_format_json_read_bools_as_numbers | JSON 入力フォーマットでブール値を数値として解析できるようにします。 | true | |
input_format_json_read_bools_as_strings | JSON 入力フォーマットでブール値を文字列として解析できるようにします。 | true | |
input_format_json_read_numbers_as_strings | JSON 入力フォーマットで数値を文字列として解析できるようにします。 | true | |
input_format_json_read_arrays_as_strings | JSON 入力フォーマットで JSON 配列を文字列として解析できるようにします。 | true | |
input_format_json_read_objects_as_strings | JSON 入力フォーマットで JSON オブジェクトを文字列として解析できるようにします。 | true | |
input_format_json_named_tuples_as_objects | 名前付きタプルカラムを JSON オブジェクトとして解析します。 | true | |
input_format_json_try_infer_numbers_from_strings | スキーマ推論中に文字列フィールドから数値を推測しようとします。 | false | |
input_format_json_try_infer_named_tuples_from_objects | スキーマ推論中に JSON オブジェクトから名前付きタプルを推測しようとします。 | true | |
input_format_json_infer_incomplete_types_as_strings | JSON 入力フォーマットでスキーマ推論中に Nill または空のオブジェクト/配列のみを含むキーに対して型 String を使用します。 | true | |
input_format_json_defaults_for_missing_elements_in_named_tuple | 名前付きタプルを解析中に JSON オブジェクトの欠落している要素にデフォルト値を挿入します。 | true | |
input_format_json_ignore_unknown_keys_in_named_tuple | 名前付きタプルの JSON オブジェクト内の未知のキーを無視します。 | false | |
input_format_json_compact_allow_variable_number_of_columns | JSONCompact/JSONCompactEachRow フォーマットで変数数のカラムを許可し、追加のカラムを無視し欠落したカラムにデフォルト値を使用します。 | false | |
input_format_json_throw_on_bad_escape_sequence | JSON 文字列に不正なエスケープシーケンスが含まれている場合、例外をスローします。無効にした場合、不正なエスケープシーケンスはデータ内でそのまま残ります。 | true | |
input_format_json_empty_as_default | JSON 入力の空のフィールドをデフォルト値として扱います。 | false | 複雑なデフォルト式の場合、input_format_defaults_for_omitted_fields も有効にする必要があります。 |
output_format_json_quote_64bit_integers | JSON 出力フォーマットで 64 ビット整数の引用を制御します。 | true | |
output_format_json_quote_64bit_floats | JSON 出力フォーマットで 64 ビット浮動小数点数の引用を制御します。 | false | |
output_format_json_quote_denormals | JSON 出力フォーマットで '+nan'、'-nan'、'+inf'、'-inf' の出力を有効にします。 | false | |
output_format_json_quote_decimals | JSON 出力フォーマットで小数の引用を制御します。 | false | |
output_format_json_escape_forward_slashes | JSON 出力フォーマットで文字列出力のスラッシュをエスケープするかどうかを制御します。 | true | |
output_format_json_named_tuples_as_objects | 名前付きタプルカラムを JSON オブジェクトとしてシリアライズします。 | true | |
output_format_json_array_of_rows | JSONEachRow(Compact) フォーマットで全行の JSON 配列を出力します。 | false | |
output_format_json_validate_utf8 | JSON 出力フォーマットで UTF-8 シーケンスの検証を有効にします(JSON/JSONCompact/JSONColumnsWithMetadata フォーマットには影響しないため、常に utf8 の検証が行われます)。 | false |