17.00 - 17.05 - tdr.GetAttributeByNdx - 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
日本語 (日本)

目的

現在の入力ストリーム行から個々の属性を取得します。

構文

tdr.GetAttributeByNdx(  handle,  index,  coldef)
handle
パラメータ型: raw vector

tdr.Open関数によって返される入力ストリームのハンドル。

index
パラメータ型: integer

属性のインデックス。有効範囲は0からn-1です。nはストリームの属性数です。インデックス0は最初の属性を示します。

coldef
パラメータ型: list

ストリームのスキーマ。このスキーマは、列数と各列の定義を含むリストです。各定義には、特定の列のデータ型の列情報が含まれます。これはtdr.GetColDef関数の呼び出しの戻り値です。

coldefがNULLの場合、関数はcoldef情報を取得します。

戻り値

この関数は、以下のいずれかの結果を返します。
  • 選択した属性値を表わすリスト。このリストは、以下の3つの要素から構成されています。
    • value
    • nullindicator
    • length

    nullindicatorに値-1が含まれている場合、属性はNULLです。

    valueのタイプは、属性タイプによって異なります。Teradata属性タイプからRタイプへのマッピングについては、Teradataデータ型とR型間のマッピングを参照してください。

  • エラーが発生した場合はNULL。
    エラー条件には次のようなものがあります。
    • ハンドルが出力ストリームと関連している場合。
    • 入力ストリームが開いていない場合。
    • インデックスが無効な場合。
    • coldefリストに無効なデータ型、またはそのデータ型の属性の不完全なセットが含まれている場合。
    • 属性がタイプ リストのものではない場合。
    • この関数はコントラクト関数内で呼び出されました。

使用上の注意

coldefパラメータを使用して、パフォーマンスを向上させることができます。coldef情報を関数に渡すと、関数は呼び出しの度にその情報を取得する必要がなくなります。ただし、オプションで代わりにNULLを渡すと、関数はcoldef情報を取得します。

この関数を呼び出す前に、tdr.Open関数を呼び出して入力ストリームをオープンする必要があります。次にtdr.Openからこの関数の引数として返されたハンドルを渡します。

この関数は、テーブル演算子から呼び出された場合にのみ有効です。

例: 入力ストリームの行からの最初の属性の取得

# 入力ストリームをオープン。
library(tdr);
stream <- 0;
options <- 0;
direction <- "R";
inHandle <- tdr.Open(direction, stream, options);

# データ フレームが取得された属性で作成されます。

mydataframe <- data.frame();
while (tdr.Read(inHandle) == 0) {
  att <- tdr.GetAttributeByNdx(inHandle, 0, NULL);
  newrow <- data.frame(att$value);
  mydataframe <- rbind(mydataframe, newrow);
}

最初の属性がINTEGER型で、値が11の行を含む入力ストリームを考えます。この行のオブジェクトattは、以下のリストのようになります。

$length
[1] 4
$value
[1] 11
$nullIndicator
[1] 0

属性valueは整数です。

前の例をオプションで書き込み、coldef情報をtdr.GetAttributeByNdx関数に渡すことができます。問合わせのパフォーマンスが向上します。

mydataframe <- data.frame();
coldef <- tdr.GetColDef(streamno, direction);
while (tdr.Read(inHandle) == 0) {
  att <- tdr.GetAttributeByNdx(inHandle, 0, coldef);
  newrow <- data.frame(att$value);
  mydataframe <- rbind(mydataframe, newrow);
}