hive常见操作

一.命令行的操作

  1. quit/exit 退出交互shell
  2. reset 重置配置到默认值
  3. set key=value 设置配置变量的值
  4. set 打印所有的配置变量 (被hive或用户覆盖的变量)
  5. add FILES/JARS/ARCHIVES {filepath} {filepath}* 在分布式缓存中添加文件,jar包,或archives
  6. list FILES/JARS/ARCHIVES 列出添加到分布式缓存的资源
  7. dfs {dfs command} 执行dfs命令
  8. ! {command} 从hive shell 中执行一个shell命令
  9. {query string} 执行hql语句
  10. source FILE {file path} 执行一个脚本

二.DML操作

1.导入数据

在向表中导入数据hive没有做任何转换,导入数据的操作是单纯的赋值或者是移动操作(移动数据文件到Hive表所对应的位置)

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

注意点
1.filepath 可以是相对路径,也可以是绝对路径,还可以是一个完整的URI( project/data1 ; /user/hive/project/data1; /hdfs://namenode:9000/user/hive/project/data1)
2.导入目标可以是表也可以是分区,如果表被分区了,那么一定要指定表的分区值。
3.如果指定关键词LOCAL,那么那么导入命令将会寻找本地文件系统的文件路径

2.从查询中向hive表插入数据

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;
#overwrite方式插入数据,对于任何已经存在的数据将会被覆盖
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
#普通方式插入数据
FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2]
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;
FROM from_statement
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2]
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] ...;
#多重插入
INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;
INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;
#动态分区插入

3.从查询中向文件系统写入数据(插入数据)

查询结果可以被插入到文件系统的目录中。

INSERT OVERWRITE [LOCAL] DIRECTORY directory1
  [ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
  SELECT ... FROM ...
#标准语句
FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...
#多重插入

向文件系统写入数据时,可以指定行的格式:

row_format:
 DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] 
 [COLLECTION ITEMS TERMINATED BY char]
 [MAP KEYS TERMINATED BY char] 
 [LINES TERMINATED BY char]
 [NULL DEFINED AS char] (Note: Only available starting with Hive 0.13)

注意点:
1.目录可以是一个完整的URI
2.作为文本文件写入到文件系统的数据是被序列化的,并且列是以“^A”来分隔的,行通过换行符来分隔的。如果某一列不是原始类型,那么将被序列化成JSON格式。

举例说明:

insert overwrite local directory '/home/lan/hive_data'
ROW FORMAT DELIMIED FIELDS TREMINATED by '\t'
null defined as ' '
select * from hbase_table_1;
#这里列之间以TAB键作为分隔,null的位置以空格替代
#如果不是本地路径,而是在HDFS文件系统上可以是相对路径,如果这个时候我们的用户名是lan,那么可以写作
#insert overwrite directory 'hive_data',那么这个时候的写入路径就是/user/lan/hive_data/(HDFS上的路径)

注意:
1.导出到本地可以指定列分隔符
2.导出到hdfs上不能指定列分隔符

向表中插入值

INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]

1.必须为每一列提供一个值,可以是Null.
2.不支持复杂类型的插入值(array,map,struct,union)
3.插入,更新,删除操作不支持有序表(创建表时候通过STORED BY 语句)
下面有几个例子:

INSERT INTO TABLE students
  VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);

INSERT INTO TABLE pageviews PARTITION (datestamp = '2014-09-23')
  VALUES ('jsmith', 'mail.com', 'sports.com'), ('jdoe', 'mail.com', null);

更新操作

UPDATE tablename SET column = value [, column = value ...] [WHERE expression]

删除操作

DELETE FROM tablename [WHERE expression]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值