オブジェクトストレージに保存されたクエリーデータ
概要
Native Object Storage (NOS) は、AWS S3、Google GCS、Azure Blob、またはオンプレミス実装などのオブジェクト ストレージ内のファイルに保存されているデータをクエリできるようにする Vantage の機能です。これは、Vantage にデータを取り込むためのデータ パイプラインを構築せずにデータを探索するシナリオに役立ちます。
前提条件
Teradata Vantage インスタンスにアクセスする必要があります。NOS は、バージョン 17.10 以降、Vantage Express から Developer、DYI、Vantage as a Service までのすべての Vantage エディションで有効になります。
Vantage のテスト インスタンスが必要な場合は、 https://clearscape.teradata.com. で無料でプロビジョニングできます。 |
NOS でデータを探索する
現在、NOS は CSV、JSON (配列または改行区切りとして)、および Parquet データ形式をサポートしています。 |
データセットが CSV ファイルとして S3 バケットに保存されているとします。データセットを Vantage に取り込むかどうかを決定する前に、データセットを探索したいと考えています。このシナリオでは、 米国地質調査所によって収集された河川流量データを含む、Teradata によって公開された公開データセットを使用します。バケットは https://td-usgs-public.s3.amazonaws.com/にあります。
まずはCSVデータのサンプルを見てみましょう。Vantage がバケットからフェッチする最初の 10 行を取得します。
SELECT
TOP 10 *
FROM (
LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
) AS d;
私が持っているものは次のとおりです。
GageHeight2 Flow site_no datetime Precipitation GageHeight ----------- ----- -------- ---------------- ------------- ----------- 10.9 15300 09380000 2018-06-28 00:30 671 9.80 10.8 14500 09380000 2018-06-28 01:00 673 9.64 10.7 14100 09380000 2018-06-28 01:15 672 9.56 11.0 16200 09380000 2018-06-27 00:00 669 9.97 10.9 15700 09380000 2018-06-27 00:30 668 9.88 10.8 15400 09380000 2018-06-27 00:45 672 9.82 10.8 15100 09380000 2018-06-27 01:00 672 9.77 10.8 14700 09380000 2018-06-27 01:15 672 9.68 10.9 16000 09380000 2018-06-27 00:15 668 9.93 10.8 14900 09380000 2018-06-28 00:45 672 9.72
たくさんの数字が出てきましたが、それは何を意味するのでしょうか?この質問に答えるために、Vantage に CSV ファイルのスキーマを検出するように依頼します。
SELECT
*
FROM (
LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
RETURNTYPE='NOSREAD_SCHEMA'
) AS d;
Vantage はデータ サンプルをフェッチしてスキーマを分析し、結果を返します。
Name Datatype FileType Location --------------- ----------------------------------- --------- ------------------------------------------------------------------- GageHeight2 decimal(3,2) csv /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv Flow decimal(3,2) csv /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv site_no int csv /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv datetime TIMESTAMP(0) FORMAT'Y4-MM-DDBHH:MI' csv /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv Precipitation decimal(3,2) csv /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv GageHeight decimal(3,2) csv /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09513780/2018/06/27.csv
CSV ファイルには 6 つの列があることがわかります。各列について、スキーマを推測するために使用された名前、データ型、ファイル座標を取得します。
NOS を使用してデータをクエリーする
スキーマがわかったので、データセットを通常の SQL テーブルであるかのように操作できます。その要点を証明するために、データの集計を行ってみましょう。気温を収集しているサイトについて、サイトごとの平均気温を取得してみましょう。
SELECT
site_no Site_no, AVG(Flow) Avg_Flow
FROM (
LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
) AS d
GROUP BY
site_no
HAVING
Avg_Flow IS NOT NULL;
結果:
Site_no Avg_Flow -------- --------- 09380000 11 09423560 73 09424900 93 09429070 81
アドホック探索アクティビティを永続ソースとして登録するには、それを外部テーブルとして作成します。
-- 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.
CREATE DATABASE Riverflow
AS PERMANENT = 60e6, -- 60MB
SPOOL = 120e6; -- 120MB
-- change current database to Riverflow
DATABASE Riverflow;
CREATE FOREIGN TABLE riverflow
USING ( LOCATION('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/') );
SELECT top 10 * FROM riverflow;
結果:
Location GageHeight2 Flow site_no datetime Precipitation GageHeight ------------------------------------------------------------------- ----------- ---- ------- ------------------- ------------- ---------- /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09429070/2018/07/02.csv null null 9429070 2018-07-02 14:40:00 1.21 null /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csv null 0.00 9400815 2018-07-10 00:30:00 0.00 -0.01 /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csv null 0.00 9400815 2018-07-10 00:45:00 0.00 -0.01 /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csv null 0.00 9400815 2018-07-10 01:00:00 0.00 -0.01 /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09400815/2018/07/10.csv null 0.00 9400815 2018-07-10 00:15:00 0.00 -0.01 /S3/s3.amazonaws.com/td-usgs-public/CSVDATA/09429070/2018/07/02.csv null null 9429070 2018-07-02 14:38:00 1.06 null
今回の SELECT
ステートメントは、データベース内のテーブルに対する通常の選択のように見えます。データのクエリー時に 1 秒未満の応答時間が必要な場合は、CSV データを Vantage に取り込んで処理を高速化する簡単な方法があります。その方法については、読み続けてください。
NOS から Vantage にデータをロードする
オブジェクト ストレージのクエリーには時間がかかります。データが興味深いと判断し、より迅速に答えが得られるソリューションを使用してさらに分析を行いたい場合はどうすればよいでしょうか? 良いニュースは、NOS で返されたデータを CREATE TABLE
ステートメントのソースとして使用できることです。 CREATE TABLE
権限があると仮定すると、次を実行できます:
このクエリは、前の手順でデータベース 河川流量 と 河川流量 という外部テーブルを作成したことを前提としています。
|
-- This query assumes you created database `Riverflow`
-- and a foreign table called `riverflow` in the previous step.
CREATE MULTISET TABLE riverflow_native (site_no, Flow, GageHeight, datetime)
AS (
SELECT site_no, Flow, GageHeight, datetime FROM riverflow
) WITH DATA
NO PRIMARY INDEX;
SELECT TOP 10 * FROM riverflow_native;
結果:
site_no Flow GageHeight datetime ------- ----- ---------- ------------------- 9400815 .00 -.01 2018-07-10 00:30:00 9400815 .00 -.01 2018-07-10 01:00:00 9400815 .00 -.01 2018-07-10 01:15:00 9400815 .00 -.01 2018-07-10 01:30:00 9400815 .00 -.01 2018-07-10 02:00:00 9400815 .00 -.01 2018-07-10 02:15:00 9400815 .00 -.01 2018-07-10 01:45:00 9400815 .00 -.01 2018-07-10 00:45:00 9400815 .00 -.01 2018-07-10 00:15:00 9400815 .00 -.01 2018-07-10 00:00:00
今回は、 SELECT
クエリーは 1 秒以内に返されました。Vantage は NOS からデータを取得する必要がありませんでした。代わりに、ノード上にすでに存在していたデータを使用して応答しました。
プライベートバケットにアクセスする
これまではパブリックバケットを使用してきました。プライベートバケットがある場合はどうなるでしょうか? どの認証情報を使用する必要があるかを Vantage にどのように指示しますか?
資格情報をクエリーに直接インライン化することができます。
SELECT
TOP 10 *
FROM (
LOCATION='/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/'
AUTHORIZATION='{"ACCESS_ID":"","ACCESS_KEY":""}'
) AS d;
これらの認証情報を常に入力するのは面倒であり、安全性も低下する可能性があります。Vantage では、資格情報のコンテナとして機能する認可オブジェクトを作成できます。
CREATE AUTHORIZATION aws_authorization
USER 'YOUR-ACCESS-KEY-ID'
PASSWORD 'YOUR-SECRET-ACCESS-KEY';
これにより、外部テーブルを作成するときに認可オブジェクトを参照できるようになります。
CREATE FOREIGN TABLE riverflow
, EXTERNAL SECURITY aws_authorization
USING ( LOCATION('/s3/td-usgs-public.s3.amazonaws.com/CSVDATA/') );
Vantage からオブジェクト ストレージにデータをエクスポートする
これまで、オブジェクト ストレージからのデータの読み取りとインポートについて説明してきました。SQL を使用して Vantage からオブジェクト ストレージにデータをエクスポートする方法があれば素晴らしいと思いませんか? これはまさに WRITE_NOS
関数の目的です。 riverflow_native
テーブルからオブジェクト ストレージにデータをエクスポートしたいとします。次のクエリを使用してこれを行うことができます。
SELECT * FROM WRITE_NOS (
ON ( SELECT * FROM riverflow_native )
PARTITION BY site_no ORDER BY site_no
USING
LOCATION('YOUR-OBJECT-STORE-URI')
AUTHORIZATION(aws_authorization)
STOREDAS('PARQUET')
COMPRESSION('SNAPPY')
NAMING('RANGE')
INCLUDE_ORDERING('TRUE')
) AS d;
ここでは、Vantage に riverflow_native
からデータを取得し、 parquet
形式を使用して YOUR-OBJECT-STORE-URI
バケットに保存するように指示します。データは site_no
属性でファイルに分割されます。ファイルは圧縮されます。
まとめ
このクイック スタートでは、Vantage のネイティブ オブジェクト ストレージ (NOS) 機能を使用してオブジェクト ストレージからデータを読み取る方法を学習しました。NOS は、CSV、JSON、および Parquet 形式で保存されたデータの読み取りとインポートをサポートしています。NOS は、Vantage からオブジェクト ストレージにデータをエクスポートすることもできます。