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. 外部オブジェクト ストアへのデータの書き込み

  5. データベース テーブルから外部オブジェクト ストアにデータの一部を書き込みます。例として、テスト テーブルからRiverFlowPermという名前のJSONデータを読み取り、それを外部ストレージに書き込みます。
    SELECT NodeId, AmpId, Sequence, ObjectName, ObjectSize, RecordCount
    FROM WRITE_NOS_FM (
         ON  ( SELECT * FROM RiverFlowPerm WHERE DateTime = (TIMESTAMP '2018-07-01 00:00:00') )
         USING
            LOCATION('YOUR-STORAGE-ACCOUNT/20180701/')
            STOREDAS('PARQUET')
    ) AS d 
    ORDER BY AmpId;

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

    WRITE_NOSは、データをParquetの形式で格納します。

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

    NodeId AmpId Sequence ObjectName
    ------ ----- -------- -------- --------------------------------------------------------------
        33     0        1 /S3/s3.amazonaws.com/ie-writenos-bucket/20180701/object_33_0_1.parquet
        33     1        1 /S3/s3.amazonaws.com/ie-writenos-bucket/20180701/object_33_1_1.parquet
        33     2        1 /S3/s3.amazonaws.com/ie-writenos-bucket/20180701/object_33_2_1.parquet
  6. 外部オブジェクト ストレージのオフロード データの検証

  7. 書き込んだ外部オブジェクト ストアにアクセスするための外部テーブルを作成します。
    CREATE FOREIGN TABLE ft20180701,
    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/20180701/')
         STOREDAS('PARQUET')
    ) 
    PARTITION BY COLUMN;

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

  8. 外部データの行数をカウントします。
    SELECT COUNT(*) FROM ft20180701;
    結果:
    Count(*)
    --------
    12
  9. 外部データから1行をサンプリングします。
    SELECT * FROM ft20180701 SAMPLE 1;
    結果:
          Location /S3/s3.amazonaws.com/ie-writenos-bucket/20180701/object_33_1_1.parquet
            SiteNo 09429070
          DateTime 2018-07-01 00:00
              Flow  1.54000000000000E 002
       GageHeight1  6.06000000000000E 000
     Precipitation                      ?
       Temperature  7.90000000000000E 001
          Velocity  7.50000000000000E-001
    BatteryVoltage                      ?
       GageHeight2                      ?
     WaterVelocity                      ?
       Conductance                      ?

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

  10. データベース テーブルのデータの一部を外部に格納されているデータと比較します。まず、WHERE句で指定した条件に一致するデータベース テーブルの行数をカウントします。
    SELECT COUNT(*) FROM RiverFlowPerm WHERE Temperature > 7.0 AND DateTime = (TIMESTAMP '2018-07-01 00:00:00');
    結果:
    Count(*)
    --------
    4

    次に、同じ基準に一致する外部オブジェクト ストアの行数をカウントします。

    SELECT COUNT(*) FROM RiverFlowPerm s, ft20180701 ft
    WHERE  s.SiteNo = ft.SiteNo
    AND    s.Temperature > 7.0
    AND    s.DateTime = (TIMESTAMP '2018-07-01 00:00:00');
    結果:
    Count(*)
    --------
    4

    両方のクエリーの結果が一致するはずです。

  11. 外部オブジェクト ストアからオフロードされたデータのParquetスキーマを読み取ります。
    SELECT DISTINCT(CAST(ParquetColumnName AS CHAR(15))) (NAMED Name),
         ParquetColumnPos (NAMED Pos),
         CAST(ParquetColumnPhysicalType AS CHAR(20)) (NAMED Physical),
         CAST(ParquetColumnLogicalType AS CHAR(20)) (NAMED Logical),
         CAST(TDColumnType AS CHAR(10)) (NAMED "Type"),
         ParquetColumnPrecision (NAMED "Precision"),
         ParquetColumnScale (NAMED Scale),
         ParquetColumnMinLength (NAMED "Min"),
         ParquetColumnMaxLength (NAMED "Max")
    FROM READ_NOS_FM1 (
    USING
         LOCATION('YOUR-STORAGE-ACCOUNT/20180701/')
         STOREDAS('PARQUET')
         FULLSCAN('TRUE')
         RETURNTYPE('NOSREAD_PARQUET_SCHEMA')
    ) as d order by 2,1,3,4,5,6,7,8,9;

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

    結果:

         Name  SiteNo
          Pos     1
     Physical  BYTE_ARRAY
      Logical  UTF8
         Type  VARCHAR
    Precision            0
        Scale            0
          Min            8
          Max            8
    
         Name  DateTime
          Pos     2
     Physical  INT64
      Logical  TIMESTAMP_MILLIS
         Type  TIMESTAMP
    Precision            0
        Scale            0
          Min            0
          Max            0
    	  
         Name  Flow
          Pos     3
     Physical  DOUBLE
      Logical  NONE
         Type  FLOAT
    Precision            0
        Scale            0
          Min            0
          Max            0
    
    [...]

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