17.00 - 17.05 - FNC_Where_Am_I - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

目的

現在実行中の外部ルーチンの特定のノードID、vproc ID、vprocタイプ、およびタスクIDに関する情報を提供します。これは呼び出し元に応じて、外部ルーチンがGLOPデータを編成する場合に役立ちます。

構文規則

Vproc_Info_t *
FNC_Where_Am_I(void);

戻り値

FNC_Where_Am_Iは、Vproc_Info_t構造体へのポインタを戻します。

Vproc_Info_t構造体は次のように定義されています。

typdedef struct
{
   unsigned short NumAMPs;
   unsigned short NumPEs;
   unsigned short NodeId;
   unsigned short VprocId;
   vproc_type     Vtype;
} Vproc_Info_t;

説明

メンバー 指定内容
NumAMPs システム内のオンラインAMPの合計数。
NumPEs システム内のPEの合計数。
NodeId ノードの固有番号。
VprocId vprocの固有番号。
Vtype vprocのタイプ。vproc_type列挙は以下のように定義されます。
typedef enum
{
   UNK_VPROC = 0    /* vproc type unknown */
   AMP_VPROC = 1,   /* AMP vproc */
   PE_VPROC = 2     /* PE vproc */
} vproc_type;

使用上の注意

FNC_Where_Am_Iは、各タイプ(AMPおよびPE)のvprocの数、および外部ルーチンが実行しているノード、vproc、vprocのタイプに関する情報を提供します。外部ルーチンは、FNC_Where_Am_Iを使用して、AMPの代わりにPEを実行するときに異なるセットアップを必要とすることがあるGLOPデータ、またはグローバル コピー操作でAMP vprocの数に基づいて分割を必要とすることがあるデータを構成することができます。

FNC_Where_Am_Iの使用例

以下に示すのは、外部ルーチンが、FNC_Where_Am_Iを使用して、実行しているプロセッサのタイプを検出し、AMP上で実行している場合にトランザクション関連GLOP変更だけを処理する方法を示すコード抜粋です。

#define TRAN_MAP  0
Sysinfo_t     SysInfoPtr;
GLOP_Map_t   *MyGLOP;
Vproc_Info_t *MyVproc_info;
int           glop_stat;

   . . .

 MyVproc_info = FNC_Where_Am_I(); 

/* only bother with GLOP map if we are running on an AMP */
if (MyVproc->Vtype == AMP_VPROC)
{
   glop_stat = FNC_Get_GLOP_Map(&MyGLOP);

   if (glop_stat)
      ... process error: Not a member of any GLOP set
   if ( MyGLOP->GLOP[TRAN_MAP].GLOP_Ptr == NULL)
   {
      ... process error: Transaction GLOP does not exist
   };
   SysInfoPtr = MyGLOP->GLOP[TRAN_MAP].GLOP_ptr;

   . . .

}
else
{
   /* do non AMP processing here */
}