我想获取trafodion表中最后插入的记录的行id或记录id。例子:
1 | John <br/> 2 | Michael
在执行insert语句时,我要返回创建的id,即3。有谁能告诉我如何使用trafodion或它是不可能的?
zu0ti5jz1#
是否使用序列生成器为该表生成唯一ID?像这样:
create table idcol (a largeint generated always as identity not null, b int, primary key(a desc));
无论采用哪种方式,无论是否使用序列生成器,都可以使用以下语句获取最高键:
select max(a) from idcol;
问题是这种说法可能效率很低。trafodion有一个内置的优化来读取键列的最小值,但是它没有对最大值使用相同的优化,因为hbase直到最近才有反向扫描。我们应该使用反向扫描,请随时提交jira。为了使当前代码更有效,我在主键声明中添加了一个desc。使用降序键,获取max键将非常快:
explain select max(a) from idcol;
但是,数据从高值增长到低值可能会导致hbase出现问题,我不确定这是否是一个问题。下面是另一个解决方案:使用trafodion功能,可以选择插入的数据,并立即显示插入的值:
select * from (insert into idcol(b) values (11),(12),(13)) t(a,b); A B -------------------- ----------- 1 11 2 12 3 13 --- 3 row(s) selected.
1条答案
按热度按时间zu0ti5jz1#
是否使用序列生成器为该表生成唯一ID?像这样:
无论采用哪种方式,无论是否使用序列生成器,都可以使用以下语句获取最高键:
问题是这种说法可能效率很低。trafodion有一个内置的优化来读取键列的最小值,但是它没有对最大值使用相同的优化,因为hbase直到最近才有反向扫描。我们应该使用反向扫描,请随时提交jira。为了使当前代码更有效,我在主键声明中添加了一个desc。使用降序键,获取max键将非常快:
但是,数据从高值增长到低值可能会导致hbase出现问题,我不确定这是否是一个问题。
下面是另一个解决方案:使用trafodion功能,可以选择插入的数据,并立即显示插入的值: