1.6 删除数据库
drop database database_name; 如果数据库不为空,可以使用cascade强制删除 drop database database_name cascade;
int bigint(long) double string timestamp(时间类型)
cast(字段 as 数据类型) 如果无法转换返回null
hive中数据存储在表得目录下 , 查询数据时会加载所有的文件
为了提高效率 , 对表进行分区 , 一个分区就是一个目录 例如 : 同一天的数据放在一个文件夹下 , 要查询这天的数据时只需要加载这一天文件夹下的文件即可
静态一级分区
create table tb_static_partition_1( id int , ctime string , name string ) partitioned by (dt string) row format delimited fields terminated by "," ; load data local inpath "/doit17/log/2020-09-02_01.log" into table tb_static_partition partition(dt='2020-09-02') ; load data local inpath "/doit17/log/2020-09-02_02.log" into table tb_static_partition partition(dt='2020-09-02') ; load data local inpath "/doit17/log/2020-09-01_01.log" into table tb_static_partition partition(dt='2020-09-01') ; load data local inpath "/doit17/log/2020-09-01_02.log" into table tb_static_partition partition(dt='2020-09-01') ; load data local inpath "/doit17/log/2020-08-31_01.log" into table tb_static_partition partition(dt='2020-08-31') ; load data local inpath "/doit17/log/2020-08-31_02.log" into table tb_static_partition partition(dt='2020-08-31') ; 例如: 查询2020-08-31这天的数据 , 只加载这一个目录下的数据 select * from tb_static_partition1 where dt = '2020-08-31';静态二级分区
create table tb_static_partition_2( id int , ctime string , name string ) partitioned by (mt string , dt string) row format delimited fields terminated by "," ; load data local inpath "/doit17/log/2020-09-02_01.log" into table tb_static_partition_2 partition(mt='09' , dt='02') ; load data local inpath "/doit17/log/2020-09-02_02.log" into table tb_static_partition_2 partition(mt='09' , dt='02') ; load data local inpath "/doit17/log/2020-09-01_01.log" into table tb_static_partition_2 partition(mt='09' , dt='01') ; load data local inpath "/doit17/log/2020-09-01_02.log" into table tb_static_partition_2 partition(mt='09' , dt='01') ; load data local inpath "/doit17/log/2020-08-31_01.log" into table tb_static_partition_2 partition(mt='08' , dt='31') ; load data local inpath "/doit17/log/2020-08-31_02.log" into table tb_static_partition_2 partition(mt='08' , dt='31') ; 查询时可以只查询mt 也可以查询mt和dt也可以根据年月日静态三级分区
按照表中某个字段的值进行分区
create table tb_addr_dynamic_partition( id int , name string , address string ) partitioned by(addr string) ; 按照地址分区 开启动态分区 set hive.exec.dynamic.partition=true //使用动态分区 set hive.exec.dynamic.partition.mode=nonstrick;//无限制模式,如果模式是strict,则必须有一个静态分区且放在最前面 set hive.exec.max.dynamic.partitions.pernode=10000;//每个节点生成动态分区的最大个数 set hive.exec.max.dynamic.partitions=100000;//生成动态分区的最大个数 set hive.exec.max.created.files=150000;//一个任务最多可以创建的文件数目 set dfs.datanode.max.xcievers=8192;//限定一次最多打开的文件数 set hive.merge.mapfiles=true; //map端的结果进行合并 set mapred.reduce.tasks =20000; //设置reduce task个数 将查询到的数据插入表中并按照address分区 insert into table tb_addr_dynamic_partition partition(addr) select id,name,address,address from tb_addr ;抽样查询
select * from tb_bucket tablesample(bucket 1 out of 4 on sid); ---数据分为4个桶 , 查询第一个桶中的数据 ---不是直接查询表的4个文件 ---查询到的数据分布不是很均匀