次の例は、TeradataのパブリックGoogle Cloud StorageバケットにあるParquet形式のデータにアクセスする方法を示しています。
次の表は、Parquetデータを格納しているTeradata提供のパブリック外部オブジェクト ストアに対するLOCATION値を示しています。例を実行するための設定で関数マッピングを設定した後で、これらの場所のいずれかを使用して例を実行できます。
プラットフォーム | 場所 |
---|---|
Amazon S3 | /s3/td-usgs-public.s3.amazonaws.com/PARQUETDATA/ |
Azure BLOBストレージ | /az/akiaxox5jikeotfww4ul.blob.core.windows.net/td-usgs/PARQUETDATA/ |
Google Cloud Storage | /gs/storage.googleapis.com/td-usgs/PARQUETDATA/ |
独自の外部オブジェクト ストアを使用する場合は、例の変数置換を参照してLOCATION、ACCESS_ID/USER、およびACCESS_KEY/PASSWORDの例を確認します。
Parquetの例を実行するための設定
CREATE FOREIGN TABLE riverflow_parquet , EXTERNAL SECURITY MyAuthObj USING ( LOCATION ('/s3/td-usgs-public.s3.amazonaws.com/PARQUETDATA/') );
<Parquetの例を実行するための設定>を参照してください。
外部テーブルを使用した所定の位置にある外部データのサンプリング
SELECT TOP 2 * FROM riverflow_parquet;
<外部テーブルを使用した所定の位置にある外部データのサンプリング>を参照してください。
特定の行セットのクエリー
SELECT MAX(Flow) FROM riverflow_parquet WHERE site_no = '09394500';
<特定の行セットのクエリー>を参照してください。
READ_NOSを使用したParquetスキーマのプレビュー
SELECT * FROM ( LOCATION='/s3/td-usgs-public.s3.amazonaws.com/PARQUETDATA/' AUTHORIZATION=MyAuthObj RETURNTYPE='NOSREAD_SCHEMA' ) AS d;
または、NOSREAD_PARQUET_SCHEMAを使用します。FULLSCANオプションを使用する場合にこれを使用する必要があります。
SELECT * FROM ( LOCATION='/s3/td-usgs-public.s3.amazonaws.com/PARQUETDATA/' AUTHORIZATION=MyAuthObj FULLSCAN='TRUE' RETURNTYPE='NOSREAD_PARQUET_SCHEMA' ) AS d;
<READ_NOSを使用したParquetスキーマのプレビュー>を参照してください。
キー構造の表示
SELECT * FROM ( LOCATION='/s3/td-usgs-public.s3.amazonaws.com/PARQUETDATA/' AUTHORIZATION=MyAuthObj RETURNTYPE='NOSREAD_KEYS' ) AS d;
<キー構造の表示>を参照してください。
READ_NOSを使用したParquetコンテンツの表示
SELECT TOP 2 * FROM ( LOCATION='/s3/td-usgs-public.s3.amazonaws.com/PARQUETDATA/' AUTHORIZATION=MyAuthObj ) AS d;
<READ_NOSを使用したParquetコンテンツの表示>を参照してください。
CREATE TABLE AS … WITH DATAを使用したデータベースへの外部データのロード
CREATE MULTISET TABLE riverflowprecip_parquet(site_no,Flow,GageHeight,datetime) AS ( SELECT site_no,Flow,GageHeight,datetime FROM riverflow_parquet WHERE Precipitation > 0 ) WITH DATA NO PRIMARY INDEX;
テーブル内の行数を表示します。
SELECT COUNT(*) FROM riverflowprecip_parquet;
<CREATE TABLE AS WITH DATAを使用したデータベースへの外部データのロード>を参照してください。
INSERT ... SELECTを使用したデータベースへの外部データのロード
CREATE TABLE RiverFlowPermInsert_parquet ( DateTS CHAR(20) ,SiteNo CHAR(8) ,Flow FLOAT FORMAT '-ZZZZ9.99' ,GageHeight FLOAT FORMAT '-ZZZ9.99' ,Precipitation FLOAT FORMAT '-ZZZ9.99') PRIMARY INDEX (SiteNo);
外部データをデータベース テーブルに挿入します。
INSERT INTO RiverFlowPermInsert_parquet SELECT datetime,site_no,Flow,GageHeight,Precipitation WHERE site_no='9497500' FROM riverflow_parquet;
データベース テーブルのデータを問合わせます。
SELECT TOP 2 * FROM RiverFlowPermInsert_parquet;
<INSERT ... SELECTを使用したデータベースへの外部データのロード>を参照してください。
外部データとデータベース テーブルの結合
結合先のデータベース ディメンション テーブルを作成します。
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 ) ;
ディメンション テーブルへのデータの入力に使用する外部テーブルを作成するか、データベース管理者に作成を依頼します。
CREATE FOREIGN TABLE nos_rivernames , EXTERNAL SECURITY MyAuthObj USING ( LOCATION('/s3/td-usgs-public.s3.amazonaws.com/RIVERS/rivers.csv') );
ディメンション テーブルにデータを入力します。
INSERT INTO rivernames SELECT CAST(site_no AS CHAR(8)), name FROM nos_rivernames;
ディメンション テーブルと外部データ(外部テーブル)を結合します。
SELECT DISTINCT name(CHAR(100)) FROM riverflow_parquet rf, rivernames rn WHERE rf.site_no = rn.site_no AND rf.Precipitation > 0.1 ORDER BY 1;
<外部データとデータベース テーブルの結合>を参照してください。
外部テーブルからの外部Parquetデータのフィルタリング
CREATE FOREIGN TABLE riverflow_parquet_path , EXTERNAL SECURITY MyAuthObj USING ( LOCATION ('/s3/td-usgs-public.s3.amazonaws.com/PARQUETDATA/') PATHPATTERN ('$data/$siteno/$year/$month/$day') );
Parquetデータの特定の列でフィルタ処理します。
SELECT TOP 2 GageHeight, Flow FROM riverflow_parquet_path WHERE site_no = '09394500';
<外部テーブルからの外部Parquetデータのフィルタリング>を参照してください。
パス フィルタリングを使用した外部テーブルの問合わせ
パス フィルタリングを使用して検索結果を絞り込みます。
SELECT TOP 2 * FROM riverflow_parquet_path WHERE $PATH.$year = '2018' AND $PATH.$month = '07' AND $PATH.$day = '01.parquet' AND $PATH.$siteno = '09394500';
<パス フィルタリングを使用した外部テーブルの問合わせ>を参照してください。
パスとペイロード フィルタリングの結合
パスとペイロード フィルタリングを組み合わせます。
SELECT COUNT(*) FROM riverflow_parquet_path WHERE GageHeight > 5 AND $path.$siteno = 09394500 AND $path.$year = '2018' AND $path.$month = '07';
<パスと列フィルタリングの結合>を参照してください。
ビュー内の列としてのパス変数の使用
外部テーブルのビューを作成します。
CREATE VIEW riverflowview_parquet 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 GageHeight1, Precipitation, GageHeight2 FROM riverflow_parquet_path );
<ビュー内の列としてのパス変数の使用>を参照してください。
パス フィルタリングでの外部テーブル ビューの使用
REPLACE VIEW riverflowview_parquet 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 GageHeight1, Precipitation, GageHeight2 FROM riverflow_parquet_path WHERE TheSite = site_no);
ビューを問合わせます。
SELECT TOP 2 * FROM riverflowview_parquet;
ビューをフィルタ処理します。
SELECT TheSite,COUNT(*) FROM riverflowview_parquet WHERE TheSite='09396100' GROUP BY 1;
クエリーでEXPLAINを実行して、フィルタ処理がどのように行なわれているかを確認します。
EXPLAIN SELECT thesite,COUNT(*) FROM riverflowview_parquet WHERE thesite='09396100' GROUP BY 1;
<パス フィルタリングでのビューの使用>を参照してください。