17.10 - DATASETデータを格納するテーブルの作成と変更 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - DATASETデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1198-171K-JPN
Language
日本語 (日本)

CREATE TABLE文では、DATASETデータ型の列レベル属性をサポートしています。

列レベルのスキーマまたはインスタンス レベルのスキーマを使用して、DATASETテーブル列を定義できます。

列レベルのスキーマ

通常、テーブル列内のすべてのDATASET値は同じスキーマを継承しています。このような場合は、スキーマをテーブル列に関連付けることが適切です。CREATE storage_format SCHEMA文を使用してスキーマを指定し、CREATEまたはALTER TABLE文のWITH SCHEMA句を使用して、このスキーマにDATASET列を関連付けることができます。

列レベルのスキーマを使用すると、次のようなストレージとパフォーマンスの利点があります。
  • スキーマは、データ ディクショナリ内に一度格納されます。行に各DATASET値とともに格納されません。この結果、I/Oが減少するため、パフォーマンスはわずかに低下するものの、ストレージ領域を大幅に削減できます。
  • 多くの場合、スキーマは、クエリーの実行中にDATASET列に対して一度だけ解析する必要があります。スキーマの解析にはコストがかかるため、これにより大幅なパフォーマンス向上を実現できます。
次の例は、列レベルのスキーマを使用する、Avro格納形式のDATASET列を示しています。
CREATE AVRO SCHEMA avro_schema_1 as '{"type":"record",
    "name":"rec_0","fields":[
        {"name":"ProductID","type":"int"},
        {"name":"Price","type":"int"}
]}';
CREATE TABLE mytable(c1 INTEGER, c2 DATASET STORAGE FORMAT AVRO WITH SCHEMA avro_schema_1);
次の例は、列レベルのスキーマを使用する、CSV格納形式のDATASET列を示しています。
CREATE CSV SCHEMA myCSVSchema AS
'{
"field_delimiter" : "\t",
"record_delimiter" : ";"
}';
CREATE TABLE myDatasetTable02
(
id INTEGER,
csvFile DATASET(100000) INLINE LENGTH 5000 STORAGE FORMAT CSV CHARACTER SET LATIN WITH SCHEMA myCSVSchema
);

インスタンス レベルのスキーマ

CREATEまたはALTER TABLE文でWITH SCHEMA句を省略すると、DATASETの値はインスタンス レベルのスキーマを使用して定義されます。この場合、スキーマとデータの両方がデータベース行内に格納されます。これにより、DATASETテーブルの列に、異なるスキーマを持つデータ値を格納できます。この柔軟性と引き換えに、ストレージ使用量の増加と、スキーマ解析によるパフォーマンスの低下が生じます。

次に、CSV格納形式のDATASET値に対するインスタンス レベルのスキーマを示します。
CreateDATASET
(
'{"field_delimiter":"&", "record_delimiter":"#" }', 
'Item ID&Item Name&Item Color #55&bicycle&red#88&toy boat&pink#105&soap&#', 
CSV, 
UNICODE
)

DATASETの妥当性検査を無効にする

DATASETの値がDATASETテーブルの列に挿入されると、スキーマとデータ値が検証され、パフォーマンスが低下する可能性があります。DATASET列が列レベルのスキーマを使用して定義されている場合でも、挿入時にデータをスキーマと照らし合わせて検証する必要があります。この妥当性検査を無効にするには、DBSコントロール フィールドのDisableDATASETValidationをTRUEに設定します。