大数据学习之hive3

hive中的数据定义语言(ddl):

hive中的数据定义语言有如下:

HiveQL DDL statements are documented here, including:

  • CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX  //创建数据库,schama,表,视图,函数,索引
  • DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX //删除
  • TRUNCATE TABLE  //暂未理解
  • ALTER DATABASE/SCHEMA, TABLE, VIEW //更改
  • MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)
  • SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, VIEWS, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE  //展示创建语句
  • DESCRIBE DATABASE/SCHEMA, table_name, view_name  //描述

与mysql类似。

语法:

1.创建数据库:

create database/schama [if not exist] database_name 

2.删除数据库

drop database/schama [if exist] database_name 

3.使用数据库:

use database_name

4.创建表:

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name  [(col_name data_type [COMMENT col_comment], ... [constraint_specification])] PRIMARY KEY (col_name, ...) FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) 默认是制表符为分隔符 (tab)

创建时出现的问题:  message:For direct MetaStore DB connections, we don't support retries at the client level.

这是由于数据库字符编码引起的:alter database sparksql character set latin1; 这样可解决

创建的hive表默认的存储位置是Hadoop 上的/user/hive/warehouse文件夹下

可以使用location关键字指定表的位置 eg: create table tb(id int,name string) location 'hdfs上的存储位置'

5.加载数据

load data [local] inpath 文件路径' into table tablename ; 加上local是从本地文件中加载文件 不加local是从你的hdfs系统上加载文件

将数据加载到hive中发现数据未按照列名正确的进入表中,可以在创建表的时候添加如下一句:

row format delimited fields terminated by ',' 意思就是按照逗号分割数据放入对应表中对应的列中,若文件中的列数多余表中的,则多余的列不会添加到表中,若不加,则字段在不为string类型时加载进表中的数据会全部为null

6.将table中的数据按照某个分割符来分割,使用 lateral view explode(split(con,' ')) 函数 con为表中字段的名字

eg:

select word,count(1) from hive_wordcount lateral view explode(split(con,' ')) wc as word group by word;

7.修改表结构;

alter  table tableName add columns (column type); hive

alter table tableName add column column type; mysql

8..将输出结果的null置换为别的值

hive中会有nal函数 nvl(p1,p2) 将p1转换为p2

9.设置hive不总是将任务提交为mr作业

可以在hive-site.xml文件中设置 hive.fetch.task.conversion=more

这样简单的hive任务就不会提交到hadoop运行


10.判断字段是否为null时最好使用is 或者is not 而不是使用==

11.hive中的函数

    round() 保留数值中几位小数,并且四舍五入

    ceil()向上取整

    floor()向下取整

   lower()将字符转换为小写

   upper()将字符转换为大写

   concat()链接两个字符串

   substr(a,b)截取字符串

   substr(a,b,c街区字符串 从b开始截,到c结束包含c位置

   lpad(a,b,c)左填充,将a填充到b位字符串,使用c字符来填充

   rpad(a,b,c)右填充

   length(a) 字符长度

   trim()去掉空格 

   size(map())返回map中元素的个数

   cast(a as b) 将a转化为把这种数据格式

   to_date() 返回日期中日期的部分

   year()返回年的部分

   month()返回月的部分

   day()返回日的部分

   weekofyear() 返回是今年的第几周

   datediff()两个日期相差多少

   date_sub()两个日期相减

   date_add() 两个日期相加

   coalesce()从左到右返回第一个不是null的结果

   case..when..then 类似于if else语句  eg:select name,case name when 'lc' then name+'123' 当name为lc时返回lc123

   count() sum() avg() min() max() 类似于mysql

   explode(map()) 将map中的k,v拆成每条数据 eg:select explode(map(1,1))

   hive的等值表连接  “  =  ”

   非等值链接  between  a and b 查询a ,b之间的数据

   还有左外连接,右外连接

   group by 比较特殊:

   select id,name count(*) from table group by id,name 

你可能感兴趣的:(大数据)