16.20 - 使用上の注意 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

DISTINCTとGROUP BY

DISTINCTが意味的にGROUP BYと同じである場合、最適化ルーチンはコストを基準にして判断し、ソート組み合わせと重複排除によって、または集約ステップによって重複を排除します。

DISTINCT演算子およびUDT

DISTINCT演算子を指定し、SELECT列リストにUDT列が含まれている場合、DISTINCT処理を実行するためにTeradata DatabaseはそのUDTの順序付け機能を適用します。

順序付け定義によっては、同じ問合わせでも異なる結果を返す可能性があります。これは、大文字と小文字を区別して文字列に対するDISTINCT処理を行なった結果が異なることと同様です。そのような問合わせを二度発行すると、異なる結果が返される可能性があります。
UDTの例については、以下の属性で構成される、CircleUdtという構造化UDTを考えてください。
  • x INTEGER
  • y INTEGER
  • r INTEGER

CircleUdtの外部タイプが、ASCII形式のxy、およびr構成要素を含む文字列であるとします。順序付け機能は、2つのCircleUdtインスタンスのr構成要素をマップおよび比較するように定義されています。

次の円のr値は両方とも9であるため、これらの円は等しいと考えられます。
  • NEW CircleUdt('1,1,9'), where x=1, y=1, and r=9
  • NEW CircleUdt('6,10,9')

システムは、DISTINCT結果セットの一部として、「1,1,9」を返すこともあれば、「6,10,9」を返すこともあります。

DISTINCTおよびラージ オブジェクト

DISTINCTも指定する場合、SELECTリクエストの選択リストにLOB列を含めることはできません。

次のテーブルに示されるように、LOB列を適切なデータ型にCASTする場合は、DISTINCTとともにそれらを指定することができますです。

LOB列にこのデータ型がある場合 このデータ型にCASTした場合にはDISTINCTで参照できる
BLOB
  • BYTE
  • VARBYTE
CLOB
  • CHARACTER
  • VARCHAR

DISTINCT演算子と利用できないSQL要素

以下のSQL要素は、DISTINCT演算子も指定するリクエストとともに指定することはできません。
  • WITHリクエスト修飾子
  • TOP n演算子
  • 再帰的問合わせの再帰文

    しかし、再帰的問合わせに含まれる非再帰的シード文では、DISTINCTを指定できます。

DISTINCT演算子での予期しない行長エラー

重複を除去するのに必要なソート操作を実行する前に、Teradata Databaseはソート キーを作成して、ソートする行に付加します。その一時データ構造の長さがシステム上の行長制約の64 KBを超えると、その操作は失敗し、エラーが返されます。状況に応じて、エラー メッセージのテキストは以下のようになります。
  • データ行が長すぎます。
  • database_object_nameの最大行長を超えました。

これらのメッセージについては、<Teradata Vantage™ - データベース メッセージ、B035-1096>を参照してください。

BYNETは、指定のフィールドをソートするために作成されたソート キーの最初の4,096バイトしか見ません。従って、ソート キーの基準になる列が4,096バイトより大きいと、そのキーは切り捨てられてしまい、集合内の行は、固有であっても重複として識別されたり、重複であっても固有として識別されます。