Hive 如何快速拉取大批量数据
我们一个个问题来,第1个,如何写临时表问题:我们可以选择先创建一个临时表,然后再使用insert into select ... from ... 的方式写入,但这种方式非常费力,首先你得固化下临时表的数据结构,其次你要处理多次写入问题。看起来不是最好的办法。幸好,hive中或者相关数据库产品都提供了另一种更方便的建临时表的方法: create table xxx as select ... from ... 你只需要使用一个语句就可以将结果写入到临时表了。但需要注意的是,我们创建时,需要指定好我们需要的格式,否则最终结果也许不是我们想要的,比如我们需要使用','分隔数据而非tab, 我们需要使用 text 形式的数据,而非压缩的二进制格式。 以下是个使用样例: -- 外部使用 create table 包裹 CREATE TABLE tmp_2020110145409001 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE as -- 具体的业务select sql select t1.*, t2.* from test t1 left join test2 t2 on t1.id = t2.t_id ; 如此,我们就得到所需的结果了。以上结果,在hive中表现为一个临时表。而其背后则是一个个切分的文件,以','号分隔的文本文件,且会按照hive的默认存储目录存放。(更多具体语法请查询官网资料) 接下来,我们要解决第2个问题:如何将数据取回?这个问题也不难,首先,现在结果已经有了,我们可以一行行地读取返回,就像前面一样。但这时已经没有了数据运算,应该会好很多。但明显还是不够好,我们仍然需要反复的网络通信。我们知道,hive存储的背后,是一个个切分的文件,如果我们能够将该文件直接下载下来,那将会是非常棒的事。不错,最好的办法就是,直接下载hive的数据文件,hive会存储目录下,以类似于 part_0000, part_0001... 之类的文件存放。 那么,我们如何才能下载到这些文件呢?hive是基于hadoop的,所以,很明显我们要回到这个问题,基于hadoop去获取这些文件。即 hdfs 获取,命令如下: (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |