JSONEachRow (NDJSON) を使用することを前提にしています。このフォーマットでは、各JSON行のキーをカラムとして読み込みます。たとえば、次のとおりです。
JSON をオブジェクトとして読み込む
JSONEachRow が改行区切りの JSON をどのように読み込むかを示しました。各行は個別のオブジェクトとして読み込まれ、テーブルの 1 行に対応付けられ、各キーは 1 つのカラムに対応します。これは、各カラムの型が 1 つに定まっていて、JSON の構造が予測しやすい場合に最適です。
一方、JSONAsObject は各行を 1 つの JSON オブジェクトとして扱い、JSON 型の単一カラムに格納します。そのため、ネストされた JSON ペイロードや、キーが動的で複数の型を取りうるケースにより適しています。
行単位で insert する場合は JSONEachRow を使用し、柔軟または動的な JSON データを保存する場合は JSONAsObject を使用してください。
上記の例と対比すると、次のクエリでは同じデータを各行ごとに 1 つの JSON オブジェクトとして読み込みます。
JSONAsObject は、たとえば単一の JSONオブジェクト・カラムを使ってテーブルに行を挿入する場合に便利です。
JSONAsObject フォーマットは、オブジェクトの構造が一貫していない場合に、改行区切りの JSON を読み込む際にも役立ちます。たとえば、あるキーの型が行によって異なる場合です (文字列のこともあれば、オブジェクトのこともあります) 。このような場合、ClickHouse は JSONEachRow では安定したスキーマを推論できず、JSONAsObject を使うと、厳密な型チェックを行わずにデータを取り込み、各 JSON 行全体を 1 つのカラムに格納できます。たとえば、次の例では JSONEachRow が失敗することがわかります。
JSON 型が同じサブカラムに複数の型を許容するため、JSONAsObject を使用できます。
JSONオブジェクトの配列
JSONEachRow フォーマットを使用できます (list.json ファイルからデータを挿入します) :
JSON オブジェクトのキー
JSONObjectEachRowフォーマットを使用して、この種のデータを読み込めます:
親オブジェクトのキー値を指定する
file()関数を使って、元のJSONファイルからどのデータが読み込まれるのかを確認できます。
id カラムにキーの値が正しく格納されていることに注目してください。
JSON配列
JSONCompactEachRow フォーマットを使用します。
JSON配列から個々のカラムをインポートする
JSONColumns フォーマットを使用します。
JSONCompactColumnsフォーマットによる、よりコンパクトな形式もサポートされています。
JSON オブジェクトをパースせずに保存する
String (または JSON) カラムに保存したいケースもあります。これは、構造が異なる JSON オブジェクトのリストを扱う場合に便利です。たとえば、このファイル には、1 つの親配列の中に複数の異なる JSON オブジェクトが含まれています。
JSONAsString フォーマットを使って、ファイルからこのテーブルにデータを読み込めます。
JSONAsString は、1行ごとに1つのJSONオブジェクトを含む形式のファイル (通常は JSONEachRow フォーマットで使用) であれば、問題なく動作します。
ネストされたオブジェクトのスキーマ
Array、JSON、Tuple) を使用してデータを読み込むことができます。
ネストされたJSONオブジェクトへのアクセス
不明なカラムをスキップする
month カラムのないテーブルに元のファイルをインポートしてみましょう。
BSON
out.bson ファイルに書き出されます。