インポートに使用可能なほとんどの JSON 形式は、エクスポートにも使用できます。最も一般的なのは JSONEachRow です。
SELECT * FROM sometable FORMAT JSONEachRow
{"path":"Bob_Dolman","month":"2016-11-01","hits":245}
{"path":"1-krona","month":"2017-01-01","hits":4}
{"path":"Ahmadabad-e_Kalij-e_Sofla","month":"2017-01-01","hits":3}
または、列名を出力せずにディスク使用量を節約するために、JSONCompactEachRow を使用できます:
SELECT * FROM sometable FORMAT JSONCompactEachRow
["Bob_Dolman", "2016-11-01", 245]
["1-krona", "2017-01-01", 4]
["Ahmadabad-e_Kalij-e_Sofla", "2017-01-01", 3]
データ型を文字列として出力する
ClickHouse はデータ型を尊重し、標準に従って JSON をエクスポートします。ただし、すべての値を文字列としてエンコードする必要がある場合は、JSONStringsEachRow 形式を使用できます。
SELECT * FROM sometable FORMAT JSONStringsEachRow
{"path":"Bob_Dolman","month":"2016-11-01","hits":"245"}
{"path":"1-krona","month":"2017-01-01","hits":"4"}
{"path":"Ahmadabad-e_Kalij-e_Sofla","month":"2017-01-01","hits":"3"}
これにより、hits 数値型カラムは文字列としてエンコードされます。文字列としてのエクスポートはすべての JSON* フォーマットでサポートされているため、JSONStrings\* および JSONCompactStrings\* フォーマットを利用してください。
SELECT * FROM sometable FORMAT JSONCompactStringsEachRow
["Bob_Dolman", "2016-11-01", "245"]
["1-krona", "2017-01-01", "4"]
["Ahmadabad-e_Kalij-e_Sofla", "2017-01-01", "3"]
多くのアプリケーションで一般的に利用される JSON 形式では、結果データだけでなく、列の型やクエリの統計情報もエクスポートされます。
SELECT * FROM sometable FORMAT JSON
{
"meta":
[
{
"name": "path",
"type": "String"
},
...
],
"data":
[
{
"path": "Bob_Dolman",
"month": "2016-11-01",
"hits": 245
},
...
],
"rows": 3,
"statistics":
{
"elapsed": 0.000497457,
"rows_read": 3,
"bytes_read": 87
}
}
JSONCompact フォーマットは同じメタデータを出力しますが、データ本体にはよりコンパクトな形式を使用します:
SELECT * FROM sometable FORMAT JSONCompact
{
"meta":
[
{
"name": "path",
"type": "String"
},
...
],
"data":
[
["Bob_Dolman", "2016-11-01", 245],
["1-krona", "2017-01-01", 4],
["Ahmadabad-e_Kalij-e_Sofla", "2017-01-01", 3]
],
"rows": 3,
"statistics":
{
"elapsed": 0.00074981,
"rows_read": 3,
"bytes_read": 87
}
}
すべての値を文字列としてエンコードするには、JSONStrings または JSONCompactStrings バリアントの使用を検討してください。
JSON データと構造をエクスポートするコンパクトな方法
データ本体とその構造をより効率的に取得するには、JSONCompactEachRowWithNamesAndTypes フォーマットを使用します。
SELECT * FROM sometable FORMAT JSONCompactEachRowWithNamesAndTypes
["path", "month", "hits"]
["String", "Date", "UInt32"]
["Bob_Dolman", "2016-11-01", 245]
["1-krona", "2017-01-01", 4]
["Ahmadabad-e_Kalij-e_Sofla", "2017-01-01", 3]
これは、先頭に列名と型を含む 2 行のヘッダー行を付加したコンパクトな JSON 形式を使用します。この形式は、その後、別の ClickHouse インスタンス(または他のアプリケーション)にデータを取り込むために使用できます。
JSON をファイルにエクスポートする
エクスポートした JSON データをファイルに保存するには、INTO OUTFILE 句を使用できます。
SELECT * FROM sometable INTO OUTFILE 'out.json' FORMAT JSONEachRow
36838935行が取得されました。経過時間: 2.220秒。処理済み: 3684万行、1.27 GB (1660万行/秒、572.47 MB/秒)
ClickHouse は約 3,700 万件のレコードを JSON ファイルにエクスポートするのに、わずか 2 秒しかかかりませんでした。COMPRESSION 句を使用して、その場で圧縮しながらエクスポートすることもできます。
SELECT * FROM sometable INTO OUTFILE 'out.json.gz' FORMAT JSONEachRow
36838935行のセット。経過時間: 22.680秒。処理済み: 3684万行、1.27 GB (162万行/秒、56.02 MB/秒)
完了までに時間はかかりますが、圧縮後のファイルサイズは大幅に小さくなります。
2.2G out.json
576M out.json.gz