目的
入力および出力ストリームの形式属性を設定します。これにより、コントラクト関数は構文解析プログラムへのデータ型の書式を指定することができます。
構文規則
void FNC_TblOpSetFormat(char *attribute, int streamno, Stream_Direction_en direction, void *inValue, int inSize);
- char *attribute
- INパラメータ。
設定する形式属性。
有効な属性は、以下のとおりです。- "RECFMT"
- "TZTYPE"
- "CHARSETFMT"
- "REPUNSPTCHR"
"CHARSETFMT"と"REPUNSPTCHR"は、テーブル演算子のインポートにのみ適用されます。
- int streamno
- INパラメータ。
ストリーム番号。
- Stream_Direction_en direction
- INパラメータ。
ストリームの方向'R'または'W'。
- void *inValue
- INパラメータ。
形式属性の新しい値の位置。
- int inSize
- INパラメータ。
inValueが指す新しい値のバイト単位のサイズ。
使用上の注意
- このルーチンは、テーブル演算子のコントラクト関数内で呼び出された場合にのみ有効です。
- "RECFMT"のデフォルト値はINDICFMT1で、形式は行セパレータ センチネル付きIndicDataです。形式属性が「RECFMT」である場合、inValueバッファは Stream_Fmt_en型の値をとります。フィールドレベルの形式はすべて、レコード全体に影響を及ぼします。
- 外部サーバーからインポートされるデータにデータベースでサポートされていない文字が含まれている場合、FNC_ TblOpSetFormatを使用して、明示的に"CHARSETFMT"属性と"REPUNSPTCHR"属性を設定します。
形式属性の値
形式属性 | 説明 |
---|---|
"RECFMT" | レコード形式を定義します。形式属性が「RECFMT」である場合、inValueバッファは Stream_Fmt_en型の値をとります。Stream_Fmt_en列挙定数はsqltypes_td.hヘッダー ファイルで次の値で定義されます:
|
"TZTYPE" | TIME/TIMESTAMPデータを異なる形式でテーブル演算子から受信する、またはテーブル演算子に送信するためのデータベースへの識別子として使用されます。
|
"CHARSETFMT" |
|
"REPUNSPTCHR" | サポートされていないUnicode文字がデータベースにインポートされる外部データで検出されるときの動作を指定するブール値。
|
TIME/TIMESTAMPデータのインポートとエクスポート
データをこれらの外部サーバーにインポートまたはエクスポートしているときに、データベース TIMEデータ型とTIMESTAMPデータ型をHadoop STRINGデータ型またはOracle TIMESTAMPデータ型にマッピングできます。
テーブル演算子はFNC_TblOpSetFormatを使用して、tztype属性をデータベースへの識別子として設定し、TIMESTAMPデータをネイティブの調整した形式でテーブル演算子から受信したり、テーブル演算子に送信したりできます。
- Hadoopの場合、属性はUTCに設定されます。
- Oracleの場合、属性はUTCに設定されます。
変換がオフの場合、データはテーブルの演算子のデフォルトで、標準UDFと一貫したRAW形式で転送されます。
typedef struct { int Stream_Fmt_en recordfmt; //enum - indicdata, fastload binary, delimited bool inlinelob; //inline or deferred bool UDTTransformsOff; //true or false bool PDTTransformsOff; //true or false bool ArrayTransformsOff; //true or false char auxinfo[128]; //For delimited text can contain the record separator, delimiter //specification and the field enclosure characters double inperc; //recommended percentage of buffer devoted to input rows bool inputnames; //send input column names to step bool outputnames; //send output column names to step TZType_en tztype; //enum - Raw or UTC int charsetfmt; // charset format of data to be imported into TD through QG bool replUnsprtedUniChar; /* true - replace unsupported unicode character encountered with U+FFFD when data is imported into TD through QG false - error out when unsupported unicode char encountered */ } FNC_FmtConfig_t;
typedef enum { Raw = 0, /* as stored on TD File system */ UTC = 1, /* as UTC */ } TZType_en;
エクスポートの場合、FNC_TblOpSetInputColTypesは意味解釈ルーチンのコントラクト フェーズで呼び出され、tztype属性を使用して必要なキャストを入力TIMEまたはTIMESTAMP列型に追加します。
データベースはTIMEおよびTIMESTAMPデータを文字型にキャストする前にセッション ローカル時間に変換します。そのため、TIME列またはTIMESTAMP列がHadoop STRING型へのマッピング時にcharfix/charvarにマッピングされるとき、データはセッション ローカル タイムゾーンで送信され、明示的キャストは不要になります。
インポートの場合、入力バッファをテーブル演算子から取得するときにTIMEデータまたはTIMESTAMPデータをRAW形式に変換する必要があります。データベース TIMEデータ型またはTIMESTAMPデータ型へのHadoop Stringsのインポートに必要な変換はありません。文字からデータベースのTIME/TIMESTAMPへの通常の変換パスの後に付くためです。