命令行连接Hive
第一种方式:hive
> hive
第二种方式:beeline
beeline
!connect jdbc:hive2://10.16.0.3:7001
或者
beeline -u "jdbc:hive2://10.16.0.3:7001" -n hadoop -p hadoop
Linux命令行直接执行SQL-不进入Hive交互模式执行
hive -e "SQL" 执行单条语句
hive -f /home/root/insert.sql 执行sql文件,适合多条语句
设置Hive简单查询不执行MapReduce
简单的查询,就是只是select,不带count,sum,group by这样的,都不走map/reduce,直接读取hdfs文件进行filter过滤。这样做的好处就是不新开mr任务,执行效率要提高不少,但是不好的地方就是用户界面不友好,有时候数据量大还是要等很长时间,但是又没有任何返回。
修改方法
在hive-site.xml
里面有个配置参数hive.fetch.task.conversion
将这个参数设置为more,简单查询就不走map/reduce了,设置为minimal,就任何简单select都会走map/reduce
Hive关联Hbase表
Hive集成Hbase方法:http://blog.csdn.net/u010376788/article/details/50905476
hive创建外部表关联
可以关联hbase已有的表
CREATE EXTERNAL TABLE hive_high_keyword(key string, keyword string, adCode string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ( "hbase.columns.mapping"=":key,fn:keyword,fn:adCode" )
TBLPROPERTIES("hbase.table.name" = "ns1:high_keyword");
hive创建内部表关联
只能关联hbase中没有的表,删除hive表后hbase表也会删除,并且通过hive创建hbase的内部表,存储数据仍然存在hbse中
CREATE TABLE biz0728(key string, name string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ( "hbase.columns.mapping"=":key,fn:name" )
TBLPROPERTIES("hbase.table.name" = "biz0728");
Hive创建外部表
create EXTERNAL TABLE u_info
(
usrid STRING,
age STRING,
sex STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';
Hive创建内部表
create TABLE u_info
(
usrid STRING,
age STRING,
sex STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';
Hive表指定Parquet格式Snappy压缩算法
create EXTERNAL TABLE site_base_hive
(
id string,
site_code string,
site_name string,
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STIRED AS parquet TBLPROPERTIES('parquet.compression'='SNAPPY');
DML
清空表中所有数据
truncate table tablename;
导入数据-Load
参考:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929
加载本地文件数据
# 导入本地相对路径文件
load data local inpath 'a.txt' into table tableName;
# 导入本地绝对路径文件
load data local inpath '/home/root/a.txt' into table tableName;
# OverWrite
load data local inpath '/home/root/a.txt' overwrite into table tableName;
- a.txt,文件路径默认是用户的根目录,如root用户,读取目录为/home/root/a.txt
加载HDFS文件数据
# 导入HDFS路径文件
load data inpath '/a.txt' into table tableName;
# 导入HDFS路径文件Overwrite
load data inpath '/a.txt' overwrite into table tableName;
Hive使用前指定Yarn队列
set mapred.job.queue.name=queue3;
多表同时插入
同时写入tableName2
与tableName3
FROM tableName1
INSERT OVERWRITE TABLE tableName2
SELECT column1,colum2
GROUP BY year
INSERT OVERWRITE TABLE tableName3
SELECT column1,count(1)
WHERE column2 = 100
查询结果保存到新创建表
CREATE TABLE tableName
AS
SELECT column1,column2
FROM tableName2