FNC_TblOpSetFormat - Teradata Database - Teradata Vantage NewSQL Engine

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/uhh1512082756414.ditamap
dita:ditavalPath
ja-JP/uhh1512082756414.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

目的

入力および出力ストリームの形式属性を設定します。これにより、コントラクト関数は構文解析プログラムへのデータ型の書式を指定することができます。

構文規則

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型の値をとります。フィールドレベルの形式はすべて、レコード全体に影響を及ぼします。
  • 外部サーバーからインポートされるデータにTeradata Databaseでサポートされていない文字が含まれている場合、FNC_ TblOpSetFormatを使用して、明示的に"CHARSETFMT"属性と"REPUNSPTCHR"属性を設定します。

形式属性の値

形式属性 説明
"RECFMT"
レコード形式を定義します。形式属性が「RECFMT」である場合、inValueバッファは Stream_Fmt_en型の値をとります。Stream_Fmt_en列挙定数はsqltypes_td.hヘッダー ファイルで次の値で定義されます:
  • INDICFMT1 = 1

    行セパレータ センチネル付きIndicData。

  • INDICBUFFMT1 = 2

    行/パーティション セパレータ センチネルなしIndicData。

"TZTYPE" TIME/TIMESTAMPデータを異なる形式でテーブル演算子から受信する、またはテーブル演算子に送信するためのTeradata Databaseへの識別子として使用されます。
  • Teradata Databaseファイル システムに格納されるRAW = 0
  • UTC = 1 as UTC
"CHARSETFMT"
  • EVLDBC

    データ変換も検出も必要としないことを示します。

  • EVLUTF16CHARSET

    Teradata Databaseにインポートされる外部データがUTF16エンコードであることを示します。

  • EVLUTF8CHARSET

    Teradata Databaseにインポートされる外部データがUTF8エンコードであることを示します。

"REPUNSPTCHR" サポートされていないUnicode文字がTeradata Databaseにインポートされる外部データで検出されるときの動作を指定するブール値。
  • true

    サポートされていない文字をU+FFFDに置き換えます。

  • false

    サポートされていない文字が検出された場合はエラーを返します。これはデフォルトの動作です。

TIME/TIMESTAMPデータのインポートとエクスポート

データをこれらの外部サーバーにインポートまたはエクスポートしているときに、Teradata Database TIMEデータ型とTIMESTAMPデータ型をHadoop STRINGデータ型またはOracle TIMESTAMPデータ型にマッピングできます。

テーブル演算子はFNC_TblOpSetFormatを使用して、tztype属性をTeradata Databaseへの識別子として設定し、TIMESTAMPデータをネイティブの調整した形式でテーブル演算子から受信したり、テーブル演算子に送信したりできます。

tztype属性は、インポート演算子およびエクスポート演算子に対し、次のように設定されます。
  • Hadoopの場合、属性はUTCに設定されます。
  • Oracleの場合、属性はUTCに設定されます。

変換がオフの場合、データはテーブルの演算子のデフォルトで、標準UDFと一貫したRAW形式で転送されます。

tztypeは、次のようにfnctypes.hで定義された構造FNC_FmtConfig_tのメンバーです:
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;
TZType_enは次のように定義されます:
typedef enum
{
   Raw = 0, /* as stored on TD File system */
   UTC = 1, /* as UTC */
} TZType_en;

エクスポートの場合、FNC_TblOpSetInputColTypesは意味解釈ルーチンのコントラクト フェーズで呼び出され、tztype属性を使用して必要なキャストを入力TIMEまたはTIMESTAMP列型に追加します。

Teradata DatabaseはTIMEおよびTIMESTAMPデータを文字型にキャストする前にセッション ローカル時間に変換します。そのため、TIME列またはTIMESTAMP列がHadoop STRING型へのマッピング時にcharfix/charvarにマッピングされるとき、データはセッション ローカル タイムゾーンで送信され、明示的キャストは不要になります。

インポートの場合、入力バッファをテーブル演算子から取得するときにTIMEデータまたはTIMESTAMPデータをRAW形式に変換する必要があります。Teradata Database TIMEデータ型またはTIMESTAMPデータ型へのHadoop Stringsのインポートに必要な変換はありません。文字からTeradata DatabaseのTIME/TIMESTAMPへの通常の変換パスの後に付くためです。

Teradataでは、timedatewzcontrolフラグ57 = 0でTeradata DatabaseシステムのTIME/TIMESTAMPデータをインポートまたはエクスポートすることは推奨しません。そのようなシステムの場合、TIME/TIMESTAMPデータはOSローカル時間で保存されます。システム/セッションのタイムゾーンは設定されず、Teradata DatabaseはTIME/TIMESTAMPデータのディスクからの読み取りまたは書き込み時に変換は適用しません。そのため、そのようなデータを外部サーバーによって指定される形式で安全にエクスポートすることには問題があり、TeradataではそのようなシステムにTeradata-to-Hadoopコネクタ機能を使用しないことを推奨しています。