Hive的变量和参数、数据编码、数据库定义

变量和参数

客户端中的变量分四个域:

  • hivevar (用户自定义)
  • hiveconf(hive配置变量)
  • env   (系统环境变量)
  • system (操作系统变量)
  1. hive>set打印所有域中的相关属性,也可以用set来修改属性值,例如:
    1)hive> set env:HADOOP_HOME;【打印系统环境变量HADOOP_HOME】
      结果:env:HADOOP_HOME=/home/hadoop/soft/hadoop
    2)hive> set hiveconf:hive.exec.scratchdir;
      结果:hiveconf:hive.exec.scratchdir=/tmp/hive
    3)hive> set fs.defaultFS;【set Hadoop属性名,打印出hadoop中的属性值】
      结果: fs.defaultFS=hdfs://mycluster
    4)$ hive -d name=geek或者 $ hive --define name=geek【在外部定义一个name变量】
     hive> set hivevar:name;或者 hive> set name;【进入hive,打印出name变量的值】
      结果:hivevar:name=geek 和 name=geek
     hive> set hivevar:name=geekbai; 或者 hive> set name=geekbai;【重置,修改name变量的值】
      结果:hivevar:name=geekbai 和 name=geekbai
    5)显示当前操作的database数据库
    hive> set hiveconf:hive.cli.print.current.db=true;【设置此属性值为true】
    结果例如:hive (default)> use hive_test;【默认是default数据库】
         hive (hive_test)>
  2. Hive一次执行命令
    $ hive -e “select * from student”【查询student表中所有内容】
    $ hive -e “insert into t2 values("geekbai",22)”【向t2表插入一条数据】
    $ hive -S -e "select * from student" > ~/student.txt【将查询到的内容写到student.txt文件中】
    在文件中执行Sql:
    $ vi student.hql【创建一个文件,后缀最好为.hql,好辨认】
     select * from student;【写入sql语句】
    $ hive -f ~/student.hql【执行文件里的语句】
    $ hive -S -f ~/student.hql >> ~/student.txt;【将结果打印到另一文件】
    获取客户端的历史Sql语句的命令,在~的.hivehistory下
    $ cd ~
    $ cat .hivehistory
  3. hiverc文件,在Cli客户端启动时,Hive会自动去HOME目录下找 .hiverc文件,自动执行文件里的命令
    $ cd ~ 【最开始是没有这个文件的,要先创建】
    $ vi .hiverc 【可以在文件里定义一些变量,设置属性值等等】
     set hiveconf:hive.cli.print.current.db=true;
    $ hive
     hive (default)>
  4. 客户端有自动补全功能,在客户端能执行简单的shell命令能使用Hadoop的dfs命令
    hive > ! pwd;
    hive > ! clear;
    hive > dfs -ls / ;
    hive > dfs -help;【查看所有功能选项列表】
  5. 设置查询显示列名
    hive>set hive.cli.print.header=true;【或者直接在 .hiverc文件中设置该属性值】
    hive>select * from student;
    结果为:student.id student.name student.age
        1 zhangsan 22

默认的文本文件数据编码

  • 行按照 '\n‘ 进行分割
  • 字段按照 ‘\A’ 【\001】进行分割
  • Array和Struct按照 ‘\B’ 【\002】进行分割
  • Map按照’ \C’ 【\003】进行分割

语法(字符串默认情况下):

create table employees(
		 		name string,
		 		salary float,
		 		subordinates array<string>,
		 		deductions map<string,float>,
		 		address struct<street:string,city:string,state:string,zip:int>)
row format delimited 
fields terminated by '\001'
collection items terminated by '\002'
map keys terminated by '\003'
lines terminated by '\n';

简单案例:
1)创建stu_data文件,含有三个字段,字段采用“,”逗号进行分割

1,geekbai,22
2,geekdragon,23
3,geekwei,11
4,geekwhite,10
5,geekyellow,15
6,geekblack,18
7 geekred,20
8 geekblue 30

2)hive中的建表语句如下:

create table student (id int,name string,age int)
     row format delimited 
     fields terminated by ','
     lines terminated by '\n';

