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

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 rows in set. Elapsed: 2.220 sec. Processed 36.84 million rows, 1.27 GB (16.60 million rows/s., 572.47 MB/s.)

ClickHouseは、約3700万レコードをJSONファイルにエクスポートするのにわずか2秒かかりました。また、圧縮をオンザフライで有効にするためにCOMPRESSION句を使用してエクスポートすることもできます:

SELECT * FROM sometable INTO OUTFILE 'out.json.gz' FORMAT JSONEachRow
36838935 rows in set. Elapsed: 22.680 sec. Processed 36.84 million rows, 1.27 GB (1.62 million rows/s., 56.02 MB/s.)

達成するにはより多くの時間がかかりますが、はるかに小さな圧縮ファイルが生成されます:

2.2G    out.json
576M    out.json.gz