一.普通的建表
create table students1 ( id bigint, name string, age int, gender string, clazz string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; // 必选,指定列分隔符
注:不指定建表路径的话,默认的路径为 /user/hive/warehouse
二.指定分区的建表
create table IF NOT EXISTS students1 ( id bigint, name string, age int, gender string, clazz string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/bigdata30/intput1';
注:指定了分区,则会在指定路径下创建一个文件夹,可以向文件夹中上传数据文件,但是必须每个字段必须用指定的分隔符隔开,Hive会自动将你所上床的数据插入到表中
三.指定存储格式的建表
create table IF NOT EXISTS test_orc_tb ( id bigint, name string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS ORC LOCATION '/bigdata29/out6'; /* 指定储存格式为orcfile,inputFormat:RCFileInputFormat,outputFormat :RCFileOutputFormat,如果不指定,默认为textfile,注意:除textfile以 外,其他的存储格式的数据都不能直接加载,需要使用从表加载的方式。 */
四.将查询到的数据结果写入到表中
/* 表不存在的情况下插入数据: 自动创建students2表,并将从students1中查询出来的10条结果插入到 students2表当中。 */ create table students2 as select * from students1 limit 10; /* 表存在的情况下插入数据:(没有as) 并将从students中查询出来的10条结果插入到students2表当中。 这是复制 不是移动students表中的表中的数据不会丢失 */ insert into table students2 select * from students; /* 表存在的情况下插入数据:(没有as) 将数据覆盖写入students2表当中 */ insert overwrite table students2 select * from students;
五.只想建表,不需要加载数据
create table students5 like students;
六.创建复杂的表
create table IF NOT EXISTS t_person( name string, friends array<string>, children map<string,int>, address struct<street:string ,city:string> ) row format delimited fields terminated by ',' -- 列与列之间的分隔符 collection items terminated by '_' -- 元素与元素之间分隔符 map keys terminated by ':' -- Map数据类型键与值之间的分隔符 lines terminated by '\n'; -- 行与行之间的换行符 数据为: songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,beng bu_anhui yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,he fei_anhui
七.加载数据
load data inpath '/input1/students.txt' into table students; /* 将HDFS上的/input1目录下面的students.txt数据移动至students表对应的HDFS 目录下,注意是 移动、移动、移动 /*
load data local inpath '/data/students.txt' into table students; /* 将Linux本地上的/data目录下面的students.txt数据移动至students表对应的HDFS 目录下,注意是 移动、移动、移动 /* load data local inpath '/data/students.txt' overwrite into table students; /* 加上overwrite关键字 将Linux本地上的/data目录下面的students.txt数据复制到students表对应的HDFS 目录下,注意是覆盖 /*