目的
現在の入力ストリーム行から個々の属性を取得します。
構文
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); }