标识符规则大小写规则:1. hive的数据库名、表名都不区分大小写2. 建议关键字大写命名规则1. 名字不能使用数字开头2. 不能使用关键字3. 尽量不使用特殊符号操作数据库--创建数据库hive create database db01;--先判断数据库是否存在再创建hive create database if not exists db02;--判断数据库并在创建数据库时添加注释hive create database if not exists db03 comment this is a database of laoyan;hive默认元数据是放在mysql数据库中的但是mysql数据库在刚开始的时候是不支持中文的hive的元数据的数据库名字叫hive,创建该数据库的时候使用的字符集是latin 字符不支持中文。不信的话创建一个带有中文解释的数据库create database if not exists db02 comment 大数据创建hive数据库之后在你的hdfs上会多一个文件夹而且在mysql的元数据库可以查看数据查看所有数据库show databases;切换数据库use db01; use default;查看数据库结构语法1desc database databaseName; 语法2desc database extended databaseName; 语法3describe database extended databaseName; 这三个语句的展示效果一样删除数据库语法1drop database databasename; # 这个只能删除空库 语法2drop database databasename cascade; # 如果不是空库则可以加cascade强制删除操作表关于数据类型Hive的数据类型分为基本数据类型和复杂数据类型,下面是基本数据类型只需要简单的记忆几个即可INT ,STRING因为varchar可以存储的字段长度有限String可以存储高达2G的字符串长度而且是可变长度的。create table stu(name varchar(20));create table stu(name string);创建表语法1使用库.表的形式create table db03.t_user(id int,name string);语法2指定分隔规则形式create table db03.t_user2(id int,name string,age int,height double)comment 这是一个学生表row format delimitedfields terminated by \tlines terminated by \nstored as textfile;LINES TERMINATED BY \n可以不写默认就是换行符\n写上只是显式声明不写行为一致STORED AS TEXTFILE;建议加上虽然 Hive 默认存储格式也是 TEXTFILE但规范建表语句建议显式指定可读性更好后续切换格式也一目了然。查看你当前在哪个数据库下面hive select current_database();OKdb02切换数据库use db03;查看所有表show tables;-- 实战创建一个emp表create table if not exists db03.emp( eno int, ename string, job string, mgr int ) row format delimited fields terminated by , lines terminated by \n stored as textfile;创建完一个表之后在你的hdfs上多了一个文件夹查看mysql中的元数据查看表结构desc tableName desc extended tableName; describe extended tableName;删除表drop table 表的名字;Hive中 本地模式的开启以下这个配置是使用本地资源跑MR任务 set hive.exec.mode.local.autotrue; set hive.exec.mode.local.auto.inputbytes.max134217728; set hive.exec.mode.local.auto.input.files.max4;需要在console中输入以下命令设置本地模式只对本窗口有效果假如遇到运行失败的语句记得查看日志/opt/installs/hive/logs/hive.log 文件。比如我们刚才执行insert into就报错了遇到这个错要么设置启用本地模式set hive.exec.mode.local.autotrue; set hive.exec.mode.local.auto.inputbytes.max134217728; set hive.exec.mode.local.auto.input.files.max4;要么在hadoop的yarn-site.xml中添加如下配置property nameyarn.scheduler.minimum-allocation-mb/name value2048/value descriptiondefault value is 1024/description /property重启 yarn 即可stop-yarn.shstart-yarn.sh加载数据加载本地数据创建一个文件夹将来把所有的数据都放在这个文件下mkdir /home/hivedata创建一个文件vim user.txt添加如下数据1,宝总2,李李3,小汪4,爷叔先有数据根据数据的格式和字段数量以及类型创建一个表create table db03.t_user( id int, name string ) row format delimited fields terminated by , lines terminated by \n stored as textfile;加载本地数据load data local inpath /home/hivedata/user.txt into table db03.t_user;同时在HDFS上也能看到对应的数据文件你能够看到里面的数据并且没有乱码原因是stored as textfile。从HDFS加载到Hive中hdfs dfs -put /home/hivedata/user.txt /home将hdfs的数据导入到t_user 表中就比之前少了一个 local 关键字load data inpath /home/user.txt into table db03.t_user;然后可以看到表中的数据了查看hdfs上的user.txt 发现不见了去哪里了被移动走了思考一下为什么是移动而不是复制因为hdfs上的数据默认都以为比较大所以如果相同的数据占2份非常的消耗空间。查看数据发现有两份想覆盖怎么办load data local inpath /home/hivedata/user.txt overwrite into table db03.t_user;覆盖之后数据如下文件也覆盖了将数据直接放入表对应的文件夹下再思考一个问题既然hive中的数据是在hdfs上的我们也可以手动的上传数据能上传至/home为何不能上传至/user/hive/warehouse/db03.db/t_usercp user.txt user2.txt hdfs dfs -put /home/hivedata/user2.txt /user/hive/warehouse/db03.db/t_user可以看到hive中的数据不要load 也可以被正常使用。从其他表中加载数据insert into table tableName2 select [.....] from tableName1; 扩展内容向多张表中插入数据的语法 from tableName1 insert into tableName2 select * where 条件 insert into tableName3 select * where 条件快速创建一个同样的表只要表结构 create table db03.t_user2 like db03.t_user; 创建完之后再运行 insert into table db03.t_user2 select * from db03.t_user; 创建t_user3和 4 create table db03.t_user5 like db03.t_user; create table db03.t_user4 like db03.t_user; from db03.t_user2 insert into db03.t_user4 select * insert into db03.t_user5 select id,name;克隆表数据复制表结构 create table if not exists db03.t_user6 like db03.t_user2; 复制表结构和数据 create table if not exists db03.t_user7 as select * from db03.t_user2;通过hive进行流量统计这是数据文件数据用空格符隔开根据数据结构创建表结构CREATE TABLE db03.flow( id string , phonenumber string, mac string, ip string, url string, uppacket int, downpacket int, upflow int, downflow int, status int, issuccess int )ROW FORMAT DELIMITED FIELDS TERMINATED BY ;FIELDS TERMINATED BY ; 代表存储的数据之间的分隔符加载本地数据load data local inpath /home/hivedata/HTTP_flow.dat into table db03.flow;可以看到数据成功插入需求统计每一个手机号码的上行和下行流量以及总流量。想在 hivesql 中给字典起别名使用 反引号 将 字段名引起来。 select phonenumber, sum(upflow) as 上行流量 , sum(downflow) as 下行流量, sum(upflowdownflow) as 总流量 from db03.flow group by phonenumber;