17.10 - 例: Parquetデータの読み取り - 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のパブリック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の例を確認します。

SHOW AUTHORIZATIONの使用

SHOW AUTHORIZATION MyAuthObj;

許可オブジェクトが存在しない場合は、例を実行するための設定のステップを実行します。

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), MIN (Flow)
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;

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