MaxCompute SQL Row_Sequence 实现列自增长
在多维数据仓库中,通常情况下,维度表与事实表都需要配置一个代理键作为主键标识符。这个代理键通常采用单一列构成的连续自增数字序列作为主键标识符的常见选择。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
请根据以下内容设置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的数据读取过程是无序的特性,在这种情况下仍需将数据插入覆盖到新表中以完成更新操作。
注意:本教程中的UDF在处理小规模数据时,在单一节点环境下表现良好。然而,在面对海量数据且需要进行多节点环境下并行处理时,则会遇到重复数的问题。为此可采用uuid()函数来解决这个问题。
select uuid() as id,* from user_info ;

