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
日本語 (日本)

次の例は、パス(キー) IDとペイロード属性をSQLクエリーで参照できるようにするために、両方の種類のデータについて名前を変更する河川流量の外部テーブルのビューです。

例では、サンプルの河川流量データ セットを使用します。独自のデータを使用するには、テーブル名、列名、および許可オブジェクトを置き換えます。サンプル データ セットの信頼証明および格納場所の値については、例の変数置換を参照してください。

  1. NOS関連コマンドを実行するには、必要な権限を持つユーザーとしてデータベースにログオンします。
  2. 存在しない場合は、riverflow_csv_pathという名前の外部テーブルを作成するか、データベース管理者に作成を依頼します。外部テーブルのペイロード列でのフィルタリングを参照してください。
  3. 外部テーブルのビューを作成します。
    REPLACE VIEW riverflowview_csv AS (
    SELECT CAST($path.$siteno AS CHAR(10)) TheSite,
    CAST($path.$year AS CHAR(4)) TheYear,
    CAST($path.$month AS CHAR(2)) TheMonth,
    CAST(SUBSTR($path.$day, 1, 2) AS CHAR(2)) TheDay,
    CAST(payload..Flow AS FLOAT) ( FORMAT '-ZZZZ9.99') Flow,
    CAST(payload..GageHeight AS FLOAT) ( FORMAT '-ZZZ9.99') GageHeight1,
    CAST(payload..Precipitation AS FLOAT) ( FORMAT '-ZZZ9.99') Precipitation,
    CAST(payload..Temp AS FLOAT) ( FORMAT '-ZZZ9.99') Temperature,
    CAST(payload..Velocity AS FLOAT) ( FORMAT '-ZZZ9.99') Velocity,
    CAST(payload..BatteryVoltage AS FLOAT) ( FORMAT '-ZZZ9.99') BatteryVoltage,
    CAST(payload..GageHeight2 AS FLOAT) ( FORMAT '-ZZZ9.99') GageHeight2
    FROM riverflow_csv_path
    WHERE TheSite = payload..site_no);
  4. ビューを問合わせます。
    SELECT TOP 2 * FROM riverflowview_csv;

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

    TheSite  TheYear TheMonth TheDay Site_no   Flow GageHeight1 Precipitation Temperature Velocity BatteryVoltage
    -------- ------- -------- ------ -------- ----- ----------- ------------- ----------- -------- --------------
    09396100   2018    07       16   09396100  24.40       1.33          0.00       ?        ?              ?
    09396100   2018    07       16   09396100 113.00       1.83          0.00       ?        ?              ?

    属性が欠落している列は、レコードに属性が含まれていない場合にNULLを返します。

  5. ビューでフィルタ処理して、サイト番号が09396100のサイト数を検索します。
    SELECT thesite,COUNT(*)                                            
    FROM riverflowview_csv WHERE thesite='09396100'
    GROUP BY 1;

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

    TheSite        Count(*)
    ----------  -----------
    09396100           3086
  6. クエリーでEXPLAINを実行して、フィルタ処理がどのように行なわれているかを確認します。
    EXPLAIN
    SELECT thesite,COUNT(*)                                            
    FROM riverflowview_csv WHERE thesite='09396100'
    GROUP BY 1;

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

    Explanation
    --------------------------------------------------------------------------
    […]
      3) We do a single-AMP RETRIEVE step from OB.riverflow_csv_path in
         view riverflowview_csv metadata by way of an all-rows scan with a
         condition of ("(TD_SYSFNLIB.NosExtractVarFromPath ( OB.riverflow_csv_path in view riverflowview_csv.Location, '/s3/td-usgs.s3.amazonaws.com/', 2 )(CHAR(10), CHARACTER SET UNICODE, NOT CASESPECIFIC))= '09396100 '") into Spool 3 (all_amps),
         which is built locally on that AMP.  Then we do a SORT to order
         Spool 3 by the sort key as the field_id list( 3, 2).  The size of
         Spool 3 is estimated with no confidence to be 38 rows (26,790
         bytes).  The estimated time for this step is 0.55 seconds.
      4) We do an all-AMPs RETRIEVE step in TD_Map1 from Spool 3 (Last Use)
         by way of an all-rows scan into Spool 2 (all_amps), which is
         binpacked and redistributed by size to all AMPs in TD_Map1.  The
         size of Spool 2 is estimated with no confidence to be 38 rows (
         27,094 bytes).  The estimated time for this step is 0.08 seconds.
      5) We do an all-AMPs SUM step in TD_MAP1 to aggregate from
         OB.riverflow_csv_path in view riverflowview_csv
         by way of external metadata in Spool 2 (Last Use) with a condition
         of ("(TD_SYSFNLIB.NosExtractVarFromPath (OB.riverflow_csv_path in view riverflowview_csv.Location, '/s3/td-usgs.s3.amazonaws.com/', 2 )(CHAR(10), CHARACTER SET UNICODE, NOT CASESPECIFIC))= (TRANSLATE((OB.riverflow_csv_path in view riverflowview_csv.Payload .EXTRACTVALUE ( '242E2E736974655F6E6F'XB(VARBYTE(63000)), 'list'(VARCHAR(20), CHARACTER SET LATIN, NOT CASESPECIFIC)))USING LATIN_TO_UNICODE))"),
         and the grouping identifier in field 1.  Aggregate Intermediate
         Results are computed globally, then placed in Spool 5 in TD_Map1.
         The size of Spool 5 is estimated with no confidence to be 504 rows
         (706,608 bytes).  The estimated time for this step is 0.32 seconds.
    […]

    (3)ではパス フィルタリングを行なっています。メタデータ スプールを構築するためのパス フィルタリング式として定数09396100を使用しています。メタデータ スプールは、クエリーが実際に処理するオブジェクトのリストを識別するスプール テーブルです。

    (5)では従来の行フィルタリングを行なっています。場所の文字列から抽出されたサイト番号とCSVペイロードの値(オブジェクト ストア内の実際のデータ)を比較します。