17.10 - 使用上の注意 - MultiLoad

Teradata® MultiLoadリファレンス

Product
MultiLoad
Release Number
17.10
Release Date
2021年6月
Content Type
プログラミング リファレンス
Publication ID
B035-2409-061K-JPN
Language
日本語 (日本)

以下の表に、FIELDコマンドを使用する際の考慮事項を示します。

FIELD コマンドの使用手順
対象 使用上の注意
データ型の変更不可 datadescの入力レコード フィールドを再定義する場合、fieldname1パラメータを使用してデータ型を文字から小数に変更できません。Teradata MultiLoadジョブがエラー メッセージを出力して異常終了します。
コマンドの混在 1つ以上のFILLERコマンドをTABLEコマンドおよびFIELDコマンドと混在させることができます。これらのコマンドはすべて、LAYOUTコマンドに続けて指定します。
NULLIFのパフォーマンス 次のコマンドを使用します。
...
.FIELD fc * CHAR(5);
.FIELD fi * INTEGER;
... 

.DML LABEL ins;
INSERT INTO tbl1 VALUES
(...,NULLIF(:fc,'empty'),
NULLIF(:fi,0),...);

または次のような複雑な処理があったとします。

...
.FIELD fs * CHAR(1) ;
.FIELD fc * CHAR(5) NULLIF (fs <> 'M') AND (fs <> 'F');
.FIELD fi * INTEGER NULLIF fi < 0;
...

.DML LABEL ins; INSERT INTO tbl2
VALUES(...,:fs,:fc,:fi,...);
または
...
.FIELD fs * CHAR(1) ;
.FIELD fc * CHAR(5);
.FIELD fi * INTEGER;
... 

.DML LABEL ins;
INSERT INTO tbl2 VALUES(...,:fs,
  CASE WHEN (:fs = 'M') 
    OR (:fs = 'F') 
    THEN :fc ELSE NULL END, 
  CASE WHEN (:fi >= 0) 
    THEN :fi ELSE NULL END,...);
パラメータの評価順序 同じFIELDコマンドにNULLIFとDROP LEADING/TRAILING BLANKS/NULLSの両方を指定すると、NULLIF句の後にDROP句がTeradata MultiLoadによって評価されます。

例えば、次のFIELDコマンドのfield1に'x'を入力する場合、先行する空白はNULLIFの評価前に削除されないため、NULLIF式は偽と評価されます。

.FIELD FIELD1 * CHAR (5) NULLIF
FIELD1 = 'x'
DROP LEADING BLANKS;
DECIMALデータ型の指定 以下に、datadescパラメータで指定できるDECIMALデータ型の入力長とフィールド説明を示します。

DECIMAL(x)およびDECIMAL(x,y)

  • 長さ: ネットワークの場合は、1、2、4、8または16バイト。メインフレームの場合は、パック10進数。
  • 説明: 128ビットの2倍精度、浮動小数点

DECIMALデータ型についての詳細は、Teradata Vantage™ - データ型およびリテラル, B035-1143を参照してください。

Geospacial型 Teradata MultiLoadではLOBで表現された地理空間データがサポートされません。

最大64000

ARRAYデータ型の指定 Teradata表のARRAYデータ型として定義する列は、FIELDコマンドでVARCHARデータ型として指定する必要があります。ARRAYデータ型の外部表現はVARCHARです。

次に、COL003列に1次元のARRAYデータ型が含まれるTeradata表定義の例を示します。

CREATE SET TABLE SOURCE_TABLE ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      EMP_ID INTEGER,
      EMP_NO BYTEINT,
      COL003 SYSUDTLIB.PHONENUMBERS_ARY,
      COL004 SYSUDTLIB.DECIMAL_ARY,
      COL005 SYSUDTLIB.INTEGER_ARY)
UNIQUE PRIMARY INDEX ( EMP_ID );

以下はPHONENUMBERS_ARYデータ型のサンプル定義です。

CREATE TYPE PHONENUMBERS_ARY AS CHAR(10) CHARACTER SET LATIN ARRAY [2];

以下はDECIMAL_ARYデータ型のサンプル定義です。

CREATE TYPE DECIMAL_ARY AS DECIMAL(5,2) ARRAY[2];

以下はINTEGER_ARYデータ型のサンプル定義です。

CREATE TYPE INTEGER_ARY AS INTEGER ARRAY[2];

次に、Teradata MultiLoadのFIELD定義例として、SOURCE_TABLEの例を示します。

.FIELD  EMP_ID *  INTEGER;
   .FIELD  EMP_NO *  BYTEINT;
   .FIELD  COL003  *  VARCHAR(47);
   .FIELD  COL004  * VARCHAR(17);
   .FIELD  COL005  * VARCHAR(25);

