扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要为大家展示了“如何在Hive中使用Load语句加载数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何在Hive中使用Load语句加载数据”这篇文章吧。
创新互联服务项目包括浚县网站建设、浚县网站制作、浚县网页制作以及浚县网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,浚县网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到浚县省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!Hive Load语句不会在加载数据的时候做任何转换工作,而是纯粹的把数据文件复制/移动到Hive表对应的地址。语法格式如下:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename \ [PARTITION (partcol1=val1, partcol2=val2 ...)] LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename \ [PARTITION (partcol1=val1, partcol2=val2 ...)] \ [INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)
几点说明:
如果命令中带有LOCAL,说明从本地文件系统加载数据,文件路径可以是相对路径,也可以是绝对路径。在这种情况下,首先将文件从本地复制到hdfs相应的位置,然后移动到hive表格中,这个时候原始数据文件是存在于Hive表之下的路径下。
如果不包含LOCAL关键字,则移动HDFS文件到目标表中。
filepath 可以是一个相对路径,也可以是一个绝对路径。可以是一个文件,也可以是一个文件夹目录。如果是一个目录,这个时候文件夹下的所有文件都会被加载。
命令中如果带有overwirte,代表加载数据之前会清空目标表格,否则就是追加的方式。
如果表是分区表则必须指定PARTITION从句,否则会报如下错误:
FAILED:SemanticException [Error 10062]: Need to specify partition columns because the destination table is partitioned
创建如下的表结构(员工表)
create table emp (empno int, ename string, job string, mgr int, hiredate string, sal int, comm int, deptno int) row format delimited fields terminated by ',';
测试数据如下:(emp.csv)
7369,SMITH,CLERK,7902,1980/12/17,800,0,20 7499,ALLEN,SALESMAN,7698,1981/2/20,1600,300,30 7521,WARD,SALESMAN,7698,1981/2/22,1250,500,30 7566,JONES,MANAGER,7839,1981/4/2,2975,0,20 7654,MARTIN,SALESMAN,7698,1981/9/28,1250,1400,30 7698,BLAKE,MANAGER,7839,1981/5/1,2850,0,30 7782,CLARK,MANAGER,7839,1981/6/9,2450,0,10 7788,SCOTT,ANALYST,7566,1987/4/19,3000,0,20 7839,KING,PRESIDENT,-1,1981/11/17,5000,0,10 7844,TURNER,SALESMAN,7698,1981/9/8,1500,0,30 7876,ADAMS,CLERK,7788,1987/5/23,1100,0,20 7900,JAMES,CLERK,7698,1981/12/3,950,0,30 7902,FORD,ANALYST,7566,1981/12/3,3000,0,20 7934,MILLER,CLERK,7782,1982/1/23,1300,0,10
加载HDFS的数据到Hive的表
load data inpath '/scott/emp.csv' into table emp;
加载本地的数据到Hive的表
load data local inpath '/root/temp/emp.csv' into table emp;
当然我们也可以使用insert语句加载数据。例如,我们创建如下的分区表:
create table emp_part_1 (empno int, ename string, job string, mgr int, hiredate string, sal int, comm int) partitioned by (deptno int) row format delimited fields terminated by ',';
使用insert语句将数据插入到对应的分区上。
插入10号部门的员工数据 insert into table emp_part_1 partition(deptno=10) select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=10; 插入20号部门的员工数据 insert into table emp_part_1 partition(deptno=20) select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=20; 插入30号部门的员工数据 insert into table emp_part_1 partition(deptno=30) select empno,ename,job,mgr,hiredate,sal,comm from emp where deptno=30;
这里我们使用了一个子查询查询出了对应部门的员工数据,再使用insert语句插入到对应的分区上。
以上是“如何在Hive中使用Load语句加载数据”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联-成都网站建设公司行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流