FNC_Where_Am_I - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/rin1593638965306.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

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

Vproc_Info_t構造体へのポインタを返します。

構文

Vproc_Info_t *
FNC_Where_Am_I (void);
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 */
}