insert、load、put向表中插入数据

本文意在记录insert、load、put插入数据后,对元数据TABLE_PARAMS中numFiles、numRows的影响。

1. insert

1)本身插入时会走MapReduce程序
2)对元数据TABLE_PARAMS中numFiles、numRows都会相应改变数值(通过计数器记录)
3)所以用count(*)查询记录时,不再走MapReduce程序,直接读取元数据TABLE_PARAMS中numRows数值

2. put

1)这个命令和hive没什么关系,只是单纯上传文件到HDFS,当然不会走MapReduce程序
2)对元数据TABLE_PARAMS中numFiles、numRows数值无改变和影响
3)用count(*)查询记录时,也不走MapReduce程序,直接读取元数据TABLE_PARAMS中numRows数值,所以读到的数值是不准确的(因为上传时不走MapReduce,无计数器记录)。但select STAR语句还是查得到的,客户数count()就会不准

3. load

1)上传文件时不会走MapReduce程序
2)对元数据TABLE_PARAMS中numFiles都会相应改变数值(计算上传几个文件),但因为上传的文件是一个整体,计数器不会走MapReduce计算新上传文件里面有多少行新数据,所以numRows数值无改变
3)所以用count(*)查询记录时,走MapReduce程序,算出numRows数值然后返回,所以数值准确

=>所以尽量用load,不要用put

猜你喜欢

转载自blog.csdn.net/CharlesCFA/article/details/113871076