gpt4 book ai didi

hadoop - Apache hive : LOAD DATA vs INSERT OVERWRITE OUTPUT FILE SIZE

转载 作者:可可西里 更新时间:2023-11-01 15:13:55 25 4
gpt4 key购买 nike

我正在使用 Apache Hive,我不明白为什么如果我使用 INSERT OVERWRITE 与 LOAD 加载数据,表的大小会加倍。问题说明如下:

我创建了一个表项从 item.dat 加载数据(大约 28MB)在 Azure 中发生的是文件 item.dat 将被移动到 hive/warehouse 并且当然大小保持不变

现在,如果我创建另一个与 item 相同的表 item2,然后使用以下命令将数据从 item 加载到 item2:

INSERT OVERWRITE TABLE item2
SELECT * FROM item

表 item2 的大小是 item 的两倍(大约 55MB)

为什么会这样?有什么办法可以避免吗?

附言。这只是为了说明问题。在实践中,我对预连接表很感兴趣,但是 INSERT OVERWRITE 大大增加了连接表的大小(实际问题:4GB 与 28MB 连接得到 18GB)

最佳答案

解开了谜团:)

问题是由表的某些字段的类型 char 造成的。

当使用 INSERT OVERWRITE 填充表时,对于所有 char(50) 类型的字段,即使值小于 50,它也会自动添加空字符来填充为 char 数据类型保留的整个空间。而这实际上就是 char 和 varchar 的主要区别。后者将根据存储的值占用可变数量的空间。但是出现的另一个问题是为什么在使用 LOAD 时不会发生这种情况

但是,至少我知道它发生的原因并设法通过将 char 更改为 varchar 数据类型来避免它...所以请注意数据类型;)

关于hadoop - Apache hive : LOAD DATA vs INSERT OVERWRITE OUTPUT FILE SIZE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com