Movatterモバイル変換


[0]ホーム

URL:


LoginSignup
7

Go to list of users who liked

3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

オブジェクト・ストアのデータファイルにアクセスする方法

Last updated atPosted at 2022-09-21

著者Adam Tworkiewicz
最終更新日 2021年9月7日

警告
本記事はTeradata CorporationのサイトGetting Startedに掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。

概要

Native Object Storage (NOS) は、AWS S3、Google GCS、Azure Blob、オンプレミス実装などのオブジェクト・ストレージのファイルに保存されたデータを照会するための Vantage 機能です。データを Vantage に取り込むためのデータパイプラインを構築することなく、データを探索したい場合に便利です。

前提条件

Teradata Vantageインスタンスにアクセスする必要があります。NOS は、Vantage Express から Developer、DYI、Vantage as a Service まで、バージョン 17.10 以降のすべての Vantage エディションで有効になっています。

Vantageの新しいインスタンスが必要な場合は、Google CloudAzureAWSのクラウドにVantage Expressという無料版をデプロイメントすることができます。これらを利用する場合クラウド上のインフラ利用料が必要になりますが、このチュートリアルの実行にあたってはオブジェクト・ストレージからのデータ読み込みを行うためVantage Expressもクラウド上での利用をお奨めいたします。

NOSでデータを探索する

現在、NOSはCSV、JSON(配列または改行で区切られたもの)、Parquetのデータ形式をサポートしています。

S3バケットにCSVファイルとして保存されているデータセットがあるとします。Vantageに取り込むかどうかを決める前に、そのデータセットを調査したいと思います。このシナリオでは、米国地質調査所によって収集された河川流量データを含む公開データセットを使用することにします。またバケットは、Teradataが公開しているhttps://td-usgs-public.s3.amazonaws.com/を使用します。

まずはサンプルCSVデータを見てみましょう。Vantageがバケットから取得する最初の10行を取り出します。

