Trafodionの表に最後に挿入されたレコードの行IDまたはレコードIDを取得したいとします。trafodionの最後に挿入された行IDを取得する
例:
1 | John <br/>
2 | Michael
INSERT文を実行すると、私が作成したIDを返すようにしたい、3
を意味誰もがtrafodionを使用したりすることが可能ではないことを行う方法を教えてもらえますか?
Trafodionの表に最後に挿入されたレコードの行IDまたはレコードIDを取得したいとします。trafodionの最後に挿入された行IDを取得する
例:
1 | John <br/>
2 | Michael
INSERT文を実行すると、私が作成したIDを返すようにしたい、3
を意味誰もがtrafodionを使用したりすることが可能ではないことを行う方法を教えてもらえますか?
このテーブルのユニーク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を主キー宣言に追加しました。降順キーで、最大のキーは非常に高速になります取得:
explain select max(a) from idcol;
しかし、データは低い値に高いから成長持つことのHBaseで問題が発生する可能性があります、私はこれが問題であるかどうかわからないんだけど。お返事のための
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.
ありがとう:すぐにあなたに挿入された値を示し、あなたが挿入されたデータを選択することができますTrafodion機能を使用します。ここでは
は、さらに別の解決策です。私はテーブルの説明で "nullでないIDを常に生成する" largeintを使用しています。私は挿入後にselect max()クエリである新しいクエリを起動したくありません。行を挿入している間、最新のrowIdが必要です。挿入後、行番号が返されます。同じクエリでmysqlのように KeyHolder keyHolder = new GeneratedKeyHolder();新しく挿入されたrowIdを保持する 。 Trafodionでも可能ですか? – ankit