上記の例では、COL003列はVARCHAR(47)と定義されています。これは、テーブルのCOL003列における表現の最大数がこの値であるためです。次に、COL003列の最大表現の計算における内訳を示します。

1バイト(左括弧)

+1バイト(単一引用符)

+10~20バイト(1番目の要素)

+1バイト(単一引用符)

+1バイト(カンマ)

+1バイト(単一引用符)

+10~20バイト(2番目の要素)

+1バイト(単一引用符)

+1バイト(右括弧)

----

47バイト

COL003列の 2 つのサンプル データ セットを次に示

サンプル データ1: ('3105551234','3105551234')

サンプル データ2: ('''''''''''''''''''''','''''''''''''''''''''')

サンプル データ1には、2つの電話番号要素が含まれています。サンプル データ2には、すべてが単一引用符の要素が2つ含まれています。

上記の例で、COL004列はVARCHAR(17)として定義されており、表内でのCOL004列の最大表示を17としています。

以下はCOL004列の最大表示の計算です。

1バイト(左括弧)

最初の要素用に+1~7バイトを追加

+1バイト(カンマ)

2番目の要素用に+1~7バイトを追加

+1バイト(右括弧)

----

17バイト

以下はCOL004列のサンプル データです。

サンプル データ1: (-123.45,888.10)

サンプル データ2: (+123.45,-888.10)

上記の例で、COL005列はVARCHAR(25)として定義されており、表内でのCOL005の最大表示を25としています。

以下はCOL005列の最大表示の計算です。

1バイト(左括弧)

+1~11バイト(1番目の要素)

+1バイト(カンマ)

+1~11バイト(1番目の要素)

+1バイト(右括弧)

----

25バイト

以下はCOL005列のサンプル データです。

サンプル データ1: (-2147483648,+2147483647)

サンプル データ2: (0,0)

ARRAYデータ型の最大長を調べるには、Teradata SQLの「HELP TYPE」コマンドを使用します。例えば、ARRAYデータ型例のPHONENUMBERS_ARY、DECIMAL_ARY、およびINTEGER_ARYなどの情報は次のように実行すると取得できます。

help type PHONENUMBERS_ARY;

 *** Help information returned. One row.
 *** Total elapsed time was 1 second.

    Name PHONENUMBERS_ARY
    Internal Type A1
    External Type CV
    Max Length            47
    Array(Y/N) Y
    Dimensions             1
    Element Type CF
    UDT Name ?
    Array Scope [1:2]
    Total Digits    ?
    Fractional Digits    ?
    Contains Lob N
    Ordering F
    Ordering Category M
    Ordering Routine LOCAL
    Cast N
    Transform Y
    Method Y
    Char Type  1

HELP TYPE DECIMAL_ARY;

 *** Help information returned. One row.
 *** Total elapsed time was 1 second.
 Name DECIMAL_ARY
    Internal Type A1
    External Type CV
    Max Length            17
    Decimal Total Digits    ?
    Decimal Fractional Digits    ?
    Contains Lob N
    Ordering F
    Ordering Category M
    Ordering Routine LOCAL
    Cast N
    Transform Y
    Method Y
    Char Type  1
    Array(Y/N) Y
    Dimensions             1
    Element Type D
    UDT Name ?
    Array Scope [1:2]

HELP TYPE INTEGER_ARY;

 *** Help information returned. One row.
 *** Total elapsed time was 1 second.Name INTEGER_ARY
    Internal Type A1
    External Type CV
    Max Length            25
    Decimal Total Digits    ?
    Decimal Fractional Digits    ?
    Contains Lob N
    Ordering F
    Ordering Category M
    Ordering Routine LOCAL
    Cast N
    Transform Y
    Method Y
    Char Type  1
    Array(Y/N) Y
    Dimensions             1
    Element Type I
    UDT Name ?
    Array Scope [1:2]

HELP TYPEコマンドで返された情報から、サンプルARRAYデータ型PHONENUMBERS_ARYの最大長は47バイトであることが分かります。同じくDECIMAL_ARYの最大長は17バイト、INTEGER_ARYの最大長は25バイトとなっています。

ARRAYデータ型の外部表現の詳細については、Teradata Vantage™ - データ型およびリテラル, B035-1143を参照してください。

グラフィック データ型の指定 以下に、datadescパラメータで指定できるGRAPHICデータ型の入力長とフィールド説明を示します。

GRAPHIC(n)

  • 長さ: nが指定されている場合はn*2バイト、指定されていない場合はn=1と見なされるので2バイト。
  • 説明: n個の2バイト文字(nは2バイト文字を単位とした入力ストリームの長さ)。

VARGRAPHIC(n)

  • 長さ: m/2 <= 16000で、m+2バイト。
  • 説明: 2バイトの整数とそれに続くm/2個の2バイト文字

LONG VARGRAPHIC

  • 長さ: m/2 <= 16000で、m+2バイト。
  • 説明: 2バイトの整数とそれに続くm/2個の2バイト文字。
LONG VARGRAPHICは、 VARGRAPHIC (16000)でもあります。有効範囲は、32000バイトのフィールドで0~16000です。VARGRAPHICとLONG VARGRAPHICの両方において、入力データの最初の2バイトを占める値mは、入力の長さを文字数でなくバイト数で表わしたものです。マルチバイト文字セットの各文字は2バイトです。
Periodデータ型の指定 期間は固定です。対象の期間での連続時間の粒度を表わします。期間はPeriodデータ型で実装されます。各期間は次の2つの要素で構成されます。
  • BEGIN(開始要素)
  • END(終了要素)

要素型は次のDateTimeデータ型の1つです。DATE、TIMEおよびTIMESTAMPがあります。

5つのPERIODデータ型に次が含まれます。

  • PERIOD(DATE)
  • PERIOD(TIME[(n)])
  • PERIOD(TIME[(n)] WITH TIME ZONE)
  • PERIOD(TIMESTAMP[(n)])
  • PERIOD(TIMESTAMP[(n)] WITH TIME ZONE)

PERIODデータ タイプの詳細については、Teradata Vantage™ - データ型およびリテラル, B035-1143を参照してください。

関連フィールドの指定 FIELDコマンドで指定したフィールドはすべてデータベースに送信されるため、Teradata MultiLoadタスクに関係のあるフィールドだけを指定します。
startposの指定 指定した開始位置は次のようになります。
  • LAYOUTコマンドのCONTINUEIF句ごとの、カラムの削除をすべて反映する。
  • LAYOUTコマンドのINDICATORS指定ごとのインジケーター バイトをすべて無視する。
  • 文字位置1との関係で指定される。

つまり、入力したレコードの最初のデータ位置は1です。

CONTINUEIF指定とINDICATORS指定の詳細については、LAYOUTコマンドの説明を参照してください。

ANSI/SQL DateTimeデータ型の使用 DATEFORMコマンドを使用して、ANSIDATEをDATEデータ型として指定すると、各DATEフィールドはCHAR(10)フィールドにTeradata MultiLoadによって内部変換されます。Teradata MultiLoadのFIELDコマンドで列/フィールド名を指定するためには、ANSI/SQL DateTimeのTIME、TIMESTAMP、およびINTERVALの各データ型をすべて固定長CHARデータ型に変換する必要があります。

このセクション(ANSI/SQL DateTime指定)の次の表では、ANSI/SQL DateTimeの各仕様について、変換の仕様とフォーマットの例を示しています。

次の表に、FIELDコマンドを使用する際のDate/Time情報の考慮事項を示します。

最新の変換の指定と各ANSI/SQL DateTimeの指定の書式例については、Teradata Vantage™ - データ型およびリテラル, B035-1143の「INTERVAL型の説明」を参照してください。

ANSI/SQL DateTime指定
データ型 変数の定義 変換例
INTERVAL YEAR

INTERVAL YEAR (n)

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n+1)

