複数の値を返すSUDFの確定フラグをテストしようとしています(thisへの質問に続きます)。 DETERMINISTICフラグは、パフォーマンスを向上させるために同じ入力に対する結果をキャッシュする必要があります。しかし、私は複数の戻り値に対してこれを行う方法を理解できません。確定的なSUDFから複数のout-paramsを選択するパフォーマンス
CREATE FUNCTION DET_TEST(IN col BIGINT)
RETURNS a int, b int, c int, d int DETERMINISTIC
AS BEGIN
a = 1;
b = 2;
c = 3;
d = 4;
END;
を今、私は次のselect文を実行すると::
1) select DET_TEST(XL_ID).a from XL;
2) select DET_TEST(XL_ID).a, DET_TEST(XL_ID).b from XL;
3) select DET_TEST(XL_ID).a, DET_TEST(XL_ID).b,
DET_TEST(XL_ID).c, DET_TEST(XL_ID).d from XL;
を私は、対応するサーバ処理時間を取得:
1) Statement 'select DET_TEST(XL_ID).a from XL'
successfully executed in 1.791 seconds (server processing time: 1.671 seconds)
2) Statement 'select DET_TEST(XL_ID).a, DET_TEST(XL_ID).b from XL'
successfully executed in 2.415 seconds (server processing time: 2.298 seconds)
3) Statement 'select DET_TEST(XL_ID).a, DET_TEST(XL_ID).b, DET_TEST(XL_ID).c, ...'
successfully executed in 4.884 seconds (server processing time: 4.674 seconds)
あなたが処理を見ることができるように私のSUDFは、次のようになります私は同じ入力で関数を呼び出すにもかかわらず、時間が増えます。これはバグですか、あるいは単一の値だけがキャッシュに格納され、リターンパラメータのリスト全体には格納されない可能性がありますか?
次にMAP_MERGEを試してみます。
これは私にとって面倒ですが、情報に感謝します。私はすでに複数のUDFをテストしましたが、タプルごとに複数のudfsを呼び出すだけのオーバーヘッドは非常に大きいので、私の目的には役に立たないことが判明しました。だからこそ、私は単一のUDFですべての値を計算しようとしたのです:/ – Jan
異なる出力パラメータを使って_Indeedについて少し詳しく説明できますか、実際にはHANAは異なる評価グラフを実行していますか?それはなぜですか/それとも何の評価グラフですか、それとももっと詳しい情報のリンクですか? – Jan
それは表現の内部評価グラフです。したがって、関数またはプロシージャから出力パラメータを照会すると、HANAはこれを最適化し、内部的に評価ツリーを作成し、計算に必要なすべてのステップをカバーします。異なる出力パラメータの場合、この評価ツリーは同じ機能で定義されていても異なります。 SQLでうまく表現できない複雑なデータ操作については、おそらくAFL SDKがパフォーマンス上の最良の選択です。しかしそれはC++の開発です。 –