例: CSVデータのシュレッディング - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ DATASETデータ型

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

VARCHARまたはCLOBとして表わされる既存のCSVデータを、Teradata Databaseの既存のリレーショナル テーブルにインポートすることができます。これは「シュレッディング」と呼ばれ、DATASET_TABLEテーブル演算子を使用します。

例: CSVデータのTeradata Databaseテーブルへのシュレッディング

CreateDATASETを使用して、CSVデータをCSV格納形式のDATASET値に変換します。CSVデータが標準のCSV形式に従わない場合(例えば、異なる列またはレコードの区切り記号がある場合)、スキーマを指定します。次にDATASET_TABLEはCSVデータをTeradataデータベース テーブルにシュレッディングします。DATASET_TABLEを使用して、'column_expression_literal' USING仕様を使用してCSV値で各列データ型を指定します。

CREATE TABLE empTableFromCSV(
 empID INTEGER, 
 empName VARCHAR(20),
 empSalary INTEGER);

例: CSV列とテーブル列の位置合わせ

*+csv11.txt+*
empID,empName,empSalary
1,John,100000
2,Sam,50000
3,Mary,75000

.import vartext file csv11.txt
USING (c1 VARCHAR(1000))
INSERT INTO empTableFromCSV 
SELECT * FROM DATASET_TABLE (
 ON (SELECT CreateDATASET(NULL, :c1, CSV))
 USING rowexpr('') 
   colexpr(
  '[ {"dotnotation" : "$..empID",
      "type" : "INTEGER"},
     {"dotnotation" : "$..empName",
              "type" : "VARCHAR(20)"} ,
     {"dotnotation" : "$..empSalary",
              "type" : "INTEGER"} ]')
) AS Emp(empID, empName, empSalary);

SELECT * FROM empTableFromCSV ORDER BY 1;
結果のテーブルには次の3つの行があります。
empID empName empSalary
1 John 100000
2 Sam 50000
3 Mary 75000

例: CSV列とテーブル名は同じであるが、位置合わせされない

*+csv12.txt+*
empID,empSalary,empName
4,100000,Kate
5,50000,Rob
6,75000,Peter
CSV列とテーブル名を位置合わせする手順:
.import vartext file csv12.txt
USING (c1 VARCHAR(1000))
INSERT INTO empTableFromCSV(empID,empSalary,empName) 
SELECT * FROM DATASET_TABLE (
 ON (SELECT CreateDATASET(NULL, :c1, CSV))
 USING rowexpr('') 
   colexpr(
  '[ {"dotnotation" : "$..empID",
      "type" : "INTEGER"},
     {"dotnotation" : "$..empSalary",
              "type" : "INTEGER"} ,
     {"dotnotation" : "$..empName",
              "type" : "VARCHAR(20)"} ]')
) AS Emp(empID, empSalary, empName);

例: スキーマをCreateDATASETに渡す

この例では、CSVにはヘッダーはありませんが、値はターゲット テーブルに完全に位置合わせされます。スキーマをCreateDATASET関数に渡して、CSV値にヘッダー行がないことを示すことができます。
*+csv13.txt+*
7,Matt,100000
8,Mark,50000
9,Luke,75000

.import vartext file csv13.txt
USING (c1 VARCHAR(1000))
INSERT INTO empTableFromCSV 
SELECT * FROM DATASET_TABLE (
 ON (SELECT CreateDATASET('{"field_names":NULL}':c1, CSV))
 USING rowexpr('')
   colexpr(
  '[ {"dotnotation" : "$..empID",
     "type" : "INTEGER"},
     {"dotnotation" : "$..empName",
              "type" : "VARCHAR(20)"} ,
     {"dotnotation" : "$..empSalary",
              "type" : "INTEGER"} ]')
) AS Emp(empID, empName, empSalary);

例: テーブル内のすべての従業員を返す

SELECT * FROM empTableFromCSV ORDER BY 1;
empID empName empSalary
1 John 100000
2 Sam 50000
3 Mary 75000
4 Kate 100000
5 Rob 50000
6 Peter 75000
7 Matt 100000
8 Mark 50000
9 Luke 75000