加载中…
博文
分类: Hadoop Hive

Hive中在做多表关联时,由于HiveSQL

标签:

hive

hadoop

杂谈

分类: Hadoop Hive

我想说的SELECT TOP N是取最大前N条或者最小前N条。
Hive
提供了limit关键字,再配合order by可以很容易地实现

(2012-07-22 16:46)
标签:

haoop

hive

map数

分片

split

分类: Hadoop Hive

Hadoop中在计算一个JOB需要的map数之前首先要计算分片的大小。计算分片大小的公式是:

标签:

hive

转义

通配

bug

like

分类: Hadoop Hive

Hive开发过程中遇到这样一个问题:
例如表T001的字段col1里面存有’ABC\DEF’

标签:

oracle

not

in

exists

性能

效率

子查询

杂谈

分类: Oracle

在网上搜了下关于oraclenot existsnot in性能的比较,发现没有描述的太全面的,可能是问题太简单了,达人们都不屑于解释吧。于是自己花了点时间,试图把这个问题简单描述清楚,其实归根结底一句话:not in性能并不比not exists差,关键看你用的是否正确。

 

 

标签:

hive

map

reduce

transform

连续数字序列

杂谈

分类: Hadoop Hive
ORACLE中生成从1到n的连续数字的方法很多,最简单的一种是:
ETL@RACTEST> select level from dual connect by level<=5;

     LEVEL
----------
         1
         2
         3
         4
         5

我用python写了一个很简单的小程序,可以借助hive的transform语句实现一样的功能:
hive> select transform(5) using 'serial.py' as rn from dual;
OK
1
2
3
4
5

也可以使用MAP:
hive> map 5 using 'serial.py' as rn from dual;
OK
1
2
3
4
5

提供一下python代码,仅供参考:

标签:

hive

udf

分析函数

row_number

分类: Hadoop Hive

    之前部门实现row_number是使用的transform,我觉得用UDF实现后,平时的使用会更方便,免去了transform相对繁琐的语法。

    用到的测试表为:

hive> desc row_number_test;
OK
id1     int
id2     string
age     int
score   double
name    string

 

hive> select * from row_number_test;
OK
      t04     25      60.0    youlia
      t01     20      85.0    liujiannan
      t02     24      70.0    zengqiu
      t03     30      88.0&nb

标签:

oracle

分区表

全局索引

局部索引

杂谈

分类: Oracle
    1年前写的一篇总结,今天翻出来发到博客上去。
    在测试中发现一个存储过程中的一段INSERT...SELECT...操作非常耗时,每次都要跑将近两个小时,于是试着去探究原因。首先看了一下SELECT操作有没有问题,单独跑了一下SELECT语句用了不到10秒钟就跑完了,而且数据量只有50多万,这么小的数据量怎么会导致INSERT消耗那么长时间呢?于是试着加上append提示,结果还是不能解决问题。想了想有可能是这个表有什么属性比较特殊,因此自己建了个表结构相同的测试表,把数据向测试表中INSERT,结果不到20秒钟就跑完了,于是确定一定是表的原因。以前在帮同事造压力测试数据的时候也遇到过INSERT相当慢的情况,不过那次是因为数据量非常大并且没有把索引先disable掉,这次的数据量这么小,不会也是索引的原因吧?突然想到这次插入的表是一个分区表,而在分区表上建索引就有两种不同的方式:全局索引和局部索引,于是查了一下这个表建的是什么索引,一看是全局索引,于是自己觉得应该是找到了答案。
局部索引和全局索引的区别如下图所示:

标签:

hadoop

hive

partition

name

分区表

动态分区

静态分区

分类: Hadoop Hive
hive中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash分区、混合分区等)。分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说在表的数据文件中实际上并不保存分区列的信息与数据。
下面的语句创建了一个简单的分区表:

create table partition_test
(member_id string,
name string
)
partitioned by (
stat_date string,
province string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

这个例子中创建了stat_date和province两个字段作为分区列。通常情况下需要先预先创建好分区,然后才能使用该分区,例如:

alter table partition_test add partition (stat_date='20110728',province='zhejiang');

这样就创建好了一个分区。这时我们会看到hive在HDFS存储中创建了一个相应的文件夹:

$ hadoop fs -ls /user/hive/warehouse/partition_test/stat_date=20110728
Found 1 items
drwxr-xr-x - admin supergroup 0 2011-07-29 09:53 /user/hive/warehouse/partition_test/stat_date=20110728/province=zheji
标签:

oracle

greemplum

full

outer

join

外连接

分类: Greenplum
本周ETL测试方法讨论时Bill提到了一种full outer join的替代写法,由于full outer join是一种比较低效的操作,所以如果有高效的替代写法,自然非常好,于是我对full outer join的一些替代写法做了一下总价,由于实验的篇幅过多,我这里只给出结论,会显得更清晰。
先说Oracle数据库:
1.常规写法:
select * from t01 full join t02 on t01.id=t02.id;
这是常规写法,没有什么好说的。
2.网上看到的一种替代写法:
select * from t01,t02 where t01.id=t02.id(+)
union
select * from t01,t02 where t02.id=t01.id(+);
就是用一个左外连接union一个又外连接。我是坚决反对这种写法的。
首先,这种写法与full outer join并不完全等价:如果t01中有重复记录或者t02中有重复记录,full outer join并不会去重,但写法2会去重。
其次,这种写法的效率很低,其实 full join 在内部执行时并不需要排序,但是写法2使用了union,要做排序去重操作,这个操作是效率很低的。
3.我之前总结的一种等
  
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有