記憶域の割振り - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

AGR_INIT集約フェーズにおいて、UDFは、FNC_Context_t.interim1の参照する中間記憶域を割り振る必要があります。

必要なメモリを割り振るため、UDFではFNC_DefMemライブラリ関数を呼び出します。その際には、構造体のサイズ(最大64000バイト)を指定します。UDFにおいて、CREATE FUNCTION文のCREATE AGGREGATE句で指定されるinterim_sizeの値を超えるメモリを要求することはできません。interim_sizeが指定されていないなら、最大値は64バイトになります。

パフォーマンスを最高にするためには、関数で必要な分だけのメモリを中間記憶域に割り振るようにしてください。

標準偏差関数のサンプルの場合、構造体のサイズはsizeof(AGR_Storage)によって計算できます。FNC_Context_t.interim1の参照する中間記憶域を割り振る文は、次のようになります。

s1 = FNC_DefMem(sizeof(AGR_Storage));
次のいずれかの条件が成立する場合、FNC_DefMemはNULLポインタを戻します。
  • 集約関数が、CREATE FUNCTION文のCREATE FUNCTION句で指定されるinterim_sizeの値を超えるメモリを要求した場合。
  • CREATE FUNCTION文のCLASS AGGREGATE句でinterim_sizeの値が指定されておらず、集約関数がデフォルトの64バイトを超えるメモリを要求した場合。
  • 関数が、最大値である64000バイトを超えるメモリを要求した場合。

UDFがメモリなしのため処理を完了できない場合、関数はSQLSTATEエラー結果引数を設定してエラーを戻すことができます。