详情页标题前

阿里云云原生大数据计算服务 MaxComputeTABLESAMPLE采样-云淘科技

详情页1

MaxCompute支持通过TABLESAMPLE功能来对数据进行采样,包含三种采样方式:分采样、指定采样百分比采样和随机返回指定记录数采样。本文为您介绍使用TABLESAMPLE采样的命令语法和使用示例

命令格式

  • 分桶采样。

    TABLESAMPLE (BUCKET  OUT OF  [ON  | rand()])

    参数说明如下。

    • x,y:必填。将源表中的数据划分为y个桶,取其中的第x个桶,桶从1开始编号。

    • col_name:分桶列名即要进行采样的列名。当表不是聚簇表时,col_namerand()函数必须二选一,当使用rand()函数时表示对输入的数据随机进行分桶。ON语句中最多支持指定10个列。

  • 指定采样百分比采样。

    TABLESAMPLE ( PERCENT)

    其中n为采样百分比,取其中n%的数据,即采样返回的数据记录个数和源表中总记录个数之比大概是n%,非精确值。

  • 随机返回指定记录数采样。

    TABLESAMPLE ( ROWS)

    其中m为指定随机返回的记录数。如果源表中的总记录个数小于m,则返回源表中的全部记录。m最大值为10000。

示例数据

本文使用示例需要用到如下两个表。

  • BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020。

    BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020表是MaxCompute公开数据集中的表,详情请参见公开数据集概述。

  • tblsample_test。

    tblsample_test表为聚簇表,建表DDL及数据插入命令如下。

    --创建cluster表
    CREATE TABLE tblsample_test(a bigint, b string, c string) 
      CLUSTERED BY (a, c) SORTED by (a, c) INTO 32 BUCKETS;
    --插入数据
    insert overwrite table tblsample_test values(1,"b1","c1"),
        (2,"b2","c2"),
        (3,"b3","c3"),
        (4,"b4","c4");
    --查询表数据
    select * from tblsample_test;
    --返回结果
    +------------+---+-----+
    | a          | b | c   |
    +------------+---+-----+
    | 2          | b2 | c2 |
    | 4          | b4 | c4 |
    | 3          | b3 | c3 |
    | 1          | b1 | c1 |
    +------------+---+---+

使用示例

  • 示例1:根据列的值分桶进行采样。

    --对BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020进行采样
    SELECT isp_code,
    			 phoneno,
    			 province
      FROM BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020 
    TABLESAMPLE (BUCKET 1 OUT of 1000000 ON isp_code, 
                          									phoneno, 
                          									province) s;
                                            
    --返回结果
    +----------+---------+----------+
    | isp_code | phoneno | province |
    +----------+---------+----------+
    | 185      | 1853500 | 山西   |
    | 187      | 1878332 | 四川   |
    +----------+---------+----------+
  • 示例2:使用RAND()函数,对输入的数据随机分桶进行采样。

    --对BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020进行采样
    SELECT isp_code,
    			 phoneno,
           province
      FROM BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020
    TABLESAMPLE (BUCKET 3 OUT OF 500000 ON RAND()) s;
    
    --返回结果
    +----------+---------+----------+
    | isp_code | phoneno | province |
    +----------+---------+----------+
    | 131      | 1312224 | 上海   |
    | 135      | 1353936 | 广东   |
    | 158      | 1586377 | 山东   |
    +----------+---------+----------+
  • 示例3:对聚簇表tblsample_test可省略ON条件进行采样。

    select a, b from tblsample_test TABLESAMPLE (BUCKET 1 OUT OF 2) as ts;
    
    --返回结果
    +------------+---+
    | a          | b |
    +------------+---+
    | 2          | b2|
    +------------+---+

    说明

    因为聚簇表中的数据在存储的时候已经分桶存储,因此在采样的时候会直接从某个桶里取数据,这样做可以提高采样的性能。tblsample_test表在创建的时候是分了32个桶,采样的时候,只要总桶数y的取值为32的倍数(32/64/128...)或者是能整除32(16/8/4/...),都可以取得性能优化的效果。

  • 示例4:对tblsample_test表进行采样,取其中n%的数据,即采样返回的数据记录个数和源表中总记录个数之比大概是n%(不能保证绝对精确)。

    --取tblsample_test 50%的数据
    SELECT * FROM tblsample_test TABLESAMPLE (50 PERCENT) s;
    
    --返回结果
    +------------+---+---+
    | a          | b | c |
    +------------+---+---+
    | 2          | b2 | c2 |
    | 3          | b3 | c3 |
    +------------+---+---+
  • 示例5:对tblsample_test表进行采样,随机返回n条记录。

    select * FROM tblsample_test TABLESAMPLE (2 ROWS);
    
    --返回结果
    +------------+---+---+
    | a          | b | c |
    +------------+---+---+
    | 2          | b2 | c2 |
    | 3          | b3 | c3 |
    +------------+---+---+

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/157514.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云日志服务SLSPullData-云淘科技

    调用PullData接口获取指定游标(Cursor)位置的日志数据。 接口说明 获取日志时必须指定Shard。 目前仅支持读取Protocol Buffer格式数据。 请求语法中Host由Project名称和日志服务Endpoint构成,您需要在Host中指定Project。 已创建并获取AccessKey。更多信息,请参见访问密钥。 阿里云账号Access…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云日志服务SLS正则式函数-云淘科技

    本文介绍正则式函数基本语法及示例。 日志服务支持如下正则式函数。 重要 在日志服务分析语句中,表示字符串的字符必须使用单引号(”)包裹,无符号包裹或被双引号(””)包裹的字符表示字段名或列名。例如:’status’表示字符串status,status或”status”表示日志…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云云原生大数据计算服务 MaxCompute普通模式和Hive兼容模式下SQL的差异-云淘科技

    本文为您介绍MaxCompute中运算符、类型转换和内建函数分别在普通模式和Hive兼容模式下使用的区别。 运算符 BITAND(&) 当输入参数是BIGINT类型的时候,如果BITAND的计算结果是LONG_MIN(-263),在普通模式下会返回NULL,而Hive模式仍然是LONG_MIN。 示例如下。 普通模式 set odps.sql.hiv…

  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云日志服务SLS调度原理-云淘科技

    本视频向您介绍日志服务数据加工的数据调度原理。 内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家阿里云企业补贴进行中: 马上申请腾讯云限时活动1折起,即将结束: 马上收藏同尘科技为腾讯云授权服务中心。 购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

    阿里云日志服务SLS 2023年12月10日
  • 阿里云日志服务SLS添加统计图表(Pro版本)到仪表盘-云淘科技

    日志服务支持将查询和分析结果通过图表形式保存到仪表盘中。本文介绍如何将统计图表(Pro版本)添加到仪表盘。 前提条件 已采集数据。支持采集日志、时序数据和Trace。重要 基于日志数据获取统计图表并添加到仪表盘前,需要先将日志采集到Standard Logstore中。更多信息,请参见管理Logstore。 如果采集的是日志,需配置索引。具体操作,请参见创建…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。