1. Random sampling
使用RAND()函数和LIMIT关键字来获取样例数据。使用DISTRIBUTE和SORT关键字来保证数据是随机分散到mapper和reducer的。ORDER BY RAND()语句可以获得同样的效果,但是性能没这么高。
--Syntax:
SELECT * FROM <Table_Name> DISTRIBUTE BY RAND() SORT BY RAND() LIMIT <N rows to sample>;
2. Bucket table sampling
该方式是最佳化采样bucket表。RAND()函数也可以用来采样整行。如果采样列同时使用了CLUSTERED BY,使用TABLESAMPLE语句会更有效率。
--Syntax:
SELECT * FROM <Table_Name> TABLESAMPLE(BUCKET <specified bucket number to sample> OUT OF <total number of buckets> ON [colname|RAND()]) table_alias;
1) 使用下面的语句,从表lxw111中取样50%的数据,创建一个新表:
CREATE TABLE lxw1234 AS
SELECT * FROM lxw1 TABLESAMPLE (50 PERCENT);
2) 这种方式指定取样数据的大小,单位为M。比如,下面的语句:
SELECT * FROM lxw1 TABLESAMPLE (30M);
3) 这种方式可以根据行数来取样,但要特别注意:这里指定的行数,是在每个InputSplit中取样的行数,也就是,每个Map中都取样n ROWS。
SELECT * FROM lxw1 TABLESAMPLE (200 ROWS)
4) table_sample: TABLESAMPLE (BUCKET x OUT OF y [ON colname])
如果基于一个已经分桶表进行取样,将会更有效率。
执行下面的语句,创建一个分桶表,并插入数据:
CREATE TABLE lxw1_bucketed (pcid STRING)
CLUSTERED BY(pcid) INTO 10 BUCKETS;
INSERT overwrite TABLE lxw1_bucketed
SELECT pcid FROM lxw1;
表lxw1_bucketed按照pcid字段分成10个桶,下面的语句表示从10个桶中抽样第一个桶的数据:
SELECT COUNT(1) FROM lxw1_bucketed TABLESAMPLE(BUCKET 1 OUT OF 10 ON pcid);
很好理解。
再看这个:
SELECT COUNT(1) FROM lxw1_bucketed TABLESAMPLE(BUCKET 1 OUT OF 20 ON pcid)
表只有10个桶,如果指定20,看结果:
结果差不多是源表记录的1/20,Hive在运行时候,会在第一个桶中抽样一半的数据。
还有一点:
如果从源表中直接分桶抽样,也能达到一样的效果,比如:
SELECT COUNT(1) FROM lxw1 TABLESAMPLE(BUCKET 1 OUT OF 20 ON pcid);
区别在于基于已经分桶的表抽样,查询只会扫描相应桶中的数据,而基于未分桶表的抽样,查询时候需要扫描整表数据,先分桶,再抽样。
文章转自:http://lxw1234.com/archives/2015/08/444.htm
相关推荐
抽样查询是 Hive 数据查询语言中的一种重要操作,用于从大规模数据集中随机抽样数据。常用的抽样查询函数包括: * TABLESAMPLE:从大规模数据集中随机抽样数据 * RAND:生成随机数 Hive 数据查询语言是用于从...
- **桶表**:在每个分区下进一步划分数据,主要用于随机抽样和提高JOIN操作的性能。 #### 知识点五:Hive与Hadoop生态系统 Hive作为Hadoop生态系统中的一个重要组成部分,与其他组件有着紧密的联系: - **HDFS**:...
比如,蒙特卡洛方法利用随机抽样进行数值计算,解决复杂的优化问题;马尔科夫决策过程(MDP)在强化学习中扮演关键角色,帮助AI系统学习最优策略;在机器学习中,高斯过程被用来做回归和分类,提供不确定性估计。 ...
- 随机抽样车辆信息,进行多维度分析。 - 计算常高速通过的TopN卡口。 - 进行跟车分析。 6. 架构设计: - J2EE平台作为前端,用户可指定任务类型和参数。 - 平台调用Spark-submit脚本执行任务,根据用户筛选条件...
大数据的处理方法与传统数据仓库应用显著不同,它强调的是全样本分析而非随机抽样,追求的是相关性而非因果关系,以及面对数据的混杂性和复杂性。例如,大数据分析不再局限于精确性,而是利用非结构化数据进行相关性...
在Python中,我们可以利用numpy库来生成正态分布的随机样本。正态分布有两个关键参数:均值(mean)和标准差(stddev),在二维或多维空间中,还需要考虑协方差(covariance)。 正态分布的数学公式为: \[ f(x; \mu, \...
Hadoop的排序功能是基于Hadoop生态系统中的其他组件,如Hive和Pig等,它们提供了更高级的抽象和更易于使用的接口来处理大规模数据排序。 实现局部抽样方法PartialSampler的步骤包括: - 首先通过InputFormat的...
在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》 [2] 中大数据指不用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理。大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、...
在维克托·迈尔-舍恩伯格及肯尼斯·库克耶所著的《大数据时代》中提到,与传统的随机分析方法相比,大数据技术强调的是利用全部数据而非抽样来进行分析处理。这种方式能够更全面地反映出数据的整体特征和趋势。 IBM...