メインコンテンツまでスキップ
メインコンテンツまでスキップ

JSONObjectEachRow

入力出力エイリアス

説明

このフォーマットでは、すべてのデータが単一の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は要素間のスペースとオブジェクト後のカンマを無視します。すべてのオブジェクトを一行で渡すことができます。行の改行で区切る必要はありません。

省略された値の処理

ClickHouseは省略された値を対応するデータ型のデフォルト値で置き換えます。

DEFAULT expr が指定される場合、ClickHouseは設定 input_format_defaults_for_omitted_fieldsに応じて異なる置換ルールを使用します。

次のテーブルを考えてみてください。

  • input_format_defaults_for_omitted_fields = 0 の場合、xa のデフォルト値は 0UInt32データ型のデフォルト値)になります。
  • 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.sn.i)。データを次のように挿入できます。

階層的なJSONオブジェクトとしてデータを挿入するには、input_format_import_nested_json=1を設定します。

この設定がない場合、ClickHouseは例外をスローします。

フォーマット設定

設定説明デフォルトノート
input_format_import_nested_jsonネストされたJSONデータをネストされたテーブルにマップします(JSONEachRowフォーマットでも機能します)。false
input_format_json_read_bools_as_numbersJSON入力フォーマットでブール値を数値として解析することを許可します。true
input_format_json_read_bools_as_stringsJSON入力フォーマットでブール値を文字列として解析することを許可します。true
input_format_json_read_numbers_as_stringsJSON入力フォーマットで数値を文字列として解析することを許可します。true
input_format_json_read_arrays_as_stringsJSON入力フォーマットで配列を文字列として解析することを許可します。true
input_format_json_read_objects_as_stringsJSON入力フォーマットでオブジェクトを文字列として解析することを許可します。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入力フォーマットのスキーマ推論中に、すべての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_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_objects名前付きタプルカラムをJSONオブジェクトとしてシリアライズします。true
output_format_json_array_of_rowsJSONEachRow(Compact)フォーマットで、すべての行のJSON配列を出力します。false
output_format_json_validate_utf8JSON出力フォーマットにおいてUTF-8シーケンスの検証を有効にします(注:JSON/JSONCompact/JSONColumnsWithMetadataフォーマットには影響しません。これらは常にutf8を検証します)。false