readS3.sql
SELECTTOP10*FROM(LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/')ASd;

クエリーの結果は次のようになります。

GageHeight2Flowsite_nodatetimePrecipitationGageHeight
10.915300093800002018-06-28 00:306719.80
10.814500093800002018-06-28 01:006739.64
10.714100093800002018-06-28 01:156729.56
11.016200093800002018-06-27 00:006699.97
10.915700093800002018-06-27 00:306689.88
10.815400093800002018-06-27 00:456729.82
10.815100093800002018-06-27 01:006729.77
10.814700093800002018-06-27 01:156729.68
10.916000093800002018-06-27 00:156689.93
10.814900093800002018-06-28 00:456729.72

たくさんの数字がありますが、これらは何を意味するのでしょうか。この質問に答えるために、VantageにCSVファイルのスキーマを検出するように依頼します。

rewadS3withRT.sql
SELECT*FROM(LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'RETURNTYPE='NOSREAD_SCHEMA')ASd;

Vantageは、スキーマを分析するためのデータサンプルをフェッチして結果を返します。

NameDatatypeFileTypeLocation
GageHeight2decimal(3,2)csv/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv
Flowdecimal(3,2)csv/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv
site_nointcsv/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv
datetimeTIMESTAMP(0) FORMAT'Y4-MM-DDBHH:MI'csv/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv
Precipitationdecimal(3,2)csv/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv
GageHeightdecimal(3,2)csv/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv

各カラムについて、名前、データ型、スキーマを推測するために使用されたファイル名をが表示されています。CSVファイルには6つのカラムがあることがわかります。

NOSでデータを照会する

スキーマがわかったので、データセットを通常のSQLテーブルのように扱うことができ。そのことを証明するために、データの集計をやってみましょう。気温を収集しているサイトについて、サイトごとの平均気温を取得してみましょう。

rewadS3withQry.sql
SELECTsite_noSite_no,AVG(Flow)Avg_FlowFROM(LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/')ASdGROUPBYsite_noHAVINGAvg_FlowISNOTNULL;

結果は以下のようになります。

Site_noAvg_Flow
0938000011
0942356073
0942490093
0942907081

今後クエリーを実行しやすくするために、このオブジェクトを恒久的なソースとして扱うことができる外部テーブルとして登録します。

CreateForeignTBL.sql
-- If you are running this sample as dbc user you will not have permissions-- to create a table in dbc database. Instead, create a new database and use-- the newly create database to create a foreign table.CREATEDATABASERiverflowASPERMANENT=60e6,-- 60MBSPOOL=120e6;-- 120MB-- change current database to RiverflowDATABASERiverflow;CREATEFOREIGNTABLEriverflowUSING(LOCATION('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'));SELECTtop10*FROMriverflow;

最後のSELECT文により以下のような結果が返ります。

LocationGageHeight2Flowsite_nodatetimePrecipitationGageHeight
/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09429070/2018/07/02.csvnullnull94290702018-07-02 14:40:001.21null
/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csvnull0.0094008152018-07-10 00:30:000.00-0.01
/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csvnull0.0094008152018-07-10 00:45:000.00-0.01
/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csvnull0.0094008152018-07-10 01:00:000.00-0.01
/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csvnull0.0094008152018-07-10 00:15:000.00-0.01
/S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09429070/2018/07/02.csvnullnull94290702018-07-02 14:38:001.06null

今回の SELECT文は、データベース内のテーブルに対する通常のSELECTと同じように見えます。データを照会する際に秒単位の応答時間が必要な場合、CSVデータをVantageに取り込んで高速化する簡単な方法があります。その方法については、こちらをご覧ください。

NOSからVantageにデータをロードする

オブジェクト・ストレージへのクエリーはVantageのデータベーステーブルへのクエリーよりも時間がかかります。もし、そのデータに利用価値がありそうで、もっと早く答えが出るようなソリューションで分析したいと思ったらどうでしょうか?
NOSで返されたデータは、CREATE TABLE文のソースとして使用することができますのでクエリーの結果を簡単にVantageのデータベーステーブルにすることができます。

このクエリは、前のステップでデータベースRiverflowとriverflowという外部テーブルを作成したと仮定しています。

CreateTBLSelfromNOS.sql
-- This query assumes you created database `Riverflow`-- and a foreign table called `riverflow` in the previous step.CREATEMULTISETTABLEriverflow_native(site_no,Flow,GageHeight,datetime)AS(SELECTsite_no,Flow,GageHeight,datetimeFROMriverflow)WITHDATANOPRIMARYINDEX;SELECTTOP10*FROMriverflow_native;

最後のSELECT文の結果は下記のようになります。

site_noFlowGageHeightdatetime
9400815.00-.012018-07-10 00:30:00
9400815.00-.012018-07-10 01:00:00
9400815.00-.012018-07-10 01:15:00
9400815.00-.012018-07-10 01:30:00
9400815.00-.012018-07-10 02:00:00
9400815.00-.012018-07-10 02:15:00
9400815.00-.012018-07-10 01:45:00
9400815.00-.012018-07-10 00:45:00
9400815.00-.012018-07-10 00:15:00
9400815.00-.012018-07-10 00:00:00

今回のSELECT文は1秒以内に返されました。VantageはNOSからデータを取得する必要がなかったからです。Vantageは、NOSからデータを取得する必要がなく、すでにデータベースにあるデータを使って回答したのです。

プライベートバケットにアクセス

ここまでは、パブリックバケットを使用しました。プライベートバケットを使用している場合はどうでしょうか?Vantage が使用する認証情報はどのように伝えればよいのでしょうか?
バケットにアクセスするための認証情報はクエリに直接記入することが可能です。

AccesstoPrivateBkt
SELECTTOP10*FROM(LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'AUTHORIZATION='{"ACCESS_ID":"","ACCESS_KEY":""}')ASd;

これらの認証情報を常に入力することは、面倒であり、安全性が低くなる可能性があります。Vantageでは、認証情報を格納するコンテナとして機能する認証オブジェクトを作成することができます。

Authorize.sql
CREATEAUTHORIZATIONaws_authorizationUSER'YOUR-ACCESS-KEY-ID'PASSWORD'YOUR-SECRET-ACCESS-KEY';

そして、外部テーブルを作成する際に、認可オブジェクトを参照するようにすることができます。

CreateForeignTBLwithAuthorize.sql
CREATEFOREIGNTABLEriverflow,EXTERNALSECURITYaws_authorizationUSING(LOCATION('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'));

Vantageからオブジェクト・ストレージへのデータエクスポート

これまで、オブジェクト・ストレージからのデータの読み取りとインポートについて説明してきました。SQLを使用してVantageからオブジェクト・ストレージにデータをエクスポートする方法があればいいと思いませんか?
これこそが、WRITE_NOS関数の目的です。例えば、riverflow_nativeテーブルからオブジェクト・ストレージにデータをエクスポートすることは以下のようなクエリーで可能です。

WritetoNOS.sql
SELECT*FROMWRITE_NOS(ON(SELECT*FROMriverflow_native)PARTITIONBYsite_noORDERBYsite_noUSINGLOCATION('YOUR-OBJECT-STORE-URI')AUTHORIZATION(aws_authorization)STOREDAS('PARQUET')COMPRESSION('SNAPPY')NAMING('RANGE')INCLUDE_ORDERING('TRUE'))ASd;

ここではriverflow_nativeからデータを取得しパーケット形式を使用してYOUR-OBJECT-STORE-URIバケットに保存します。データはsite_no属性でファイルに分割され圧縮されます。

まとめ

このクイックスタートでは、VantageのNative Object Storage (NOS) 機能を使用して、オブジェクト・ストレージからデータを読み取る方法について説明しました。NOSは、CSV、JSON、Parquet形式で保存されたデータの読み取りとインポートをサポートしています。
また、NOSはVantageからオブジェクト・ストレージにデータをエクスポートすることもできます。

さらに詳しく

Teradata Vantage™ - Native Object Store Getting Started Guide

Teradata Vantageへのお問合せ

Teradata Vantage へのお問合せ

7

Go to list of users who liked

3
0

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7

Go to list of users who liked

3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?


[8]ページ先頭

©2009-2025 Movatter.jp