メインコンテンツへスキップ
メインコンテンツへスキップ

JSON のエクスポート

インポートに使用可能なほとんどの 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