1.hive简介:
Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言.
2.hive如何存储数据:
hive是将元数据保存到数据库中,例如mysql或者derby数据库中,
3.hive的内部表和外部表:
内部表hive本身管理,外部表由hdfs管理,
内部表会保存在默认路径,外部表自己设定路径。
内部表在删除数据时会把元数据和存储数据都删除,外部表不会删除存储在hdfs上的文件。
内部表建表语句
create table t_order(id string,create_time string,amount float,uid string)
row format delimited
fields terminated by’,’; #以,为分隔号,不用指定路径
外部表建表语句
create external table t_lxq (ip string,url string,access_time string)
row format delimited
fields terminated by ‘,’;
location ‘/lxq /log’; #需要指定路径
分区表
create table t_lxqs(ip string,url string,access_time string)
partitioned by(dt string)
row format delimited
fields terminated by ‘,’;
4.hive建表
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
(‘id‘ tinyint comment ‘商品id‘)partitioned by ('dt' string) row format serde 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
WITH SERDEPROPERTIES (
'field.delim'='\u0001',
'serialization.format'='\u0001') (hive默认分隔符)
(建表的文件存储格式,有ORC,RE,CSV,JsonSerDe等,我司用的orc,用于降低Hadoop数据存储空间和加速Hive查询速度,以字典形式存储,方便mapreduce计算,ORC是列式存储,有多种文件压缩方式,并且有着很高的压缩比,提供了多种索引,row group index、bloom filter index,)sorted as inputformat 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'(ORC (Optimized Record Columnar)是RC File 的改进,主要在压缩编码、查询性能上进行了升级; 在ORC格式的hive表中,记录首先会被横向的切分为多个stripes,然后在每一个stripe内数据以列为单位进行存储)OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION 'hdfs://nameservice1/user/hive/warehouse/dmax_ods.db/table_name
TBLPROPERTIES('last_modified_by'='datax',
'last_modified_time'='1576464537',
'transient_lastDdlTime'='1576464314') (实际上就是table properties,TBLPROPERTIES允许开发者定义一些自己的键值对信息,comment:可以用来定义表的描述信息;hbase.table.name:hive通过 storage handler(暂放)将hive与各种工具联系起来,这是是使用hive接入hbase时,设置的属性(暂放);immutable:顾名思义‘不可变的’,当表的这个属性为true时,若表中无数据时可以insert数据,但是当表已经有数据时,insert操作会失败。不可变表用来防止意外更新;EXTERNAL:通过修改此属性可以实现内部表和外部表的转化。)
5.hive 的insert into和insert overwrite
insert into只是简单的插入数据到后面,insert overwrite覆盖之前的数据。
插入语法
INSERT overwrite TABLE dmax_mds.mds_lsh_trade_order partition (dt = '$DATE(0)')
6.查看建表语句
show create table tablename;
7.hive的数据类型
类型 | 描述 | 示例 |
---|---|---|
TINYINT | 一字节整数, -128 ~ 127 | 12 |
SMALLINT | 二字节整数,-32768 ~ 32767 | 255 |
INT/INTEGER | 4字节整数 -2,147,483,648 ~ 2,147,483,647 | 2555 |
BIGINT | 4字节整数,-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | -250 000 000 000 |
FLOAT | 4字节单精度小数 | 3.1415 |
DOUBLE | 8字节双精度小数 | 3.141529 |
DECIMAL | 任意数字 | 10 |
STRING | 字符串 | "abc" |
VARCHAR | 字符串,字符串长度只能为1~65355 | "abc" |
CHAR | 字符串,字符串长度只能为1~255 | "a,bc" |
TIMESTAMP | 时间戳,格式为yyyy-mm-dd HH:mm:ss | 2019-2-28 13:25:25 |
DATE | 日期,格式为yyyy-mm-dd | 2019-2-28 |
arrays | 数组,ARRAY(data_type) | |
maps | 键值对,Map(primitive_type, data_type) | |
structs | 结构体,STRUCTcol_name : data_type) | |
union | 联合体,UNIONTYPE(data_type, data_type) |
8. hive正则
正则匹配字符解释:
^ 表示开头
$ 表示结尾
. 表示任意字符
* 表示任意多个
regexp_extract(str,regexp[,idx])字符串正则表达式解析函数
str是被解析的字符串,regexp是正则表达式,idx是返回结果。返回结果为0默认全部返回,为1匹配一次
小括号( )标记一个子表达式的开始与结束的位置。
**1表示返回正则表达式中第一个() 对应的结果 **。
2表示返回正则表达式中第二个() 对应的结果
0表示把整个正则表达式对应的结果全部返回
regexp_replace函数regexp_replace(string A, string B, string C)
把A字符串中的B部分转为C部分
9. hive \001 是默认分隔符
10.hive:文本中的特殊字符处理\t\r\n
\t:tab,跳格(移至下一列)
\r:回车
\n:换行