次の例は、TeradataのパブリックAmazon S3バケットにあるCSV形式のデータにアクセスする方法を示しています。
次の表は、CSVデータを格納するすべてのTeradata提供のパブリック外部オブジェクト ストアに対するLOCATION値を示しています。例を実行するための設定で関数マッピングを設定した後で、これらの場所のいずれかを使用して例を実行できます。
プラットフォーム | 場所 |
---|---|
Amazon S3 | /s3/td-usgs-public.s3.amazonaws.com/CSVDATA/ |
Azure BLOBストレージ | /az/akiaxox5jikeotfww4ul.blob.core.windows.net/td-usgs/CSVDATA/ |
Google Cloud Storage | /gs/storage.googleapis.com/td-usgs/CSVDATA/ |
独自の外部オブジェクト ストアを使用する場合は、例の変数置換を参照してLOCATION、ACCESS_ID/USER、およびACCESS_KEY/PASSWORDの例を確認します。
NOSREAD_KEYSを使用した指定済みLOCATIONでのファイルのリスト
SELECT TOP 2 location(CHAR(200)), ObjectLength FROM ( LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/' AUTHORIZATION='{"ACCESS_ID":"","ACCESS_KEY":""}' RETURNTYPE='NOSREAD_KEYS' ) AS d;
<NOSREAD_KEYSを使用した指定済みLOCATIONでのファイルのリスト>を参照してください。
CSVの例を実行するための設定
CREATE FOREIGN TABLE riverflow_csv , EXTERNAL SECURITY MyAuthObj USING ( LOCATION('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/') );
<CSVの例を実行するための設定>を参照してください。
READ_NOSを使用した所定の位置にある外部データのサンプリング
この例では、READ_NOS_FMという関数マッピングでREAD_NOSを使用します。
SELECT TOP 2 * FROM READ_NOS_FM ( USING LOCATION('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/') RETURNTYPE('NOSREAD_RECORD') ) AS D;
<READ_NOSを使用した所定の位置にある外部データのサンプリング>を参照してください。
外部テーブルを使用した所定の位置にある外部データのサンプリング
SELECT TOP 2 * FROM riverflow_csv;
<外部テーブルを使用した所定の位置にある外部データのサンプリング>を参照してください。
特定の行セットのクエリー
SELECT MAX(Flow) FROM riverflow_csv WHERE site_no = '09394500';
<特定の行セットのクエリー>を参照してください。
CREATE TABLE AS … WITH DATAを使用したデータベースへの外部データのロード
CREATE MULTISET TABLE riverflowprecip_csv AS ( SELECT site_no, Flow, GageHeight FROM riverflow_csv WHERE Precipitation > 0 ) WITH DATA NO PRIMARY INDEX;
テーブル内の行数を表示します。
SELECT COUNT(*) FROM riverflowprecip_csv;
<CREATE TABLE AS … WITH DATAを使用したデータベースへの外部データのロード>を参照してください。
READ_NOSおよびCREATE TABLE ASを使用したデータベースへの外部データのロード
CREATE MULTISET TABLE riverflowperm_csv AS ( SELECT site_no, Flow, GageHeight, Precipitation, datetime, GageHeight2 FROM ( LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/' AUTHORIZATION=MyAuthObj ) AS d ) WITH DATA;
テーブル内の行数を表示します。
SELECT COUNT (*) FROM riverflowperm_csv;
<READ_NOSおよびCREATE TABLE ASを使用したデータベースへの外部データのロード>を参照してください。
INSERT ... SELECTを使用したデータベースへの外部データのロード
CREATE TABLE RiverFlowPermInsert_csv ( SiteNo INTEGER ,Flow DECIMAL(3,2) ,GageHeight DECIMAL(3,2) ,Precipitation DECIMAL(3,2) ,datetime TIMESTAMP(0) FORMAT'Y4-MM-DDBHH:MI' ,GageHeight2 DECIMAL(3,2) ) PRIMARY INDEX (SiteNo);
外部データをデータベース テーブルに挿入します。
INSERT INTO RiverFlowPermInsert_csv SELECT site_no, Flow, GageHeight, Precipitation, datetime, GageHeight2 WHERE site_no = 9474000 FROM riverflow_csv;
データベース テーブルのデータを問合わせます。
SELECT TOP 2 * FROM RiverFlowPermInsert_csv;
<INSERT ... SELECTを使用したデータベースへの外部データのロード>を参照してください。
外部データとデータベース テーブルの結合
結合先のデータベース ディメンション テーブルを作成します。
CREATE SET TABLE rivernames ( site_no INT, name CHAR(90) CHARACTER SET LATIN NOT CASESPECIFIC ) UNIQUE PRIMARY INDEX ( site_no ) ;
ディメンション テーブルへのデータの入力に使用する外部テーブルを作成するか、データベース管理者に作成を依頼します。
CREATE FOREIGN TABLE nos_rivernames , EXTERNAL SECURITY MyAuthObj USING ( LOCATION('/s3/td-usgs-public.s3.amazonaws.com/RIVERS/rivers.csv') );
ディメンション テーブルにデータを入力します。
INSERT INTO rivernames SELECT site_no, name FROM nos_rivernames;
ディメンション テーブルと外部データ(外部テーブル)を結合します。
SELECT DISTINCT name(CHAR(100)) FROM riverflow_csv rf, rivernames rn WHERE rf.site_no = rn.site_no AND rf.Precipitation > 0.1 ORDER BY 1;
<外部データとデータベース テーブルの結合>を参照してください。
CREATE FOREIGN TABLE定義でのパス フィルタを使用したフィルタリング
CREATE FOREIGN TABLE riverflow_csv_pathfilter , EXTERNAL SECURITY MyAuthObj USING ( LOCATION ('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/0938') PATHPATTERN('$data/$siteno/$year/$month/$day') );
ここでsite_noはサイト番号の値です(0938など)。
テーブル定義を表示します。
SHOW TABLE riverflow_csv_pathfilter;
<CREATE FOREIGN TABLE定義でのパス フィルタを使用したフィルタリング>を参照してください。
データ セット内の列を使用したフィルタリング
SELECT TOP 2 GageHeight, Flow FROM riverflow_csv_pathfilter WHERE site_no = 09380000;
<データ セット内の列を使用したフィルタリング>を参照してください。
データ セットのパスにおけるキーを使用したパス フィルタリング
SELECT TOP 2 GageHeight, Flow FROM riverflow_csv_pathfilter WHERE $path.$siteno = 09380000;
<データ セットのパスにおけるキーを使用したパス フィルタリング>を参照してください。
パス フィルタリングを使用した外部テーブルの問合わせ
パス フィルタリングを使用して検索結果を絞り込みます。
SELECT TOP 2 * FROM riverflow_csv_pathfilter WHERE $PATH.$year = 2018 AND $PATH.$month = 07 AND $PATH.$day = '01.csv' AND $PATH.$siteno = 09380000;
<パス フィルタリングを使用した外部テーブルの問合わせ>を参照してください。
パスとペイロード フィルタリングの結合
パスとペイロード フィルタリングを組み合わせます。
SELECT COUNT(*) FROM riverflow_csv_pathfilter WHERE GageHeight > 9.5 AND $path.$siteno = 09380000 AND $path.$year = 2018 AND $path.$month = 06;
<パスとペイロード フィルタリングの結合>を参照してください。
基本ビューの作成
外部テーブルのビューを作成します。
CREATE VIEW riverflowview_csv AS ( SELECT Flow, GageHeight, Precipitation, Temp, Conductance, Site_no FROM riverflow_csv_pathfilter );
ビューを問合わせます。
SELECT TOP 2 * FROM riverflowview_csv;
<基本ビューの作成>を参照してください。
ビュー内の列としてのパス変数の使用
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, Flow, GageHeight, Precipitation, Temp, Conductance FROM riverflow_csv_pathfilter);
ビューを問合わせます。
SELECT TOP 2 * FROM riverflowview_csv;
<ビュー内の列としてのパス変数の使用>を参照してください。
パス フィルタリングでの外部テーブル ビューの使用
外部テーブルのビューを置き換えます。
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, Flow, GageHeight, Precipitation, Temp, Conductance FROM riverflow_csv_pathfilter WHERE TheSite = site_no);
ビューを問合わせます。
SELECT TOP 2 * FROM riverflowview_csv;
ビューをフィルタ処理します。
SELECT thesite,COUNT(*) FROM riverflowview_csv WHERE thesite='09380000' GROUP BY 1;
クエリーでEXPLAINを実行して、フィルタ処理がどのように行なわれているかを確認します。
EXPLAIN SELECT thesite,COUNT(*) FROM riverflowview_csv WHERE thesite='09380000' GROUP BY 1;
<パス フィルタリングでの外部テーブル ビューの使用>を参照してください。