JSONObjectEachRow
Input | Output | Alias |
---|---|---|
✔ | ✔ |
説明
このフォーマットでは、すべてのデータが単一の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
を使用してデータを挿入する際、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入力フォーマットにおいてNullまたは空のオブジェクト/配列のみを含むキーに対して、スキーマ推論中に型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フォーマットには影響しないことに注意してください。常にUTF-8がバリデートされます)。 | false |