Hive源码解析与开发实战

(2人)

249.50 元 5 折

全场5折优惠,咨询QQ810476411

left outer join 

left semi join 类似 exists

join 的 where 条件是在 reduce 端执行

一般的where 在 map端执行

skewjoin

 

mapjoin 

使用分布式缓存加载小表,然后读取大表,和内存中的小表完成连接操作

 

优点:减少reduce操作,加快程序运行,降低网络负载

占用部分内存,生成较小的文件 

Mapjoin 应用场景

1. 

2. 不等值连接

 

select /*+mapjoin(n)*/ from

 

select * from bucketed_user tablesample(bucket 1 out 2 on id)

[展开全文]
oftenlin · 2015-05-28 · HQL:join 0

set hive.exec.dynamic.partition.mode=nostrict;

strict; 默认,只要需要一个静态分区,否则要给dt 一个默认的值。

nostrict;没有限定

 

distribute by 分散 打散到不同的reduce

sort by 和 distribute 一起用,在reduce 上做排序,局部排序

cluster by 相当于distribute by 和 sort by 的组合

union all 多个表的数据组合放在一起

count(*) 和 count(1) count(col)

count(*) 所有的列不为NULL 加1 

count(1) 不管是不是NULL 都加1

count(col) col 列如果不为NULL 加1

 

sum (col)+cast(1 as bigint) YES

sum(col)+1 NO

order by 为全局排序,需要一个reduce 操作,且只有一个reduce,与配置无关

 

group by 受限于reduce参数 mapred.reduce.tasks 

输出文件个数与reduce数相同,文件大小与reduce 处理的数据量相关

如果某个Key 过多过造成数据倾斜。

可以开启hive.groupby.skewindata 启动两个mayreduce job 在key 后加一个随机值,启动另一mapred 搜集第一个mapred 的结果,将随机值去掉。

 

 

[展开全文]

表属性操作:

1.修改表名

2.修改列名

3.增加列

设定表的属性

alert table test set tblproperties (property_name=property_value)

1.设定表的字段分隔符

(分区表和非分区表修改方法不同)

alter table table_name set serdeproperties (field.delim='\t')

alter table table_name partition(dt='xxxx') set serdeproperties (field.delim='\t')

修改location

alter table table_name [partition()] set location 'path'

内部表和外部表的转换

alter table table_name set tblproperties ('EXTERNAL'=TRUE);

 

[展开全文]
oftenlin · 2015-05-28 · 表属性操作 0

加载数据的几种方法

1. create table test1 select id,name from test;

2.本地数据拷贝至HDFS 

load data local inpath 'localpathc' [overwrite] into table test1;

3.加载 HDFS 数据,实际上是文件移动不是复制数据

load data inpath  '/home/data/' [overwrite] into table test1

overwrite 会覆盖

 

4.hadoop fs -copyFromlocal 目标文件不能存在

  load data local inpath 目标文件存在会 data_copy_1

 5. insert [overwrite | into ] table test_m select name,addr from testtext where name ='text';

分区表数据加载要指定分区

load data local inpath into tabel test_p partition(dt='20140405')

如果是用Hadoop 命令 hadoop fs -copyFromlocal '/home/data/data' '/external/dt=20140405'

必须在表结构上添加分区

alter tabel test_ep add partition (dt='20140405')

加载数据数据类型必须一致

[展开全文]
oftenlin · 2015-05-28 · 数据加载 0

list jar 看缓存中存在哪些jar包

source = hive -f

source 是在 hive 的命令行

hive -f 是在shell 的命令行

hive --serivce 各种service什么意思?

hive -e 

hive -f

hive -v

 

set var = wer;

select * from test where name = '${hiveconf:var}'

引用系统定义的环境变量

select '${env:HOME}' from test

 

 

[展开全文]
oftenlin · 2015-05-28 · hive数据操作 0

1. create table test3 like test2;

复制的表结构,数据是没有复制的

2.create table testext_cc as select name,addr from testtext;

复制了数据

3.三种文件内容

stored as textfile

stored as sequencefile // 序列化的文件

stored as rcfile

stored as inputformat 'class'

1.单个目录下 加载 jar 

hive> add jar /home/data/UDInputFormat.jar

2.永久有效 将jar包 拷贝到hive的lib目录下

 

Hive 分桶和分区的区别

分桶比分区更细粒度化,针对某一列进行分桶,分桶是分文件,分区是文件夹

 

set hive.enforce.bucketing=true;

clustered by (id) sorted by name into 4 bucket

 

 

 

 

[展开全文]
oftenlin · 2015-05-28 · 表操作 II 0

distribute by 和 sort by

