C構造体による記憶域へのアクセス - Teradata Database - Teradata Vantage NewSQL Engine

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/uhh1512082756414.ditamap
dita:ditavalPath
ja-JP/uhh1512082756414.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

集約関数で保存することが必要な中間結果の型は、関数の実行する計算の種類によって異なります。

下記の式を使用して標準偏差を計算する関数STD_DEV(x)があるとします。



この計算式に基づいて、関数では次のデータを記憶する必要があります。
  • N
  • sum(X2)
  • sum(X)

この関数では、必要な中間値に対応する要素を含む、次のようなCの構造体を宣言できます。

typedef struct agr_storage {
    FLOAT n;
    FLOAT x_sq;
    FLOAT x_sum;
} AGR_Storage;

次に、関数引数のFNC_Context_t.interim1を参照するAGR_Storageへのポインタを定義することができます。

関数宣言でのパラメータが、次のようになっているとします。

void STD_DEV ( FNC_Phase     phase,
               FNC_Context_t *fctx,
               FLOAT         *x,
               FLOAT         *result,
               char          sqlstate[6] )
{
     ...
}

下記の文により、関数引数FNC_Context_t.interim1を参照するAGR_Storageへのポインタs1を定義します。

AGR_Storage *s1 = fctx->interim1;

このようにしておけば、AGR_Storageへのポインタを使用することにより、記憶域へのアクセスが容易になります。例えば、次のようになります。

s1->n     = 0;
s1->x_sq  = 0;
s1->x_sum = 0;