JSONObjectEachRow
| 入力 | 出力 | エイリアス |
|---|---|---|
| ✔ | ✔ |
説明
この形式では、すべてのデータは 1 つの JSON オブジェクトとして表され、そのオブジェクト内で各行が個別のフィールドとして表現されます。これは JSONEachRow 形式と同様です。
使用例
基本的な例
次のような JSON データがあるとします:
オブジェクト名をカラム値として使用するには、専用の設定 format_json_object_each_row_column_for_object_name を利用できます。
この設定には、結果オブジェクト内の各行に対して JSON のキーとして使用するカラム名を指定します。
出力
テーブル test に 2 つのカラムがあるとします。
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 を指定してデータを挿入すると、input_format_defaults_for_omitted_fields = 0 の場合と比べて、ClickHouse はより多くの計算リソースを消費します。
データの選択
例として、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 | NamedTuple 型の列を 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 入力フォーマットのスキーマ推論時には、NULL または空のオブジェクト/配列だけが含まれるキーには型 String を使用します。 | true | |
input_format_json_defaults_for_missing_elements_in_named_tuple | 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 出力形式での 10 進数のクォート方法を制御します。 | false | |
output_format_json_escape_forward_slashes | JSON 出力形式で、文字列中のスラッシュ (/) をエスケープするかどうかを制御します。 | true | |
output_format_json_named_tuples_as_objects | NamedTuple 型の列を JSON オブジェクトとしてシリアル化します。 | true | |
output_format_json_array_of_rows | すべての行を JSONEachRow(Compact) 形式の JSON 配列として出力します。 | false | |
output_format_json_validate_utf8 | JSON 出力フォーマットでの UTF-8 シーケンス検証を有効にします(ただし JSON/JSONCompact/JSONColumnsWithMetadata フォーマットには影響しません。これらは常に UTF-8 を検証します)。 | false |