WRITE_NOSの例 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL演算子およびユーザー定義関数

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/fsi1592016213432.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1210
Product Category
Software
Teradata Vantage

ここに示す例は、デモのみを目的としています。完全に実行可能な一連のWRITE_NOSの例については、<Teradata Vantage™- Native Object Store入門ガイド、B035-1214>を参照してください。

パーティション化によるVantageテーブルから外部ストレージへの全データ書き込み

以下に、ネイティブ リレーショナル データベース テーブルから全データを外部オブジェクト ストレージに書き込む例を示します。データは書き込みの前にVantageAdvanced SQL Engineによってパーティション化(ソート)され、外部ストレージ内のデータを含むオブジェクトには、それらに含まれるソート済みデータを反映した名前が付けられます。

SELECT NodeId, AmpId, Sequence, ObjectName, ObjectSize, RecordCount
FROM WRITE_NOS_FM (
 ON  ( SELECT * FROM RiverFlowPerm )
  PARTITION BY SiteNo ORDER BY SiteNo
 USING
  LOCATION('YOUR-STORAGE-ACCOUNT/RiverFlowPerm_PartitionBy/')
  STOREDAS('PARQUET')
  NAMING('DISCRETE')
  MANIFESTFILE('YOUR-STORAGE-ACCOUNT/RiverFlowPerm_PartitionBy/flowdata_manifest.json')
  INCLUDE_ORDERING('TRUE')
  MAXOBJECTSIZE('4MB')
  COMPRESSION('GZIP')
) AS d 
ORDER BY AmpId;
ここでは、効率的な表示のために、結果セットの例から4行を縦方向のレイアウト(列名が左側)で示しています。
     NodeId          33
      AmpId           0
   Sequence           1
 ObjectName YOUR-STORAGE-ACCOUNT/RiverFlowPerm_PartitionBy/09497500/object_33_0_1.parquet
 ObjectSize       27682
RecordCount        2944

     NodeId          33
      AmpId           0
   Sequence           1
 ObjectName YOUR-STORAGE-ACCOUNT/RiverFlowPerm_PartitionBy/09513780/object_33_0_1.parquet
 ObjectSize       19136
RecordCount        2941

     NodeId          33
      AmpId           0
   Sequence           1
 ObjectName YOUR-STORAGE-ACCOUNT/RiverFlowPerm_PartitionBy/09424900/object_33_0_1.parquet
 ObjectSize       23174
RecordCount        2946

     NodeId          33
      AmpId           0
   Sequence           1
ObjectName YOUR-STORAGE-ACCOUNT/RiverFlowPerm_PartitionBy/flowdata_manifest.json
ObjectSize          513
RecordCount           ?

[...]
この例での注意事項:
  • 結果セットの各行は、外部ストレージに書き込まれる1つのオブジェクトを記述します。で終わる名前を持つデータ オブジェクトには.parquetからのデータを含んでいます。Vantage.json拡張子で終わる名前を持つオブジェクトはマニフェスト ファイルで、他のデータ オブジェクトの後に書き込まれます。
  • 各データ オブジェクトには、PARTITION BY句に即して作成された1つのパーティションのデータが含まれています。この場合、データ収集サイトごと、つまりSiteNo列の値ごとに1つのパーティションがあります。
  • NAMING('DISCRETE')パラメータによって、オブジェクト名にパーティション名が含まれます。この場合オブジェクト名にはSiteNoの値が含まれます。オブジェクト名、YOUR-STORAGE-ACCOUNT/RiverFlowPerm_PartitionBy/09497500/object_33_0_1.parquetでは、"09497500"はこのオブジェクトに含まれるデータのSiteNoです。
  • クエリーにはINCLUDE_ORDERING('TRUE')が含まれるので、オブジェクト データにはORDER BY列のデータが含まれます。この場合、その行のデータの収集元のサイト番号になります。
  • MANIFESTFILEオプションによって、マニフェスト ファイルが外部ストレージに書き込まれます。マニフェスト ファイルには、WRITE_NOSが書き込んだすべてのオブジェクトが一覧表示されます。

