Apache spark 具有字符串分区键与整数分区键的配置单元/Impala性能

Apache spark 具有字符串分区键与整数分区键的配置单元/Impala性能,apache-spark,hive,impala,Apache Spark,Hive,Impala,分区键是否建议使用数字列?当我们对数值列分区和字符串列分区执行select查询时,会有任何性能差异吗?不,没有这样的建议。考虑一下: 问题是,配置单元中的分区表示是一个文件夹,其名称类似于'key=value',也可以是'value',但无论如何,它是字符串文件夹名称。因此,它被存储为字符串,并在读/写期间转换。分区键值未打包在数据文件中且未压缩 由于map reduce和Impalla的分布式/并行特性,您永远不会注意到查询处理性能的差异。此外,所有数据都将被序列化以在处理阶段之间传递,然后再

分区键是否建议使用数字列?当我们对数值列分区和字符串列分区执行select查询时,会有任何性能差异吗?

不,没有这样的建议。考虑一下: 问题是,配置单元中的分区表示是一个文件夹,其名称类似于
'key=value'
,也可以是
'value'
,但无论如何,它是字符串文件夹名称。因此,它被存储为字符串,并在读/写期间转换。分区键值未打包在数据文件中且未压缩

由于map reduce和Impalla的分布式/并行特性,您永远不会注意到查询处理性能的差异。此外,所有数据都将被序列化以在处理阶段之间传递,然后再次反序列化并转换为某种类型,对于同一查询,这种情况可能会发生多次

分布式处理和序列化/反序列化数据会产生大量开销。实际上,只有数据的大小才重要。表越小(文件越大),工作越快。但是,通过限制类型并不能提高性能

用作分区键的大字符串值可能会影响元数据数据库的性能,正在处理的分区数也可能会影响性能。同样的:这里只关心数据的大小,而不关心类型


1,0
可以比
的“是”、“否”更好,这仅仅是因为尺寸。在许多情况下,压缩和并行可以使这种差异变得微不足道

好吧,如果你查阅官方的黑斑羚文档,情况会有所不同

我将粘贴文档中的部分,而不是详细说明,因为我认为它非常好地说明了这一点:

“虽然使用字符串列作为分区键可能很方便,即使这些列包含数字,但为了性能和可扩展性,在实际情况下,最好使用数字列作为分区键。尽管在这两种情况下底层HDFS目录名可能相同,但如果将分区键列(如年、月、日等)声明为INT、SMALLINT等,则分区键列的内存存储更紧凑,计算速度更快。”


参考:

当我们将数据写入这些表时,我认为分区是一种分组查询。分组查询在iIntger上的执行速度将快于字符串。从这个角度考虑任何问题。@Achyuth例如,GUID vs Int在分组方式和联接方面都没有区别。因为高度并行,而且它正在被序列化/反序列化使用http进行序列化和传输。Map reduce并行执行在性能上增加了太多的随机性,以至于您无法在每次运行中重复相同结果的实验。如果您查看文档的分区部分,它会说,“分区列的数据类型对所需存储没有显著影响,请原因这些列中的值不存储在数据文件中,而是在HDFS目录名中表示为字符串。“链接-正确,它对HDFS上所需的存储没有多大影响,但如上所述,如果您有多个分区,它会影响内存中的存储,从而影响性能。