setFormat - 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

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

構文

public void  setFormat(
   int  stream,
   InputInfo.StreamDir  dir,
   java.util.Map<StreamFormat.FormatAttribute,java.lang.Object>  formatattributes)

構文要素

stream
INパラメータ。形式が適用されるストリームを示します。現在有効な値は0のみです。
dir
INパラメータ。ストリームの方向(入力または出力)。
formatattributes
INパラメータ。適用される属性値のマップ。有効な属性は、以下のとおりです。
  • "RECFMT"
  • "TZTYPE"
  • "CHARSETFMT"
  • "REPUNSPTCHR"
"CHARSETFMT"と"REPUNSPTCHR"は、テーブル演算子のインポートにのみ適用されます。

使用上の注意

  • このルーチンは、テーブル演算子のコントラクト関数内で呼び出された場合にのみ有効です。
  • "RECFMT"のデフォルト値はINDICFMT1で、形式は行セパレータ センチネル付きIndicDataです。フィールドレベルの形式はすべて、レコード全体に影響を及ぼします。
  • 外部サーバーからインポートされるデータにサポートされていない文字が含まれている場合は、setFormat()を使用して、明示的に"CHARSETFMT"属性と"REPUNSPTCHR"属性を設定します。
  • 形式属性の値:
    パラメータ名 定義
    "RECFMT" レコード形式を定義します:
    • INDICFMT1 = 1

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

    • INDICBUFFMT1 = 2

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

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

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

    • EVLUTF16CHARSET

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

    • EVLUTF8CHARSET

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

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

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

    • false

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

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

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

    テーブル演算子はsetFormat()を使用して、tztype属性をVantageへの識別子として設定し、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;

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

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

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

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