前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ClickHouse JSON 格式输出大类型数字变成字符串

ClickHouse JSON 格式输出大类型数字变成字符串

作者头像
charmer
发布2024-05-15 21:14:52
1310
发布2024-05-15 21:14:52
举报
文章被收录于专栏:编程大主教编程大主教

使用 JSON 类格式输出 ClickHouse 大类型数字(比如 Int64 甚至更大的 Int128)时,会发现输出的数字变成字符串:

代码语言:javascript
复制
CREATE TABLE test (id Int64) ENGINE=Memory;

INSERT INTO test VALUES (1234567890);

SELECT * FROM test FORMAT JSONEachRow;

结果如下:

代码语言:javascript
复制
{"id":"1234567890"}

这是因为 ClickHouse 为了使 JSON 格式兼容 JavaScript,将数字类型全部用 double 存储。double 表达范围比 Int64 小,因此超出 double 表达范围的数字无法表达,为了解决这个问题有三种方法 [1]

  1. 统一使用字符串表达大数字
  2. 丢弃无法表达的大数字
  3. 可以表达的用 double,不可以的用字符串

为了简单起见,ClickHouse 采用第一种。第二种会导致表达能力受限;第三种会导致未定义行为。

经过 issue 要求,ClickHouse 实现一个配置开关以控制是否采用第二种方式。[2]

user.xml 中每个用户配置项里配置 [3]

代码语言:javascript
复制
<output_format_json_quote_64bit_integers>0</output_format_json_quote_64bit_integers>

即可。

  1. https://github.com/ClickHouse/ClickHouse/issues/114#issuecomment-248190752 ↩︎
  2. https://github.com/ClickHouse/ClickHouse/pull/126 ↩︎
  3. https://clickhouse.com/docs/en/operations/settings/formats#output_format_json_quote_64bit_integers ↩︎
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档