distribute by 按某个字段进行hash 操作

distribute by 只是单纯的分散数据,而group by 把相同key 的数据进行聚合

order by 与 sort by 

order by 是全局排序

sort by 只是确保每个reduce 上面的数据是排序的

distribute by 应用场景:

1. map 输出的文件不均匀

2. reduce 文件不均匀

3. 小文件过多

4. 文件太大

 

cluster by = distribute by clom1 order by cloumn

多个表的合并 union all 

select from (select a as col from test union all select b as col from testb)

tmp

1. union all 字段名称必须一样

2. union all 字段类型必须一样

3. union all 的表不能有查询

4. 最外层表查询外必须有别名

[展开全文]

1.函数分类

2.内置函数

3.自定义函数

4.正则表达式在hive 中的应用

内置函数分类

1.简单函数

2.聚合函数 ,map 

3.集合函数 map array struct 函数

4.特殊函数:窗口函数等

 

1.show funcions

2.desc function concat;显示concat基本信息

3.desc function extended concat;

 

UDTF

[展开全文]

Hive 动态分区

 

分区不确定,不需要使用 alter table add partition 

 

create table d_part(

name string

)

partitioned by (value string)

row format delimited fields terminated by '\t' lines terminated by '\n'

stored as textfile

 

insert overwirte table d_part partion(value) 

select name,addr as value from texttest

set hive.exec.dynamic.partition.mode=nonstrick

set hive.exe.dynamic.partition=true

 

多个分区的 在insert 的时 顺序要和创建时对应的上

 

 

[展开全文]

1. hive 命令行 不能有换行

2.desc formatted testtable 查看格式化过的表

3.table type : managed_table 内部表

4.load data local inpath '/home/data/data' overwrite into table testtable;

local 是加载本地数据

5. 内部表删除时,目录及数据文件将会被删除,外部表就不会,只是删除外部表

6.按Key查Map 

select deductions["k1"] from testtable;

7.查结构体

select city.name from testtable;

8.select * from test limit 10; 走抽样的查询,不走mapreduce

 

 

 

[展开全文]
oftenlin · 2015-05-02 · 免费试听 0
hive.auto.convert.join=true; 
[展开全文]
jsh111 · 2014-10-30 · HQL:join 0

表属性操作


修改表名和列

alter table old_tbname rename to new_tbname;

alter table tbname change column c1 c2 int comment 'xxx';

after serverity;/first

alter table tbname add columns (c1 string ,c2 long);


修改tblproperties

 alter table test set tblproperties('comment'='xxxxx','xx'='xx');


alter table city set serdeproperties('field.delim'='\t');


alter table  city partition(dt='xxx') set serdeproperties('field.delim'='\t');


修改location

alter table tbname[partition()] set location 'path'


alter table tbname set TBLPROPERTIES('EXTERNAL'='TRUE'/'FALSE')


[展开全文]
jsh111 · 2014-10-30 · 表属性操作 0
select id,money,first_value()
[展开全文]

show functions;

desc function concat;

desc function extended concat;

[展开全文]

试一下

/data

create table xx

location ''

内部表有没有生成


load data inpath '' into table tablename partition();

[展开全文]
jsh111 · 2014-09-17 · 数据加载 0

hive --service -help


hive -e "select * from testtext"

-S -- slient

-v -- hql也打印出来

hive -f "select_hql"


hive>add jar xx.jar

hive>list jar


hive> source /home/data/hql/select_hql

[展开全文]
jsh111 · 2014-09-15 · hive数据操作 0

hive不同文件的读取对比

stored as textfile

stored as sequencefile

--hadoop fs -text

stored as rcfile

--hive -service rcfilecat path

stored as inpufrmat 'class'

outformat 'class'


练习:

UDInputFormat


使用SerDe


------------------------

增加分区

alter table employees add if not exists 

partition(country='xxx',state='yyy');


show partitions employees

删除分区

alter table employees drop if exists

patition(country='xxx',state='yyy');














[展开全文]
jsh111 · 2014-09-15 · 表操作 II 0

desc extended/formated table

 

[展开全文]
jsh111 · 2014-09-13 · 表操作 I 0

授课老师

Hadoop工程师

学员动态

fengyo 学完了课时 HQL:group、order
fengyo 开始学习课时 HQL:group、order
fengyo 学完了课时 表属性操作
fengyo 开始学习课时 表属性操作
fengyo 开始学习课时 数据导出及动态分区

QQ客服: 810476411

QQ咨询: 810476411

QQ吐槽: 810476411

服务时间: 9:00 - 21:00

刘老师: 18516031455

微信公众号:开源力量