ClickHouse 官方文档:处理 JSON 数据 (2/2)

图片

本文字数:15445;估计阅读时间:39分钟

作者: ClickHouse team

本文在公众号【ClickHouseInc】首发

ClickHouse 官方文档:处理 JSON 数据 (1/2)

导出 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 数据  

            导出 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]

            该格式采用紧凑的 JSON 表示,并附加两行头部信息,分别包含列名和列类型。此格式非常适合导入到其他 ClickHouse 实例或应用程序。

            将 JSON 数据导出到文件  

            可以使用 INTO OUTFILE 子句将 JSON 数据保存到文件中:

            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 在 2 秒内成功导出了约 3700 万条记录至 JSON 文件。此外,还可以通过 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

            处理其他 JSON 格式  

            在前面的示例中,我们使用 JSONEachRow(NDJSON)格式加载 JSON 数据。以下是其他常见 JSON 格式的加载方法。

            JSON 对象数组  <

            评论
            成就一亿技术人!
            拼手气红包6.0元
            还能输入1000个字符
             
            红包 添加红包
            表情包 插入表情
             条评论被折叠 查看
            添加红包

            请填写红包祝福语或标题

            红包个数最小为10个

            红包金额最低5元

            当前余额3.43前往充值 >
            需支付:10.00
            成就一亿技术人!
            领取后你会自动成为博主和红包主的粉丝 规则
            hope_wisdom
            发出的红包
            实付
            使用余额支付
            点击重新获取
            扫码支付
            钱包余额 0

            抵扣说明:

            1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
            2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

            余额充值