将本地文本文件上传到HDFS上,然后导入hive/impala对应表中

By | 2019年2月2日

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/www_sg_com/article/details/74673945

1.本地文本文件上传前的准备

将文本保存为”uft-8″格式,并用”|”进行字段间的分割(个人习惯,可以选用其它符号,但要避免和编程语言产生冲突,Hive默认的字段分隔符为ascii码的控制符\001)。

2.将文本文件通过Xshell上传到HDFS上

(1)首先要新建(Alt+N)一个连接,主要填写主机IP,其他根据自己的需要填写。确定之后,打开(Alt+O)刚刚建立的连接,输入用户名和密码,这样就连上了你的服务器了。

(2)新建文件传输(Ctrl+Alt+F),将你的本地文本文件复制到相应的文件夹中,比如我将tbl_adrs_code.txt放在了/home/sjz/dataclean/data下。

(3)输入HDFS命令并执行:

hdfs dfs -put /home/sjz/dataclean/data/tbl_adrs_code.txt /data_clean

(/home/sjz/dataclean/data/tbl_adrs_code.txt是输入文件的路径,data_clean是dhs上的目标文件夹,文件夹需要建好哦,在目标文件夹前要”/”,不然会出错:put:’data_clean’:No such file or directory)此时你的文件已经复制到dfs上了。

3.在hive/impala上建立对应的表

CREATE TABLE tbl_adrs_code(adrs_id STRING, adrs STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'

4.将HDFS的数据导入相应的表中

LOAD DATA INPATH '/data_clean/tbl_adrs_code.txt' INTO TABLE tbl_code_province

(data_clean/tbl_code_province.txt是文件在HDFS上的路径)

问题:通过以上方式建表,文件的第一行的第一个字段可能会出现特殊符号‘·’,具体原因一直没有闹清楚。所以,可以在文件第一列作为序号类使用,或用相关语句修改

INSERT OVERWRITE TABLE tbl_adrs_code SELECT CASE WHEN adrs_is = ' ·11' THEN '11' ELSE arse_id END AS adrs_id, adrs FROM tbl_adrs_code

吐舌头处女作,大家多指点

发表评论