MaxCompute SQL Row

    xiaoxiao2023-08-30  159

    背景:多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。MaxCompute(原ODPS)没有关系数据库中的自增列 auto-increment id但可以通过UDF来给海量数据的每一行产生唯一的id。

    效果如下:

    select row_sequence(),name from user_info;

    一、准备工作

    1、准备阿里云账号,文档参考:https://help.aliyun.com/document_detail/27803.html

    2、开通大数据开发套件、MaxCompute服务。文档参考:https://help.aliyun.com/document_detail/27815.html

    3、配置Eclipse ODPS环境,文档参照:https://help.aliyun.com/document_detail/27981.html

    二、通过Eclipse创建UDF

    1、在Eclipse环境中,新建Row_Sequence.java,代码如下

    package com.aliyun.odps.examples.udf; import com.aliyun.odps.io.LongWritable; import com.aliyun.odps.udf.UDF; public class Row_Sequence extends UDF { private LongWritable result = new LongWritable(); public Row_Sequence () { result.set(0); } public String evaluate() { result.set(result.get() + 1); return result.toString(); } }

    2、导出为Row_Sequence.JAR

    三、通过大数据开发套件注册函数

    1、通过大数据开发数据开发->资源管理,上传Row_Sequence.JAR资源。

    2、通过大数据开发数据开发->函数管理,注册row_sequence函数。

    四、通过大数据开发套件验证

    1、通过SQL查询结果

    select row_sequence(),name from user_info;

    我们可以看到,通过UDF可以完成列增长效果,由于MaxCompute读取数据是无序的,所以还需要把数据insert overwrite table到新表中。

    注意:本教程UDF在小规模数据单节点是可行的,如果是海量数据多节点并行,会出现重复数,建议用uuid()函数;

    select uuid() as id,* from user_info ;

     

    最新回复(0)