背景:多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。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();
}
}
三、通过大数据开发套件注册函数
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 ;