`

利用ORACLE实现数据抽样(sample block)

阅读更多

转自:http://blog.sina.com.cn/s/blog_4b13ec250100wm14.html

做数据分析的,免不了碰到记录数据量很大,怎么办?

做全面分析是不现实也没有必要。

介绍一下抽样方法及实现

几种常用的抽样方法:

1.简单随机抽样(simple random sampling)

将所有调查总体编号,再用抽签法或随机数字表随机抽取部分观察数据组成样本。

优点:操作简单,均数、率及相应的标准误计算简单。

缺点:总体较大时,难以一一编号。

2.系统抽样(systematic sampling)

又称机械抽样、等距抽样,即先将总体的观察单位按某一顺序号分成n个部分,再从第一部分随机抽取第k号观察单位,依次用相等间距从每一部分各抽取一个观察单位组成样本。

优点:易于理解、简便易行。

缺点:总体有周期或增减趋势时,易产生偏性。

3.整群抽样(cluster sampling)

先将总体依照一种或几种特征分为几个子总体(类.群),每一个子总体称为一层,然后从每一层中随机抽取一个子样本,将它们合在一起,即为总体的样本,称为分层样本

优点:便于组织、节省经费。

缺点:抽样误差大于单纯随机抽样。

4.分层抽样(stratified sampling)

将总体样本按其属性特征分成若干类型或层,然后在类型或层中随机抽取样本单位,合起来组成样本。有按比例分配和最优分配(过度抽样是否就是最优分配方法?)两种方案。

特点:由于通过划类分层,增大了各类型中单位间的共同性,容易抽出具有代表性的调查样本。该方法适用于总体情况复杂,各类别之间差异较大(比如金融客户风险/非风险样本的差异),类别较多的情况。

优点:样本代表性好,抽样误差减少。

 

我们需要使用抽样的方法从总量用户中随机抽取100W个样本记录。

down到本机然后进行sas抽样,不可能!

直接sas联机抽样,更不可能!

直接提交服务器进行抽样,然后链接到本机进行分析

现在介绍一下ORACLE抽样方法:

Oracle取随机数据实现

随机查看前N条记录

SELECT * FROM (SELECT * FROM TB_PHONE_NO ORDER BY SYS_GUID())
WHERE ROWNUM < 10;

SELECT * FROM (SELECT * FROM chifan  ORDER BY dbms_random.random) WHERE ROWNUM<=5

SQL> SELECT * FROM (SELECT * FROM A SAMPLE(0.01)) WHERE ROWNUM<=1;

注意每次取得的值都不同。

SAMPLE 是随机抽样,后面的数值是采样百分比。

以下是oracle 中随机取数据的方法的详细讲解:

1.快速随机取数据(推荐使用):

select * from MEMBER sample(1) where rownum <= 10

2.随机取数据,较慢

select * from (
  select * from MEMBER order by dbms_random.value
) where rownum<=10

========原文========

最近在做系统时用到了随机抽取记录的问题;

     上网上查找了很多相关资料,发现了不同的方法及其差异。都是基于ORACLE的方法哦

      首先第一个是随机抽取6个

      select * from  (select * from tablename order by order by dbms_random.value) where  rownum<7

      这个方法的原理我认为应该是把表中的数据全部查询出来按照随机数进行排列后在从查询出来的数据中查询中6条记录,这个方法我在使用的过程中发现,如果记录一多的话查询的速度有一点点的慢,测试时是7000条,如果几万几十万的话可能就更慢了;

     第二个是利用oracle的sample()或sample block方法

     select * from tablename sample ( 50 ) where  rownum<6

      这个稍稍介绍一下sample

     Oracle访问数据的基本方法有:
     1.全表扫描
     2.采样表扫描

     全表扫描(Full table Scan)
     全表扫描返回表中所有的记录。
     执行全表扫描,Oracle读表中的所有记录,考查每一行是否满足WHERE条件。Oracle顺序的读分配给该表的每一个数据块,这样全表扫描能够受益于多块读.
      每个数据块Oracle只读一次.

     采样表扫描(sample table scan)
     采样表扫描返回表中随机采样数据。
     这种访问方式需要在FROM语句中包含SAMPLE选项或者SAMPLE BLOCK选项.

     SAMPLE选项:
     当按行采样来执行一个采样表扫描时,Oracle从表中读取特定百分比的记录,并判断是否满足WHERE子句以返回结果。

     SAMPLE BLOCK选项:
     使用此选项时,Oracle读取特定百分比的BLOCK,考查结果集是否满足WHERE条件以返回满足条件的纪录.

      Sample_Percent:
      Sample_Percent是一个数字,定义结果集中包含记录占总记录数量的百分比。
      Sample值应该在[0.000001,99.999999]之间。

      主要注意以下几点:

      1.sample只对单表生效,不能用于表连接和远程表
      2.sample会使SQL自动使用CBO
PS:虽然这样可以获取一定随机的数据,不过,输出的顺序却还是顺序的,不知道是不是Oracle的机制就是这样,还是菜鸟暂时也找不出啥原因,不过这个也算是解决了随机的需求,暂时就这样了~~

分享到:
评论

相关推荐

    利用ORACLE实现数据的抽样

    Oracle提供了内置的`SAMPLE`函数,可以直接用于实现抽样。例如: ```sql SELECT * FROM (SELECT * FROM AS SAMPLE(0.01)) WHERE ROWNUM ; ``` 上述SQL语句将从表`AS`中抽取1%的记录,然后进一步限制结果集为一条记录...

    Oracle数据块结构分析说明BLOCK结构详解

    Oracle是业界广泛使用的大型关系型数据库管理系统,其核心组成部分之一就是数据块结构(Block)。数据块是Oracle数据库中最小的存储单位,是操作系统中读写数据的基本单位,也是数据库实例中逻辑上存储数据的基本...

    oracle数据块(block)结构详解

    Oracle 数据块(Block)是数据库存储的基本单位,它在Oracle数据库管理系统中扮演着至关重要的角色。数据块的设计和管理直接影响到数据库的性能和空间利用率。本文将深入解析Oracle数据块的结构及其相关知识点。 ...

    Oracle RAC 环境中 gc block lost 和私网通信性能问题的诊断

    在 Oracle RAC 环境中,每个实例都维护着一个 Local Cache(本地高速缓存),用于存储当前实例上的数据块,但是在某些情况下,数据块可能会被从全局高速缓存中删除,导致 gc block lost 问题的出现。 gc block ...

    oracle 11g 数据文件头block 1解析

    oracle 11g 数据文件头block 1解析 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ##powered by :黄林杰_Huanglinjie ##version : 2023-v11 ##联系方式:17767151782 ##blog: https://blog.csdn.net/lixora/ ##info: ...

    利用Oracle数据库快照实现数据双向复制.pdf

    本文将介绍如何利用Oracle数据库快照实现数据双向复制,以满足业务需求。首先,介绍了业务需求,即在医疗保险系统中,需要在多个地理位置之间实现数据共享和一致性。然后,介绍了Oracle 8i可更新快照复制的实现细节...

    利用Oracle实现对迁移人口的数据挖掘.pdf

    利用Oracle实现对迁移人口的数据挖掘.pdf

    oracle 导出数据字典的小工具

    "Oracle 导出数据字典的小工具"可能利用SQL查询从上述视图中提取数据,并将其整理成易于阅读的Word表格。这种工具对于数据库管理员和开发人员非常有用,他们可以快速地获取和理解数据库的架构和配置,而无需手动编写...

    SpringBoot定时任务实现Oracle和mysql数据同步

    本篇文章将详细讲解如何利用Spring Boot的定时任务特性,结合Java的相关技术来实现实时或定时的数据同步。 首先,我们需要了解Spring Boot中的定时任务是通过`@Scheduled`注解实现的,它来自于Spring的Task模块。这...

    mysql-oracle数据同步

    3. **数据库复制服务**:Oracle数据库提供GoldenGate,它可以实现异构数据库间的实时数据复制。MySQL也有类似的InnoDB Replication,但跨数据库平台需借助第三方工具。 4. **使用中间件**:例如阿里云DataHub、...

    C#实现Oracle数据批量导入

    C#实现Oracle数据批量导入 在本文中,我们将讨论如何使用C#语言实现对Oracle数据库的批量数据导入功能。本文的主要内容包括如何使用Oracle.DataAccess.Client命名空间来实现批量导入功能,以及如何使用SqlBulkCopy...

    ORACLE SIMPLE AQ SAMPLE

    2. **队列表**:Oracle AQ 使用数据库表来存储消息,这使得消息可以利用数据库的事务处理能力,确保数据的一致性和可靠性。 3. **发布/订阅模型**:Oracle AQ 支持发布者-订阅者模式,允许多个订阅者接收来自同一...

    Java导出Oracle数据库数据

    Java 导出 Oracle 数据库数据 Java 是一种流行的编程语言,广泛应用于各种领域。Oracle 是一种关系数据库管理系统,广泛应用于企业级应用中。在实际项目中,数据备份和恢复是非常重要的工作。本文将介绍如何使用 ...

    Oracle大数据量导入(CSV导入)

    对于非常大的CSV文件,可以利用Oracle的并行执行能力,通过设置并行度参数,将数据加载任务分散到多个进程上,从而加速导入过程。 6. **预处理和后处理脚本** 在导入前,可能需要对CSV文件进行预处理,例如删除...

    ProC-Sample.rar_oracle_oracle proc sample_proc

    标题中的"ProC-Sample.rar_oracle_oracle proc sample_proc"揭示了这是一个关于Oracle数据库的ProC编程示例。ProC是Oracle提供的一种预编译器,它允许开发者在PL/SQL中嵌入C代码,以提高性能和处理复杂计算。这个...

    Oracle基本数据类型存储格式浅析

    Oracle数据库中,数据类型的存储格式对于数据库的性能和空间利用率至关重要。本文将深入探讨Oracle的字符类型、数字类型、日期类型、ROWID类型和RAW类型的基本数据类型的存储机制。 首先,让我们聚焦于字符类型。在...

    利用脚本实现oracle数据库双机备份

    在讨论利用脚本实现Oracle数据库双机备份的知识点时,我们需要理解几个关键的组成部分:Oracle数据库的基本概念、备份的必要性、脚本语言(如批处理)的编写、双机备份策略、网络共享的利用、以及任务计划程序的应用...

    利用ORACLE数据库实现对SCADA系统数据的管理.pdf

    【Oracle 数据库】Oracle 是一款关系型...综上所述,利用Oracle数据库对SCADA系统数据进行管理,不仅可以提升数据的利用率,还能优化数据访问流程,降低系统负担,从而更好地服务于电力调度自动化系统的各个应用领域。

Global site tag (gtag.js) - Google Analytics