17.10 - 外部データとデータベース テーブルの結合 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1214-171K-JPN
Language
日本語 (日本)

次の例では、データベース テーブルを作成してデータを入れて、外部テーブルを作成し、2つのテーブルを結合します。

    前提条件

  1. NOS関連コマンドを実行するには、必要な権限を持つユーザーとしてデータベースにログオンします。
  2. rivernamesテーブルがすでに存在する場合は、前提条件セクションの残りの手順をスキップします。
  3. データベース テーブルを作成します。
    オブジェクト ストアからデータベースへの結合のデータベース側を表わすローカル データベース テーブルがない場合は、シミュレーションが必要です。通常は、環境内にすでに存在する既存のテーブルに結合することで、これらのシミュレーション手順は必要なくなります。
    ソリューションとして、次の目的のために外部オブジェクト ストアに小さなディメンション テーブルが配置されています。
    • 結合を実用できるようにする
    • この例を試すすべてのユーザーが同じバージョンのテーブル データを持っていることを確認する
    CREATE SET TABLE rivernames (
          site_no CHAR(8) CHARACTER SET LATIN NOT CASESPECIFIC,
          name CHAR(100) CHARACTER SET LATIN NOT CASESPECIFIC)
    UNIQUE PRIMARY INDEX ( site_no );
  4. ディメンション テーブルへのデータの入力に使用する外部テーブルを作成するか、データベース管理者に作成を依頼します。
    CREATE FOREIGN TABLE nos_rivernames
    , EXTERNAL SECURITY  MyAuthObj
    USING ( LOCATION('/s3/td-usgs-public.s3.amazonaws.com/RIVERS/rivers.csv') );

    LOCATIONをRIVERS/rivers.csvへのパスに置き換えます。

  5. ディメンション テーブルにデータを入力します。
    INSERT INTO rivernames
    SELECT CAST(site_no AS CHAR(8)), name
    FROM nos_rivernames;
  6. ディメンション テーブルと外部データの結合

  7. 存在しない場合は、riverflow_jsonという名前の外部テーブルを作成するか、データベース管理者に作成を依頼します。JSONの例を実行するための設定を参照してください。
  8. ディメンション テーブルと外部テーブルを結合します。
    SELECT DISTINCT name(CHAR(100))
    FROM riverflow_json rf, rivernames rn
    WHERE rf.payload.site_no = cast(rn.site_no as INTEGER)
    AND rf.payload.Precipitation > 0.1
    ORDER BY 1;

    結果:

    name
    -----------------------------------
    CIBECUE CREEK NEAR OVERGAARD
    COLORADO RIVER AT LEES FERRY
    GILA RIVER AT KELVIN
    LITTLE COLORADO RIVER AT WOODRUFF
    NEW RIVER NEAR ROCK SPRINGS
    NEWMAN CANYON ABOVE UPPER LAKE MARY
    POLACCA WASH NEAR SECOND MESA
    PUERCO RIVER NEAR CHAMBERS
    SALT RIVER NEAR CHRYSOTILE
    SANTA MARIA RIVER NEAR BAGDAD