1.hive中有哪些类型的hive参数
hiveconf:hive-site.xml当中的配置变量 可读写
system:系统变量 可读写
env:环境变量 只能读
hivevar:用户自定义,可以自定义一些参数。 可读写
通过${}进行引用,其中system,env下的变量必须以前缀开头
显示表头信息 (只作用与当前会话)
hive --hiveconf hive.cli.print.header=true
.hiverc
tail -10 .hivehistory 查看历史操作
2.详述动态分区以及SQL
hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。
动态分区建的表需要放在静态分区建的后面(因为HDFS上的动态分区目录下不能包含静态分区的子目录
静态分区SP(static partition)与动态分区DP(dynamic partition)的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列实在编译时期,通过用户传递来决定的;动态分区只有在SQL执行时才能决定。
hive默认情况下没有开启
开启动态分区:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nostrict;
3.详述分桶机制以及列出分桶SQL
分桶则是指定分桶表的某一列,让该列数据按照哈希取模的方式随机、均匀地分发到各个桶文件中。
适用于抽样调查,mapjoin
分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。
对于hive中每一个表、分区都可以进一步进行分桶。
由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。
开启支持分桶(做分桶操作前一定要先开启)
set hive.enforce.bucketing=true;
桶表 抽样查询
select * from bucket_table tablesample(bucket 1 out of 4 on columns);
往分桶表中加载数据
insert into table bucket_table select columns from tbl;
insert overwrite table bucket_tabletbl
创建分桶表
CREATE TABLE psnbucket( id INT, name STRING, age INT)
CLUSTERED BY (age) INTO 4 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
加载数据:
insert into table psnbucket select id, name, age from psn31;
抽样
select id, name, age from psnbucket tablesample(bucket 2 out of 4 on age);
4.列出权限管理用到的SQL语句
1、Storage Based Authorization in the Metastore Server
基于存储的授权 - 可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别)。
2、SQL Standards Based Authorization in HiveServer2
基于SQL标准的Hive授权 - 完全兼容SQL的授权模型,推荐使用该模式。
3、Default Hive Authorization (Legacy Mode)
hive默认授权 - 设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。
CREATE ROLE role_name; -- 创建角色
DROP ROLE role_name; -- 删除角色
SET ROLE (role_name|ALL|NONE); -- 设置角色
SHOW CURRENT ROLES; -- 查看当前具有的角色
SHOW ROLES