メインコンテンツへスキップ
入力出力エイリアス

説明

このフォーマットでは、すべてのデータが1つのJSONオブジェクトとして表現され、各行は JSONEachRow フォーマットと同様に、そのオブジェクト内の個別のフィールドとして表されます。

使用例

基本例

次の JSON があるとします。
{
  "row_1": {"num": 42, "str": "hello", "arr":  [0,1]},
  "row_2": {"num": 43, "str": "hello", "arr":  [0,1,2]},
  "row_3": {"num": 44, "str": "hello", "arr":  [0,1,2,3]}
}
オブジェクト名をカラムの値として使用するには、特別な設定 format_json_object_each_row_column_for_object_name を使用できます。 この設定の値にはカラム名を指定します。指定したカラム名は、生成されるオブジェクト内で各行の JSON キーとして使用されます。

出力

test というテーブルに 2 つのカラムがあるとしましょう。
┌─object_name─┬─number─┐
│ first_obj   │      1 │
│ second_obj  │      2 │
│ third_obj   │      3 │
└─────────────┴────────┘
JSONObjectEachRow フォーマットで出力し、format_json_object_each_row_column_for_object_name 設定を使用します。
Query
SELECT * FROM test SETTINGS format_json_object_each_row_column_for_object_name='object_name'
Response
{
    "first_obj": {"number": 1},
    "second_obj": {"number": 2},
    "third_obj": {"number": 3}
}

入力

前の例の出力を data.json という名前のファイルに保存したとします:
Query
SELECT * FROM file('data.json', JSONObjectEachRow, 'object_name String, number UInt64') SETTINGS format_json_object_each_row_column_for_object_name='object_name'
Response
┌─object_name─┬─number─┐
│ first_obj   │      1 │
│ second_obj  │      2 │
│ third_obj   │      3 │
└─────────────┴────────┘
スキーマ推論にも利用できます:
Query
DESCRIBE file('data.json', JSONObjectEachRow) SETTING format_json_object_each_row_column_for_object_name='object_name'
Response
┌─name────────┬─type────────────┐
│ object_name │ String          │
│ number      │ Nullable(Int64) │
└─────────────┴─────────────────┘

データの挿入