3)将数据文件上传至hive的数据仓库中
方法1:
hive (hive_test)> load data local inpath '/home/dragon/stu_data' into table student;【在客户端上传】
如果数据文件已经在集群hdfs上,就不用加 local
方法2:
$ hadoop fs -put ~/stu_data /user/hive/warehouse/hive_test.db/student/【直接暴力上传到hdfs】

4)进入Cli客户端查寻结果
$>hive
hive> select * from student;

student.id	student.name	student.age
1	geekbai		22
2	geekdragon	23
3	geekwei		11
4	geekwhite	10
5	geekyellow	15
6	geekblack	18
NULL 	20 		NULL  //不符合条件的则为空
NULL 	NULL 	NULL

Hive DDL数据库定义语言

  1. 创建数据库
    hive>create database hive_demo;
    hive>create database if not exists hive_demo;
    hive>show databases;
    hive>show databases like ‘*t*’; //使用正则匹配
    说明:hive为创建的数据库生成了相对应的目录(*.db),目录在{hive.metastore.warehouse.dir}属性下,
    同时,数据库中的表将以目录中的子目录进行存储;default默认数据库除外!

  2. 自定义修改数据库存放位置需单独指定(*.db)目录
    hive>create database hive1 location ‘/user/hive/hive1.db’;
    hive (default)> dfs -ls -R /user;【查看】
    drwxrwxrwx - dragon supergroup 0 2008-07-25 01:23 /user/hive
    drwxrwxrwx - dragon supergroup 0 2008-07-25 01:23 /user/hive/hive1.db
    drwxrwxrwx - dragon supergroup 0 2008-05-25 00:29 /user/hive/warehouse

  3. 对数据库可以增加描述信息:
    hive> create database if not exists hive2 comment 'hive2测试库';
    hive> describe database hive2 ;
    结果:
    db_name comment location owner_name owner_type parameters
    hive2 hive2测试库 hdfs://mycluster/user/hive/warehouse/hive2.db dragon USER

  4. 对数据库添加属性信息:
    hive> create database hive3 with dbproperties ('name'='geekbai','data'='2008-08-08');
    hive> desc database extended hive3;【查看】
    结果:
    hive (default)> desc database extended hive3;
    OK
    db_name comment location owner_name owner_type parameters
    hive3 hdfs://mycluster/user/hive/warehouse/hive3.db dragon USER {data=2008-08-08, name=geekbai}

  5. 使用数据库:
    hive>use myhive1;
    删除数据库:
    hive>drop database if exists hive3;
    hive>drop database if exists hive3 cascade;
    说明:cascade表示级联关系;restrict表示限制约束(默认值);

  6. 修改数据库:
    除数据库的属性以外,其他信息均不能修改:
    hive> alter database hive3 set dbproperties ('name'='hyxy','data'='2009-08-08');

  7. 创建表
    a. 创建表:
    hive> create table hive1.student(sid int comment 'xuehao',name string comment 'mingzi') comment 'student table' tblproperties (‘name’=‘geek’,‘data’=‘2009-08-08’) ;
    【hive1.student 表示在hive1库下创建新表,comment ’ 描述内容’ 表示添加属性描述,tblproperties(’ ')添加表信息】
    b. 查看表描述:
    hive> desc hive1.student;
    结果:

    col_name	data_type	comment
    sid   		int     	xuehao              
    name  		string  	mingzi 
    

    hive> desc extended hive1.student;【打印出所有的描述】

    col_name	data_type	comment
    sid        	int         xuehao              
    name      	string      mingzi              
    	 	 
    Detailed Table Information	Table(tableName:student, dbName:hive1, owner:dragon, createTime:1566722723, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:sid, type:int, comment:xuehao), FieldSchema(name:name, type:string, comment:mingzi)], location:hdfs://mycluster/user/hive/hive1.db/student, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{data=2009-08-08, name=geek, transient_lastDdlTime=1566722723, comment=student table}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE)	
    

    c. 拷贝表模型,创建新的表(数据不拷贝)
    hive> create table hive1.student2 like hive1.student;

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值