17.05 - 例: パーティションを使用したテーブルから外部ストレージへの全行の書き込み - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - Native Object Store 入門ガイド

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1214-175K-JPN
Language
日本語 (日本)
次の例では、データベース テーブルに格納されているすべてのデータを外部オブジェクト ストレージに書き込みます。データは書き込まれる前にAdvanced SQL Engineでパーティション化(ソート)されます。外部ストレージ内のデータを格納しているオブジェクトには、格納されているソート済みデータを反映する名前が付けられます。

    前提条件

  1. まだ実行されていない場合は、外部オブジェクト ストアにアクセスするための権限を設定します。WRITE_NOSの例に対する許可の設定を参照してください。
  2. まだ実行されていない場合は、データを抽出するデータベース テーブルを設定します。既存のテーブルのいずれかを使用するか、テスト テーブルを設定して例で使用できます。テスト テーブルの設定を参照してください。
  3. まだ完了していない場合は、データを書き込む外部オブジェクト ストアへのアクセスを設定または取得します。外部ストレージ ベンダーの指示に従います。
  4. 例: 外部オブジェクト ストアへの全行の書き込み、PARTITION BYおよびNAMING('RANGE')の使用

  5. データベース テーブルのすべての行を外部オブジェクト ストアに書き込みます。
    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/')
            STOREDAS('PARQUET')
            COMPRESSION('GZIP')
            NAMING('RANGE')
            INCLUDE_ORDERING('TRUE')
            MAXOBJECTSIZE('4MB')
    ) AS d 
    ORDER BY AmpId;

    LOCATIONを、データを書き込む外部オブジェクト ストアのURIに置き換えます。

    この例で注意すべき点:
    • 結果セットの各行は、Advanced SQL Engineのデータを格納する外部ストレージに書き込まれた1つのオブジェクトを記述します。
    • 各オブジェクトには、PARTITION BY句に従って作成された1つのパーティションのデータが含まれています。この場合、データ収集サイトごとに1つのパーティション、つまりSiteNo列値ごとにパーティションが1つあります。
    • NAMING('RANGE')により、オブジェクト名に、範囲内の上限値と下限値が含められます。この場合、オブジェクト名にはSiteNoの値が含まれます。例えば、オブジェクト名の/S3/s3.amazonaws.com/ie-writenos-bucket/RiverFlowPerm/09497500/09497500/object_33_0_1.parquetでは、"09497500"がこのオブジェクトに含まれるデータのSiteNoです。このオブジェクトには、サイト09497500と09497500の間(両端含む)の複数のサイト番号からのデータが含まれます。
    • クエリーにはINCLUDE_ORDERING('TRUE')が含まれるため、オブジェクトにはORDER BY列のデータが含まれます。この場合、オブジェクト データにはその行のデータが収集されたサイト番号が含まれます。

    結果は次のようになります。

         NodeId          33
          AmpId           0
       Sequence                    1
     ObjectName /S3/s3.amazonaws.com/ie-writenos-bucket/RiverFlowPerm/09497500/09497500/object_33_0_1.parquet
     ObjectSize                27682
    RecordCount                 2944
    
         NodeId          33
          AmpId           0
       Sequence                    1
     ObjectName /S3/s3.amazonaws.com/ie-writenos-bucket/RiverFlowPerm/09513780/09513780/object_33_0_1.parquet
     ObjectSize                19136
    RecordCount                 2941
    
    [...]

    読みやすくするために、出力は縦に表示しています。

  6. 外部オブジェクト ストレージ上のオフロードされたデータを検証します。
    1. 外部オブジェクト ストアにアクセスするための外部テーブルを作成します。
      CREATE FOREIGN TABLE ftRiverFlowPerm,
      EXTERNAL SECURITY DEFINER TRUSTED DefAuth_Write (
          Location VARCHAR(2048) CHARACTER SET UNICODE CASESPECIFIC,
       SiteNo VARCHAR(8) CHARACTER SET UNICODE,
       DateTime TIMESTAMP(0) FORMAT 'YYYY-MM-DDBHH:MI',
       Flow FLOAT,
       GageHeight1 FLOAT,
       Precipitation FLOAT,
       Temperature FLOAT,
       Velocity FLOAT,
       BatteryVoltage FLOAT,
       GageHeight2 FLOAT,
       WaterVelocity FLOAT,
       Conductance FLOAT
      )
      USING 
      (
          LOCATION('YOUR-STORAGE-ACCOUNT/RiverFlowPerm/')
          STOREDAS('PARQUET')
      ) 
      PARTITION BY COLUMN;
         

      LOCATIONを、データを書き込んだ外部オブジェクト ストアのURIに置き換えます。

    2. 外部データの行数をカウントします。
      SELECT COUNT(*) FROM ftRiverFlowPerm;
      結果:
      Count(*)
      --------
      36301
    3. ftRiverFlowPermという外部テーブルを使用して、外部データから1行をサンプリングします。
      SELECT * FROM ftRiverFlowPerm SAMPLE 1;
      結果:
            Location /S3/s3.amazonaws.com/ie-writenos-bucket/RiverFlowPerm/09429070/09429070/object_33_1_1.parquet
              SiteNo 09429070
            DateTime 2018-07-16 22:00
                Flow  1.55000000000000E 002
         GageHeight1  4.38000000000000E 000
       Precipitation                      ?
         Temperature  8.33000000000000E 001
            Velocity  1.15000000000000E 000
      BatteryVoltage                      ?
         GageHeight2                      ?
       WaterVelocity                      ?
         Conductance                      ?

      読みやすくするために、出力は縦に表示しています。

  7. 例: 外部オブジェクト ストアへの全行の書き込み、PARTITION BYおよびNAMING('DISCRETE')の使用

  8. データベース テーブルのすべての行を外部オブジェクト ストアに書き込みます。
    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_Discrete/')
      STOREDAS('PARQUET')
      COMPRESSION('GZIP')
      NAMING('DISCRETE')
      INCLUDE_ORDERING('TRUE')
      MAXOBJECTSIZE('4MB')
    ) AS d 
    ORDER BY AmpId;

    LOCATIONを、データを書き込む外部オブジェクト ストアのURIに置き換えます。

    この例で注意すべき点:
    • 結果セットの各行は、Vantageのデータを格納する外部ストレージに書き込まれた1つのオブジェクトを記述します。
    • 各オブジェクトには、PARTITION BY句に従って作成された1つのパーティションのデータが含まれています。この場合、データ収集サイトごとに1つのパーティション、つまりSiteNo列値ごとにパーティションが1つあります。
    • NAMING('DISCRETE')によって、オブジェクト名にパーティション名が含められますが、この場合、オブジェクト名にはSiteNoの値が含まれます。オブジェクト名/S3/s3.amazonaws.com/ie-writenos-bucket/RiverFlowPerm_Discrete/09497500/object_33_0_1.parquetでは、"09497500"がこのオブジェクトに含まれるデータのSiteNoです。
    • クエリーにはINCLUDE_ORDERING('TRUE')が含まれるため、オブジェクトにはORDER BY列のデータが含まれます。この場合、オブジェクト データにはその行のデータが収集されたサイト番号が含まれます。

    結果は次のようになります。

         NodeId          33
          AmpId           0
       Sequence                    1
     ObjectName /S3/s3.amazonaws.com/ie-writenos-bucket/RiverFlowPerm_Discrete/09497500/object_33_0_1.parquet
     ObjectSize                27682
    RecordCount                 2944
    
         NodeId          33
          AmpId           0
       Sequence                    1
     ObjectName /S3/s3.amazonaws.com/ie-writenos-bucket/RiverFlowPerm_Discrete/09513780/object_33_0_1.parquet
     ObjectSize                19136
    RecordCount                 2941
    
         NodeId          33
          AmpId           0
       Sequence                    1
     ObjectName /S3/s3.amazonaws.com/ie-writenos-bucket/RiverFlowPerm_Discrete/09424900/object_33_0_1.parquet
     ObjectSize                23174
    RecordCount                 2946
    
    [...]

    読みやすくするために、出力は縦に表示しています。