例: ローカル結果を集約する - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - DATASETデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/des1556232910526.ditamap
dita:ditavalPath
ja-JP/des1556232910526.ditaval
dita:id
B035-1198
Product Category
Software
Teradata Vantage

すべてのAMPから最終結合を行なうには、各AMPのローカル結果を集約します。これを行なうには、DATASET_PUBLISHへの2番目の呼び出しをネストします。DATASET_PUBLISHへの内部呼び出しは各AMPでのローカル集約を実行し、外部呼び出しはローカル集約の最終集約を行ない、すべての入力値を表わす単一の結果行を生成します。

PARTITION BY句を定数値(例: 1)とともに使用して、最終的な集約を1つのAMPで実行します。数値1のような定数値を指定することで、各AMPからローカルで集約された行は同じパーティションに含まれるため、最終的な集約で同じAMPに再分散されます。外部クエリーはこの定数でパーティション化されます。例では"1 as p"と示されています。 1つの出力行が返されます。 スキーマを結合するときに重複が発生しないようにUNIQUE_NAMESカスタム句を指定する必要があります。

さらに、ドット表記法を使用して集約結果を参照します。ここで、再帰的下降演算子は内部DATASET_PUBLISHクエリー結果を参照します。次にワイルドカード*で構成される配列参照が続きます。これによって1入力行1レコードで構成される1つの配列を取得します。最終的なクエリーは次のようになります。

select data.getSchema(), data..record[*] FROM DATASET_PUBLISH 
( 
	ON (SELECT data as record, 1 as p FROM DATASET_PUBLISH
	(
		ON (SELECT * FROM employeeTable)
		USING UNIQUE_NAMES('Y')
	)as L
) partition by p
)G;
data.getSchema()
data..record[*]
{
	"type": "array",
	"items": {
		"type": "record",
		"name": "rec_0",
		"fields": [{
			"name": "record",
			"type": {
				"type": "record",
				"name": "rec_0_1448384735",
				"fields": [{
					"name": "empID",
					"type": "int"
				},
				{
					"name": "empName",
					"type": "string"
				},
				{
					"name": "empDept",
					"type": "string"
				}]
			}
		},
		{
			"name": "p",
			"type": "int"
		}]
	}
}
[{
	"empID": 5,
	"empName": "Kyle Newman",
	"empDept": "Engineering"
},
{
	"empID": 3,
	"empName": "Steven Mazzo",
	"empDept": "Engineering"
},
{
	"empID": 1,
	"empName": "George Smith",
	"empDept": "Accounting"
},
{
	"empID": 2,
	"empName": "Pauline Kramer",
	"empDept": "HR"
},
{
	"empID": 6,
	"empName": "Pamela Giles",
	"empDept": "Sales"
},
{
	"empID": 4,
	"empName": "Jose Hernandez",
	"empDept": "Engineering"
}]

定数値で区切ることで、すべての値をDATASET_PUBLISHの1回の呼び出しで集約できます。これによってすべての行が1つのAMPに再分散され集約が実行されます。これはTeradata Databaseの並列処理機能を利用していません。DATASET_PUBLISHを2回呼び出しすることで、AMPはローカル集約を並行して実行し、1つのAMPで最終集約のみが実行されます。