Advertisement

MaxCompute SQL Row_Sequence 实现列自增长

阅读量:

在多维数据仓库中,通常情况下,维度表与事实表都需要配置一个代理键作为主键标识符。这个代理键通常采用单一列构成的连续自增数字序列作为主键标识符的常见选择。MaxCompute(原ODPS)不支持数据库关系中的自增列 auto-increment id功能。然而可以通过用户定义函数UDF为海量数据行生成唯一的唯一标识符id。

效果如下:

复制代码
    select  row_sequence(),name from user_info;
60706e8bcb92ce7c4b8e93864a5856de0067b155

一、准备工作

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

4b8df735c1b1c80d52fda8230b39c18a5f9beea2
037e9ba1b119269857ee68a245364e578909137c

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

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

bf88a2fa45226a73c7f66308af8e51187388dc0f

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

e744201360d1dddf6f670266d473aab0dddf1e73

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

1、通过SQL查询结果

复制代码
    select row_sequence(),name  from user_info;
60706e8bcb92ce7c4b8e93864a5856de0067b155

从经验来看,在实际应用中可以通过UDF实现列增长的效果。因为MaxCompute的数据读取过程是无序的特性,在这种情况下仍需将数据插入覆盖到新表中以完成更新操作。

注意:本教程中的UDF在处理小规模数据时,在单一节点环境下表现良好。然而,在面对海量数据且需要进行多节点环境下并行处理时,则会遇到重复数的问题。为此可采用uuid()函数来解决这个问题。

复制代码
    select uuid() as id,* from user_info ;
bba01b493e1c5d904e882b1c380673c6ebe49a98

全部评论 (0)

还没有任何评论哟~