ハッシュを使用したVantageテーブルから外部ストレージへの全データ書き込み

SELECT NodeId, AmpId, Sequence, ObjectName, ObjectSize, RecordCount
FROM WRITE_NOS_FM (
 ON  ( SELECT * FROM RiverFlowPerm )
  HASH BY SiteNo LOCAL ORDER BY SiteNo
 USING
  LOCATION('YOUR-STORAGE-ACCOUNT/RiverFlowPerm_HashBy/')
  STOREDAS('PARQUET')
  NAMING('RANGE')
  MANIFESTFILE('YOUR-STORAGE-ACCOUNT/RiverFlowPerm_HashBy/flowdata_manifest.json')
  INCLUDE_ORDERING('TRUE')
  INCLUDE_HASHBY('TRUE')
  MAXOBJECTSIZE('4MB')
  COMPRESSION('GZIP')
) AS d 
ORDER BY AmpId;

ここでは、効率的な表示のために、結果セットの例から4行を縦方向のレイアウト(列名が左側)で示しています。

     NodeId          33
      AmpId           0
   Sequence           1
 ObjectName YOUR-STORAGE-ACCOUNT/RiverFlowPerm_HashBy/09394500/09513780/object_33_0_1.parquet
 ObjectSize       79398
RecordCount       11778

     NodeId          33
      AmpId           1
   Sequence           1
 ObjectName YOUR-STORAGE-ACCOUNT/RiverFlowPerm_HashBy/09380000/09429070/object_33_1_1.parquet
 ObjectSize       84999
RecordCount        8926

     NodeId          33
      AmpId           2
   Sequence           1
 ObjectName YOUR-STORAGE-ACCOUNT/RiverFlowPerm_HashBy/09396100/09400815/object_33_2_1.parquet
 ObjectSize       47659
RecordCount        6765

     NodeId          33
      AmpId           0
   Sequence           1
ObjectName YOUR-STORAGE-ACCOUNT/RiverFlowPerm_HashBy/flowdata_manifest.json
ObjectSize          624
RecordCount           ?

[...]
この例での注意事項:
  • 結果セットの各行は、外部ストレージに書き込まれる1つのオブジェクトを記述します。で終わる名前を持つデータ オブジェクトには.parquetからのデータを含んでいます。Vantage.json拡張子で終わる名前を持つオブジェクトはマニフェスト ファイルで、他のデータ オブジェクトの後に書き込まれます。
  • 各オブジェクトには、HASH BY句に即してグループ化されたデータが含まれています。この例では、SiteNo列値のハッシュを使用して、データベース テーブルの行データを異なるAMPに分散してグループ化する方法を決定します。この場合、各AMPのデータに対して1つのパーティションがあり、異なる収集サイトからのデータ行の組み合わせが含まれる場合もあります。
  • NAMING('RANGE')パラメータによって、オブジェクト名には、オブジェクトに含まれるデータのサイト番号の範囲で上位および下位の値が含まれます。オブジェクト名、YOUR-STORAGE-ACCOUNT/RiverFlowPerm_HashBy/09394500/09513780/object_33_0_1.parquetには、サイト09394500と9513780の間にある複数サイト番号のデータが含まれます。
  • クエリーにはINCLUDE_ORDERING('TRUE')INCLUDE_HASHBY('TRUE')が含まれるので、オブジェクト データにはORDER BY列とHASH BY列のデータが含まれます。この場合、両方とも同じ列、SiteNoなので、オブジェクトに含まれるデータには、その行のデータの収集元のサイト番号が含まれます。
  • MANIFESTFILEオプションによって、マニフェスト ファイルが外部ストレージに書き込まれます。マニフェスト ファイルには、WRITE_NOSが書き込んだすべてのオブジェクトが一覧表示されます。