書式(n = 2):yy

例: 98

書式(n = 4): yyyy

例: 1998

INTERVAL YEAR TO MONTH

INTERVAL YEAR (n) TO MONTH

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n + 4)

書式(n = 2): yy-mm

例: 98-12

書式(n = 4): yyyy-mm

例: 1998-12

INTERVAL MONTH

INTERVAL MONTH (n)

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n+1)

書式(n = 2): mm

例: 12

書式(n = 4): mmmm

例: 0012

INTERVAL DAY

INTERVAL DAY (n)

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n+1)

書式(n = 2): dd

例: 31

書式(n = 4): dddd

例: 0031

INTERVAL DAY TO HOUR

INTERVAL DAY (n) TO HOUR

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n + 4)

書式(n = 2): dd hh

例: 31 12

書式(n = 4): dddd hh例: 0012:59

例: 0031 12

INTERVAL DAY TO MINUTE

INTERVAL DAY (n) TO MINUTE

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n + 7)

書式(n = 2): dd hh:mm

例: 31 12:59

書式(n = 4): dddd hh:mm

例: 0031 12:59

INTERVAL DAY TO SECOND

INTERVAL DAY (n) TO SECOND

INTERVAL DAY TO SECOND (m)

INTERVAL DAY (n) TO SECOND (m)

