创建hive表和使用Load data指令导入数据的注意事项
来源:互联网 发布:java char数组倒序输出 编辑:程序博客网 时间:2024/05/17 09:02
创建hive表和使用Load data指令导入数据的注意事项
(一)创建hive数据库和表
1.1 类似于MySql创建命令,创建数据库和表,并指定它在hdfs上的存储数据的目录'/hive_hdfs_local_data‘
hive> CREATE DATABASE yyz_workdb;hive> create external table test_user( > user_id int comment 'userID', > user_name string comment 'userName' > ) > ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/hive_hdfs_local_data';
1.1.1 默认记录和字段分隔符:
\n 每行一条记录
^A 分隔列(八进制 \001)
^B 分隔ARRAY或者STRUCT中的元素,或者MAP中多个键值对之间分隔(八进制 \002)
^C 分隔MAP中键值对的“键”和“值”(八进制 \003)
1.1.2 自定义分隔符:
CREATE TABLE test( ……)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\001'COLLECTION ITEMS TERMINATED BY '\002'MAP KEYS TERMINATED BY '\003'LINES TERMINATED BY '\n'
1.1.3 查看信息:
hive> DESCRIBE DATABASE yyz_workdb;OKyyz_workdbhdfs://localhost:9002/user/hive/warehouse/yyz_workdb.dba6USERTime taken: 0.037 seconds, Fetched: 1 row(s)hive> DESCRIBE DATABASE EXTENDED yyz_workdb;OKyyz_workdbhdfs://localhost:9002/user/hive/warehouse/yyz_workdb.dba6USERTime taken: 0.032 seconds, Fetched: 1 row(s)hive> desc test_user;OKuser_id int userIDuser_name string userNameTime taken: 0.069 seconds, Fetched: 2 row(s)1.1.4 分区表:
CREATE TABLE test( ……)PARTITIONED BY ( country STRING ); #分区键和字段不能重复
(二)加载数据,将本地或者hdfs上数据导入hive表
2.1 命令格式如下:
LOAD DATA LOCAL INPATH '/path/to/local/files'OVERWRITE INTO TABLE testPARTITION (country='CHINA')有LOCAL表示从本地文件系统加载(文件会被拷贝到HDFS中)无LOCAL表示从HDFS中加载数据(注意:文件直接被移动!!!而不是拷贝!!! 并且。。文件名都不带改的。。)OVERWRITE 表示是否覆盖表中数据(或指定分区的数据)(没有OVERWRITE 会直接APPEND,而不会滤重!)此外,如果加载同样文件名的文件,会被自动重命名:
(三)测试命令如下:加载数据,将本地或者hdfs上数据导入hive表
1. 建表:创建表,并指定它在hdfs上的存储数据的目录
create external table test_user(user_id int comment 'userID',user_name string comment 'userName' )ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/hive_hdfs_local_data';
2.准备数据:
2.1 在本地创建一个存储数据的文本文件,准备上传,内容如下:
localhost:hdfs_local_data a6$ more user_info.txt 2014001 小王12014002 小李22014003 小明32014004 阿狗42014005 姚明52.2 创建写入追加文件,内容如下:
localhost:result_data a6$ more user_info_overwrite.txt2014006 小王62014007 小李73.本地导入数据:向刚刚创建的空表中导入数据,
hive> LOAD DATA LOCAL INPATH '/Users/a6/Applications/apache-hive-2.3.0-bin/result_data/user_info.txt' INTO TABLE test_user;
3.1 查看结果
3.1.1 查看hive表数据
hive> select * from test_user;OK2014001小王12014002小李22014003小明32014004阿狗42014005姚明5Time taken: 0.161 seconds, Fetched: 5 row(s)3.1.2 查看这个hive表指定的hdfs存储目录
localhost:result_data a6$ hadoop dfs -ls /hive_hdfs_local_dataFound 1 items-rwxr-xr-x 1 a6 supergroup 80 2017-11-04 11:06 /hive_hdfs_local_data/user_info.txtlocalhost:result_data a6$ hadoop dfs -cat /hive_hdfs_local_data/user_info.txt2014001小王12014002小李22014003小明32014004阿狗42014005姚明53.2 为测试不使用overwrite的导入数据时追加模式,并且自动重命名,所以进行再次导入,命令如下:
hive> LOAD DATA LOCAL INPATH '/Users/a6/Applications/apache-hive-2.3.0-bin/result_data/user_info.txt' INTO TABLE test_user;Loading data to table yyz_workdb.test_userOKTime taken: 0.811 seconds3.2.1 查看hive表数据
hive> select * from test_user;OK2014001小王12014002小李22014003小明32014004阿狗42014005姚明52014001小王12014002小李22014003小明32014004阿狗42014005姚明5Time taken: 0.184 seconds, Fetched: 10 row(s)3.2.2 查看hive表存储hdfs目录的变化:
localhost:result_data a6$ hadoop dfs -ls /hive_hdfs_local_dataFound 2 items-rwxr-xr-x 1 a6 supergroup 80 2017-11-04 11:06 /hive_hdfs_local_data/user_info.txt-rwxr-xr-x 1 a6 supergroup 80 2017-11-04 11:18 /hive_hdfs_local_data/user_info_copy_1.txtlocalhost:result_data a6$ hadoop dfs -cat /hive_hdfs_local_data/user_info_copy_1.txt2014001小王12014002小李22014003小明32014004阿狗42014005姚明5从上面可以发现,如果加载同样文件名的文件,会被自动重命名。
3.3 测试使用带overwrite加载本地数据的load data命令:
3.3.1 准备写入追加文件,内容如下:
localhost:result_data a6$ more user_info_overwrite.txt2014006 小王62014007 小李73.3.2 使用带overwrite的load data命令向hive表加载数据
hive> LOAD DATA LOCAL INPATH '/Users/a6/Applications/apache-hive-2.3.0-bin/result_data/user_info_overwrite.txt' OVERWRITE INTO TABLE test_user;Loading data to table yyz_workdb.test_userOKTime taken: 0.53 seconds3.3.3 查看hive表结果
hive> select * from test_user;OK2014006小王62014007小李7Time taken: 0.142 seconds, Fetched: 2 row(s)发现数据库表中的数据被覆盖啦
3.3.4 查看存储hive表的hdfs目录的变化
localhost:result_data a6$ hadoop dfs -ls /hive_hdfs_local_dataFound 1 items-rwxr-xr-x 1 a6 supergroup 32 2017-11-04 11:21 /hive_hdfs_local_data/user_info_overwrite.txtlocalhost:result_data a6$ hadoop dfs -cat /hive_hdfs_local_data/user_info_overwrite.txt2014006小王62014007小李7发现存储hive表的hdfs目录被覆盖啦,
所以不能轻易使用overwrite进行插入数据,因为会覆盖原来已经存储的hive数据呢
4. 下面测试一下将hdfs的文件导入hive数据表。
4.1 准备存储姚导入数据文件的hdfs目录,并上传需要导入hive表的文件
localhost:result_data a6$ hadoop fs -mkdir /hive_input_datalocalhost:result_data a6$ hadoop fs -put user_info.txt /hive_input_data17/11/04 11:34:12 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicablelocalhost:result_data a6$ hadoop dfs -ls /hive_input_dataFound 1 items-rw-r--r-- 1 a6 supergroup 80 2017-11-04 11:34 /hive_input_data/user_info.txt4.2.1 在导入之前首先看一下hive表数据存储目录
localhost:result_data a6$ hadoop dfs -ls /hive_hdfs_local_dataFound 1 items-rwxr-xr-x 1 a6 supergroup 32 2017-11-04 11:21 /hive_hdfs_local_data/user_info_overwrite.txt4.2.2 再看一下hive表现有的数据
hive> select * from test_user;OK2014006小王62014007小李7Time taken: 0.209 seconds, Fetched: 2 row(s)4.3 使用带overwrite参数的load data命令导入数据
hive> LOAD DATA INPATH '/hive_input_data/user_info.txt' OVERWRITE INTO TABLE test_user;Loading data to table yyz_workdb.test_userOKTime taken: 0.729 seconds4.3.1 查看结果
hive> select * from test_user;OK2014001小王12014002小李22014003小明32014004阿狗42014005姚明5Time taken: 0.128 seconds, Fetched: 5 row(s)4.3.2 查看存储要导入hive表那些数据的hdfs文件
localhost:result_data a6$ hadoop dfs -ls /hive_input_dataDEPRECATED: Use of this script to execute hdfs command is deprecated.Instead use the hdfs command for it.17/11/04 11:38:06 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable此时,存储/hive_input_data/user_info.txt的hdfs目录中就没有数据啦
4.3.3 同时也观察下该hive表存储数据目录的变化;
localhost:result_data a6$ hadoop dfs -ls /hive_hdfs_local_data-rwxr-xr-x 1 a6 supergroup 80 2017-11-04 11:34 /hive_hdfs_local_data/user_info.txt通过以上可以有两个发现,一是发现/hive_input_data/user_info.txt的user_info.txt这个导入数据不见了,因为文件被直接移动啦。二是发现原来hive表数据被覆盖啦,如果想要保留hive表的原始数据文件。
所以一般要慎重使用overwrite。
4.4 下面测试不带overwrite参数,将hdfs上的数据
4.4.1 上传本地文件到hdfs目录
localhost:result_data a6$ hadoop fs -put user_info_overwrite.txt /hive_input_data17/11/04 11:50:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicablelocalhost:result_data a6$ hadoop dfs -ls /hive_input_dataFound 1 items-rw-r--r-- 1 a6 supergroup 32 2017-11-04 11:50 /hive_input_data/user_info_overwrite.txt4.4.2 查看hive表现有数据
hive> select * from test_user;OK2014001小王12014002小李22014003小明32014004阿狗42014005姚明5Time taken: 0.242 seconds, Fetched: 5 row(s)4.5 使用不带overwrite的load data命令加载hdfs上数据到hive表
hive> LOAD DATA INPATH '/hive_input_data/user_info_overwrite.txt' INTO TABLE test_user;Loading data to table yyz_workdb.test_userOKTime taken: 0.648 seconds4.5.1 查看导入之后的hive表数据
hive> select * from test_user;OK2014001小王12014002小李22014003小明32014004阿狗42014005姚明52014006小王62014007小李7Time taken: 0.169 seconds, Fetched: 7 row(s)hive>4.5.2 查看被导入的数据文件所在的hdfs目录
localhost:result_data a6$ hadoop dfs -ls /hive_input_dataDEPRECATED: Use of this script to execute hdfs command is deprecated.Instead use the hdfs command for it.17/11/04 11:51:48 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicablelocalhost:result_data a6$之后发现导入数据文件所在的hdfs目录又空了,即数据文件被移动啦
4.5.3 下面看一下存储hive表数据的hdfs目录里面的文件情况
localhost:result_data a6$ hadoop dfs -ls /hive_hdfs_local_dataDEPRECATED: Use of this script to execute hdfs command is deprecated.Instead use the hdfs command for it.17/11/04 11:53:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableFound 2 items-rwxr-xr-x 1 a6 supergroup 80 2017-11-04 11:34 /hive_hdfs_local_data/user_info.txt-rwxr-xr-x 1 a6 supergroup 32 2017-11-04 11:50 /hive_hdfs_local_data/user_info_overwrite.txt
阅读全文
0 0
- 创建hive表和使用Load data指令导入数据的注意事项
- mysql导入数据load data infile注意事项
- hive 创建表和导入数据
- Hive之 load的使用注意事项
- LOAD DATA INFILE语句导入数据进入MySQL的一些注意事项
- Java中使用Oracle的客户端 load data和sqlldr命令执行数据导入到数据库中
- mysql load data导入数据
- MySQL数据导入--load data
- mysql如何使用load data infile导入中文数据
- mysql如何使用load data infile导入中文数据
- 使用LOAD DATA LOCAL INFILE来导入数据
- MySQL中使用load data命令进行数据导入
- Hive的数据导入——Load语句
- hive 中,Load data导入多出现一列null或者全部数据都是null
- mysql导入数据的方式选择-LOAD DATA INFILE句法
- mysql导入固定格式的数据 -- load data
- 初试mysql命令load data 导入数据进表
- hadoop-hive-创建表及LOAD数据相关
- int和string数据的互转
- 阿里云2017双十一优惠福利集锦汇总大全
- Python之端口扫描器编写
- Linux shell(三)
- WIN下“隐藏”文件夹妙招——黑科技来一波
- 创建hive表和使用Load data指令导入数据的注意事项
- 正负数原码、反码、补码以及位运算
- HDU-2004(成绩转换)
- 通过金矿模型介绍动态规划
- VMware虚拟机三种联网方法及原理
- HTML+CSS+JS实现二级菜单的效果
- [算法] 麻将序数牌组合方案
- php版本5.5中mysql函数的更改
- url增加签名验证防篡改