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

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 ;

 

时间: 2024-11-01 04:02:45

MaxCompute SQL Row_Sequence 实现列自增长的相关文章

MaxCompute基础与MaxCompute SQL优化

总论: 大数据计算服务 ( MaxCompute,原名 ODPS )是一种快速.完全托管的 TB/PB 级数据仓库解决方案 .MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全 .同时,大数据开发套件和 MaxCompute关系紧密,大数据开发套件为 MaxCompute 提供了一站式的数据同步,任务开发,数据工作流开发,数据管理和数据运维等功能,您可以参见 大数据开发套件简介 来对其进行深入了

MaxCompute SQL 现状与展望

票选最美云上大数据暨大数据技术峰会上,阿里云飞天一部高级专家振禹为大家带来题为"MaxCompute SQL 现状与展望"的演讲.本文重点解析了MaxCompute SQL 现状,详细介绍了各种功能,其中包括编译器用户友好功能.复杂类型.CTE.参数化视图和SEMI JION等,接着说明了MaxCompute SQL即将完成与推进中的功能,最后作了简要总结.   以下是精彩内容整理: MaxCompute SQL 现状 目前MaxCompute SQL能力不是很强,虽然在性能.安全和成

MaxCompute SQL与标准SQL的主要区别及解决方法

这里会列举一个写惯了关系型数据库里的SQL的用户,在使用MaxCompute SQL比较容易遇见的问题.但是具体的语法建议还是参考对应的文档 .希望这篇帖子配合文档,能帮助大家少踩坑,快速上手MaxCompute SQL. 概要 场景 不支持事物(没有commit和rollback,建议代码具有等幂性支持重跑,不推荐使用Insert Into,推荐Insert Overwrite写入数据). 不支持索引和主外键约束. 不支持自增字段和默认值.如果有默认值,请在数据写入时自行赋值. 分区 单表支持

SQL中行转列和列转行

行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清晰,而且比较习惯. 但是PIVOT .UNPIVOT提供的语法比一系列复杂的SELECT...CASE 语句中所指定的语法更简单.更具可读性.下面我们通过几个简单的例子来介绍一下列转行.行转列问题. 我们首先先通过一个老生常谈的例子,学生成绩表(下面简化了些)来形象了解下行转列 CREATE TAB

SQL Server 2016 列存储技术做实时分析

title: SQL Server 2016 列存储技术做实时分析 author: 风移 摘要 数据分析指导商业行为的价值越来越高,使得用户对数据实时分析的要求变得越来越高.使用传统RDBMS数据分析架构,遇到了前所未有的挑战,高延迟.数据处理流程复杂和成本过高.这篇文章讨论如何利用SQL Server 2016列存储技术做实时数据分析,解决传统分析方法的痛点. 传统RDBMS数据分析 在过去很长一段时间,企业均选择传统的关系型数据库做OLAP和Data Warehouse工作.这一节讨论传统R

SQL行转列和列转行代码详解

行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). --创建测试环境 USE tempdb; GO IF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orde

急,sql通过多列的值选择连接多表的问题!

问题描述 急,sql通过多列的值选择连接多表的问题! 语句有点长,见谅哈! select * from ( select c.RQID PR, a.URL, a.Name , ROW_NUMBER() over(PARTITION by c.RQID order by b.ExecutedTime) as num from PR a inner join PRAC b on a.PRId=b.PRId inner join RQ c on b.PRId=c.PRId left join PC2

记录-sql自增列问题,求大大解答

问题描述 sql自增列问题,求大大解答 mysql建立一个自增列,初始为1,新建一个记录,其值为2,如果删除掉这条记录,那么下次新建的记录值是2还是3,如果是2,怎么是sql新建的记录值跳过原有的值呢 解决方案 不知道你有没有试过,删除所有数据,再插入时id是3,但清空数据表时,再插入又是从1开始的.你可以每次删除某条记录是,重新排序一下,给你一个存储过程看一下 1.传参:传递两个参数进去,每次删除数据时调用一次 CREATE DEFINER=root@localhost PROCEDURE r

sql 行转列 PIVOT 列转行 UNPIVOT

原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 22 2013 公司3 32 2012 公司1 42 2012 公司2 52 2012 公司3 62     表二: 年 公司1 公司2 公司3 2012 42 52 62 2013 12 22 32     可使用sql2005之后提供的PIVOT   具体操作如下:   select  *  f