n = 桁数

有効な値: 1-4

デフォルト=2

m = 小数点以下の桁数

有効な値: 0-6

デフォルト=6

CHAR(n + 10 + m + (m> 0の場合は1、それ以外の場合は0))

書式(n = 2, m = 0): hh:mm:ss

例: 12:59:59

書式(n = 4, m = 4): hhhh:mm:ss.ssss

例: 0012:59:59.1234

INTERVAL HOUR

INTERVAL HOUR (n)

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n+1)

書式(n = 2): hh

例: 12|

書式(n = 4): hhhh

例: 0012

INTERVAL HOUR TO MINUTE

INTERVAL HOUR (n) TO MINUTE

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n + 4)

書式(n = 2): hh:mm

例: 12:59

書式(n = 4): hhhh:mm

例: 0012:59

INTERVAL HOUR TO SECOND

INTERVAL HOUR (n TO SECOND

INTERVAL HOUR TO SECOND (m)

INTERVAL HOUR (n) TO SECOND (m)

n = 桁数

有効な値: 1-4

デフォルト=2

m=小数点以下の桁数

有効な値: 0-6

デフォルト=6

CHAR( n + 7+ m + (m >0の場合は1、それ以外の場合は0))

書式(n = 2, m = 0): hh:mm:ss

例: 12:59:59

書式(n = 4, m = 4): hhhh:mm:ss.ssss

例: 0012:59:59.1234

INTERVAL MINUTE

INTERVAL MINUTE (n)

n = 桁数

有効な値: 1-4

デフォルト=2

CHAR(n+1)

書式(n = 2): mm

例: 59

書式(n = 4): mmmm

例: 0059

INTERVAL MINUTE TO SECOND

INTERVAL MINUTE (n) TO SECOND

INTERVAL MINUTE TO SECOND (m)

INTERVAL MINUTE (n) TO SECOND (m)

n = 桁数

有効な値: 1-4

デフォルト=2

m = 小数点以下の桁数

有効な値: 0-6

デフォルト=6

CHAR( n + 4 + m + (m > 0の場合は1、それ以外の場合は0))

書式(n = 2, m = 0): mm:ss

例: 59:59

書式(n = 4, m = 4): mmmm:ss.ssss

例: 0059:59.1234

INTERVAL SECOND

INTERVAL SECOND (n)

INTERVAL SECOND (n,m)

n = 桁数

有効な値: 1-4

デフォルト=2

m = 小数点以下の桁数

有効な値: 0-6

デフォルト=6

CHAR( n + 1 + m + (m > 0の場合は1、それ以外の場合は0))

書式(n = 2, m = 0): ss

例: 59

書式(n = 4, m = 4): ssss.ssss

例: 0059.1234

TIME

TIME (n)

n = 小数点以下の桁数

有効な値: 0–6

デフォルト

CHAR(8 + n + (n> 0の場合は1、それ以外の場合は0))

書式(n = 0): hh:mm:ss

例: 11:37:58

書式(n = 4): hh:mm:ss.ssss

例: 11:37:58.1234

TIMESTAMP

TIMESTAMP (n)

n = 小数点以下の桁数

有効な値: 0–6

デフォルト=6

CHAR(19 + n + (n > 0の場合は1、それ以外の場合は0))

書式(n = 0): yyyy-mm-dd hh:mm:ss

例: 1998-09-04 11:37:58

書式(n = 4): yyyy-mm-dd hh:mm:ss.ssss

例: 1998-09-04 11:37:58.1234

TIME WITH TIME ZONE

TIME (n) WITH TIME ZONE

n = 小数点以下の桁数

有効な値: 0–6

デフォルト=6

CHAR(14 + n + (n > 0の場合は1、それ以外の場合は0))

書式(n = 0): 
hh:mm:ss{±}hh:mm

例: 11:37:58-08:00

書式(n = 4): hh:mm:ss.ssss{±}hh:mm

例: 11:37:58.1234-08:00

TIMESTAMP WITH TIME ZONE

TIMESTAMP (n) WITH TIME ZONE

n = 小数点以下の桁数

有効な値: 0-6

デフォルト= 6

CHAR(25 + n + (n > 0の場合は1、それ以外の場合は0))

書式(n = 0): yyyy-mm-dd hh:mm:ss{±}hh:mm

例: 1998-09-24 11:37:58+07:00

書式(n = 4): yyyy-mm-dd hh:mm:ss.ssss{±}hh:mm

例: 1998-09-24 11:37:58.1234+07:00