Query
INSERT INTO UserActivity FORMAT JSONEachRow {"PageViews":5, "UserID":"4324182021466249494", "Duration":146,"Sign":-1} {"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1}
ClickHouse では次のことが可能です。
  • オブジェクト内のキー・バリューのペアは、どのような順序でも指定できます。
  • 一部の値は省略できます。
ClickHouse は、要素間の空白やオブジェクトの後のカンマを無視します。すべてのオブジェクトを1行で渡すこともできます。改行で区切る必要はありません。

省略された値の処理

ClickHouse は、省略された値を対応するdata typesのデフォルト値に置き換えます。 DEFAULT expr が指定されている場合、ClickHouse は input_format_defaults_for_omitted_fields 設定に応じて、異なる置き換えルールを使用します。 次のテーブルを考えます。
Query
CREATE TABLE IF NOT EXISTS example_table
(
    x UInt32,
    a DEFAULT x * 2
) ENGINE = Memory;
  • input_format_defaults_for_omitted_fields = 0 の場合、xa のデフォルト値はいずれも 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テーブルを見てみましょう。
┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐
│ 4324182021466249494 │         5 │      146 │   -1 │
│ 4324182021466249494 │         6 │      185 │    1 │
└─────────────────────┴───────────┴──────────┴──────┘
クエリ SELECT * FROM UserActivity FORMAT JSONEachRow は次の結果を返します。
{"UserID":"4324182021466249494","PageViews":5,"Duration":146,"Sign":-1}
{"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1}
JSON フォーマットとは異なり、無効な UTF-8 シーケンスは置換されません。値は JSON と同じ方法でエスケープされます。
文字列には任意のバイト列を出力できます。テーブル内のデータを情報を失うことなく JSON としてフォーマットできることが確実な場合は、JSONEachRow フォーマットを使用してください。

Nested 構造の使用

Nested データ型のカラムを持つテーブルがある場合、同じ構造の JSON データを挿入できます。この機能は、input_format_import_nested_json 設定を有効にすることで使用できます。 たとえば、次のテーブルを考えてみましょう。
Query
CREATE TABLE json_each_row_nested (n Nested (s String, i Int32) ) ENGINE = Memory
Nested データ型の説明にあるとおり、ClickHouse ではネスト構造の各要素を個別のカラム (このテーブルでは n.sn.i) として扱います。データは次のように挿入できます。
Query
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n.s": ["abc", "def"], "n.i": [1, 23]}
階層的なJSONオブジェクトとしてデータを挿入するには、input_format_import_nested_json=1を設定します。
{
    "n": {
        "s": ["abc", "def"],
        "i": [1, 23]
    }
}
この設定がない場合、ClickHouse は例外をスローします。
Query
SELECT name, value FROM system.settings WHERE name = 'input_format_import_nested_json'
Response
┌─name────────────────────────────┬─value─┐
│ input_format_import_nested_json │ 0     │
└─────────────────────────────────┴───────┘
Query
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": {"s": ["abc", "def"], "i": [1, 23]}}
Response
Code: 117. DB::Exception: Unknown field found while parsing JSONEachRow format: n: (at row 1)
Query
SET input_format_import_nested_json=1
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": {"s": ["abc", "def"], "i": [1, 23]}}
SELECT * FROM json_each_row_nested
Response
┌─n.s───────────┬─n.i────┐
│ ['abc','def'] │ [1,23] │
└───────────────┴────────┘

フォーマット設定

設定説明デフォルト注記
input_format_import_nested_jsonネストされたJSONデータをネストされたテーブルにマッピングします (JSONEachRowフォーマットで機能します) 。false
input_format_json_read_bools_as_numbersJSON入力フォーマットで、Bool値を数値として解析できるようにします。true
input_format_json_read_bools_as_stringsJSON入力フォーマットで、bool値を文字列として解析できるようにします。true
input_format_json_read_numbers_as_stringsJSON入力フォーマットで、数値を文字列として解析できるようにします。true
input_format_json_read_arrays_as_stringsJSON入力フォーマットで、JSON配列を文字列として解析できるようにします。true
input_format_json_read_objects_as_stringsJSON入力フォーマットで、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_stringsJSON input formats でのスキーマ推論時に、Null または空のオブジェクト/配列のみを含むキーには String 型を使用します。true
input_format_json_defaults_for_missing_elements_in_named_tuplenamed tuple のパース時に、JSON object で欠落している要素にデフォルト値を挿入します。true
input_format_json_ignore_unknown_keys_in_named_tuplenamed tuple について、JSON object 内の不明なキーを無視します。false
input_format_json_compact_allow_variable_number_of_columnsJSONCompact/JSONCompactEachRow フォーマットで可変数のカラムを許可し、余分なカラムは無視して、不足しているカラムにはデフォルト値を使用します。false
input_format_json_throw_on_bad_escape_sequenceJSON 文字列に不正なエスケープシーケンスが含まれている場合は例外を発生させます。無効にすると、不正なエスケープシーケンスはデータ内にそのまま残ります。true
input_format_json_empty_as_defaultJSON 入力内の空のフィールドをデフォルト値として扱います。false.複雑なデフォルト式の場合は、input_format_defaults_for_omitted_fields も有効にする必要があります。
output_format_json_quote_64bit_integersJSON出力フォーマットで64ビット整数を引用符で囲んで出力するかどうかを制御します。true
output_format_json_quote_64bit_floatsJSON出力フォーマットで64ビット浮動小数点数を引用符で囲んで出力するかどうかを制御します。false
output_format_json_quote_denormalsJSON出力フォーマットで’+nan’、‘-nan’、‘+inf’、‘-inf’を出力できるようにします。false
output_format_json_quote_decimalsJSON 出力フォーマットで小数を引用符で囲むかどうかを制御します。false
output_format_json_escape_forward_slashesJSON 出力フォーマットで文字列出力のスラッシュをエスケープするかどうかを制御します。true
output_format_json_named_tuples_as_objectsnamed tuple のカラムを JSON object としてシリアライズします。true
output_format_json_array_of_rowsJSONEachRow(Compact) フォーマットで、すべての行を JSON array として出力します。false
output_format_json_validate_utf8JSON 出力フォーマットにおける UTF-8 シーケンスの検証を有効にします (JSON/JSONCompact/JSONColumnsWithMetadata フォーマットには影響しない点に注意してください。これらは常に UTF-8 を検証します) 。false
最終更新日 2026年6月10日