17.10 - 例: CSVデータの読み取り - 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
日本語 (日本)

次の例は、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), MIN(Flow)
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;

<パス フィルタリングでの外部テーブル ビューの使用>を参照してください。