为啥使用整数类型作为分区键可以最大限度地减少内存使用?

Posted

技术标签:

【中文标题】为啥使用整数类型作为分区键可以最大限度地减少内存使用?【英文标题】:Why using integer type for partition key can minimize memory usage?为什么使用整数类型作为分区键可以最大限度地减少内存使用? 【发布时间】:2020-10-11 07:56:54 【问题描述】:

对分区键列使用最小的适当整数类型。尽管对分区键列使用字符串很诱人, 因为这些值无论如何都会变成 HDFS 目录名称,所以你 可以通过对公共分区使用数值来最小化内存使用量 关键字段,例如 YEAR、MONTH 和 DAY。使用最小整数类型 包含适当范围的值,通常为 TINYINT 月和日,以及年的 SMALLINT。使用 EXTRACT() 函数 从 TIMESTAMP 值中提取单个日期和时间字段,以及 CAST() 将返回值转换为适当的整数类型。

以上段落来自Cloudera。为什么使用整数类型作为分区键可以最小化内存使用?就因为 HDFS 文件名?

【问题讨论】:

这是 cloudera 的分区部分 - 分区列的数据类型对所需的存储没有显着影响,因为这些列的值不存储在数据文件中,而是存储在数据文件中表示为 HDFS 目录名称中的字符串。链接docs.cloudera.com/documentation/enterprise/5-9-x/topics/… 我可以看到您的来源,但我认为字符串或 int 键之间应该没有区别。您也可以看到这个 stackoverfow 链接。我个人的经验没有区别。 ***.com/questions/52082114/… 【参考方案1】:

分区键是否为 int 和 string 无关紧要 - 存储方式相同。但它在 SQL 的内存处理中会更好。与字符串相比,Int 总是表现得更好。因此,如果您有很多分区,SQL 会更好地执行,请使用分区键作为 int。

【讨论】:

好的,非常感谢。我误解了“内存使用量”的意思,应该是指执行SQL所使用的内存。

以上是关于为啥使用整数类型作为分区键可以最大限度地减少内存使用?的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种好方法可以最大限度地减少 Google Maps Roads API 的负载?

持续唤醒和睡眠以最大限度地减少 Linux 上的功耗?

将板安装到可用长度的算法,最大限度地减少浪费

最大限度地减少 Salesforce Streaming API 和 Heroku Connect 之间的延迟

javascript 隐藏文档正文有助于最大限度地减少闪烁

Data Partitioning Guidance