1.注意的几个地方
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views partition (dt='2014-7-27');"
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views partition (dt='2014-7-28');"
//这样就把数据导入到了page_views表中。并指定分区为'2014-7-27','2014-7-28',在hdfs的文件系统中,在/user/hive/warehouse会生成page_views文件夹,在page_views下又会生成dt=2014-7-27,dt=2014-7-28这两个文件夹,在这两个文件夹的下面才实际存储了数据的文件。
可以根据分区来进行查询
select * from page_views where dt='2014-7-27' limit 10; (这条语句并不会解析成mappreduce的任务)
(3)创建二级分区的表
create table page_views(
(4)创建表时指定存储的路径
在创建的表的时候默认的存储的路径是/user/hive/warehouse,当然在创建表的时候可以指定存储的路径。
首先创建所要指定的路径,
hadoop fs -mkdir /user/share
Hadoop fs -chmod 777 /user/share
create table page_views(
(1)dfs.permissions 设为false,否则容易报权限问题。
(2)mysql> alter database hive character set latin1;
否则容易报错:
FAILED: Error in metadata: MetaException(message:Got exception: org.apache.thrift.transport.TTransportException null)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
2.Hive存储路径设置
必须创建 /tmp 和 /user/hive/warehouse,而且相对于HDFS,赋予g+w权限
hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
默认存储路径
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the arehouse</description>
</property>
3.Hive表
hive的表分为两种:
内部表(托管表
)
外部表(
external
)//比较常用
默认分隔符:列 为 \001 行为 \n
(1)创建表
create table page_views(
track_time string,url string,session_id string,referer string,ip string,end_user_id string,city_id string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
//这就创建了一个hive的表,有track_time,url ,session_id ,referer ,ip ,end_user_id ,city_id 这些字段,并且指定每行的数据之间的分隔符是\t
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views;"
//Load 可以load本地文件和hdfs文件
注意在load的时候如果要导入的数据的分隔符和表所指定的分割符不同的时候,会默认load到表的第一个字段中。
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views;"
//Load 可以load本地文件和hdfs文件
注意在load的时候如果要导入的数据的分隔符和表所指定的分割符不同的时候,会默认load到表的第一个字段中。
OVERWRITE是覆盖掉原来的数据重新添加,如果不加
OVERWRITE就是在原数据的末尾进行追加。
(2)创建分区的表
一般增量表都会建成分区表,维度表会创建成一般的表。
create table page_views(
(2)创建分区的表
一般增量表都会建成分区表,维度表会创建成一般的表。
create table page_views(
track_time string,url string,session_id string,referer string,ip string,end_user_id string,city_id string
) partitioned by(dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
//这就创建了一个hive的带有分区的表,分区的标示是dt字段(string类型)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
//这就创建了一个hive的带有分区的表,分区的标示是dt字段(string类型)
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views partition (dt='2014-7-27');"
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views partition (dt='2014-7-28');"
//这样就把数据导入到了page_views表中。并指定分区为'2014-7-27','2014-7-28',在hdfs的文件系统中,在/user/hive/warehouse会生成page_views文件夹,在page_views下又会生成dt=2014-7-27,dt=2014-7-28这两个文件夹,在这两个文件夹的下面才实际存储了数据的文件。
可以根据分区来进行查询
select * from page_views where dt='2014-7-27' limit 10; (这条语句并不会解析成mappreduce的任务)
(3)创建二级分区的表
create table page_views(
track_time string,url string,session_id string,referer string,ip string,end_user_id string,city_id string
) partitioned by(dt string,step int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
//这样就创建 了一个二级分区的表,分区的标示是dt(string)和step(int)
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views partition (dt='2014-7-27',step=1);"
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views partition (dt='2014-7-27',step=2);"
//注意这时候一定要指定二级的分区(dt='2014-7-27',step=1),如果只是指定一个分区就会报错。
这样在HDFS文件系统中/user/hive/warehouse会生成page_views文件夹,在page_views下又会生成dt=2014-7-27,在dt=2014-7-27下又会生成名为step=1和step=2的两个文件夹,在这两个文件夹的下面才实际存储了数据的文件。
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
//这样就创建 了一个二级分区的表,分区的标示是dt(string)和step(int)
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views partition (dt='2014-7-27',step=1);"
hive -e "load data local inpath '/home/hadoop/page_views.dat' OVERWRITE INTO TABLE page_views partition (dt='2014-7-27',step=2);"
//注意这时候一定要指定二级的分区(dt='2014-7-27',step=1),如果只是指定一个分区就会报错。
这样在HDFS文件系统中/user/hive/warehouse会生成page_views文件夹,在page_views下又会生成dt=2014-7-27,在dt=2014-7-27下又会生成名为step=1和step=2的两个文件夹,在这两个文件夹的下面才实际存储了数据的文件。
(4)创建表时指定存储的路径
在创建的表的时候默认的存储的路径是/user/hive/warehouse,当然在创建表的时候可以指定存储的路径。
首先创建所要指定的路径,
hadoop fs -mkdir /user/share
Hadoop fs -chmod 777 /user/share
create table page_views(
track_time string,url string,session_id string,referer string,ip string,end_user_id string,city_id string
) partitioned by(dt string,step int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
location ' /user/share/page_views';
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
location ' /user/share/page_views';
4.其他的一些命令
hive -e //后面可以执行一段sql语句。
hive -f //后面可以执行一个sql文件
hive -s //以简洁的方式进入shell模式,打印的信息偶比较简洁
hive -v //以这种模式进入shell,打印的信息比较的详细。