次のアーキテクチャは、Amazon Kinesisからのデータの流れを示しており、AWS Glueによってストリーミングされ、Teradata Vantageで分析され、最後にAmazon QuickSightで表示されるようになっています。このチュートリアルでは、シンプルなLambda関数を使用して、ストリーミングソースを実行することにします。
前提条件
AWS Glue Streaming ETLをTeradata Vantageで使用するには、まず、以下の前提条件を満たしていることを確認してください:
・仮想マシンにログインするためには、Amazon Elastic Compute Cloud (Amazon EC2)のキーペアが必要です。まだお持ちでない場合は、新規に作成してください。以下の手順では、キーペアを Teradata.pem と名付け、ローカルマシンにダウンロードすることにします。
・Amazon QuickSightのアカウントを作成します(サブスクリプションが必要です)。
手順
作業手順の概略は以下の通りです。
前提条件を満たした上で、以下のステップを踏んでください:
- Teradata Vantage Developer Editionにサブスクライブします。(この手順は、VantageがAs-a-Serviceで提供されている場合にも有効です)。
- AWS CloudFormation スタックを起動しTeradata Vantageおよびその他の必要なリソースをデプロイします。
- Teradata Vantageでユーザーと読み取り/書き込み可能なデータベースを作成します。
- AWS Glueコンソールを使用してKinesis Tableを作成する。
- Glue Streaming ETLジョブを作成しストリーミングを開始します。
- Amazon QuickSightを使用してTeradata Vantageにロードされたデータを可視化する。
- クリーンアップを行います。
ステップ1:Teradata Vantage Developer Editionのサブスクライブ
以下の手順に従って、Teradata Vantage Developer にサブスクライブしてください:
- AWSアカウントにログインします。
- AWS MarketplaceのTeradata Vantage Developer (Free, DIY)のリストにアクセスします。
- 右上の「Continue to Subscribe」を選択します。
- 「Accept Terms」を選択します。
選択すると条件に同意したことになりお客様のアカウントでこのAWS Marketplaceのソフトウェアを使用することができます。
ステップ2:AWS CloudFormation Stackを起動しVantageをデプロイする
AWS CloudFormation は、クラウド環境における AWS およびサードパーティのアプリケーションリソースのモデリングとプロビジョニングを行うための共通言語を提供します。Vantage をデプロイするには、次の手順に従います:
Launch Stack をクリックして、Teradata Vantage Developer Edition をこのチュートリアルの完了に必要なすべてのリソースと一緒にデプロイします。
CloudFormationコンソールページにテンプレートURLが入力されたらドロップダウンからAWS Key Pair 「Teradata.pem as per prerequisites」を選択します。
他のパラメータはすべて自動入力されているのでスクロールダウンしてIAMリソースの作成を確認しチェックボックスにチェックを入れ「Create Stack」をクリックします。
Kinesis Streams、Lambda関数、IAMロールなど必要な前提条件をすべて備えたTeradata Vantage Developer Editionが、お客様のアカウントにデプロイされるようになりました。これには最大で20分かかる場合があります。デプロイが完了したら、Stack Outputタブに移動し、そこに記載されているすべての詳細をメモしてください。今後のステップで必要になります。
ステップ3:GlueでAmazon Kinesisカタログテーブルを作成する
以下のステップでは、Glue Streaming ETLジョブのソースとして使用するKinesisカタログテーブルを作成するための設定を説明します。
Kinesis Stream用のGlue Catalogテーブルを作成しましょう。Catalogの「Tables」をクリックし、「Add Tables」ボタンで、「Add Tables Manually」を選択します。
次の画面で、「TeradataKinesisStream」という名前を指定します。ドロップダウンからデータベースを選択します。まだデータベースが作成されていない場合は、Working with Glue Databasesを参照してデータベースを作成します。
「Add a Data store」ページで 「Next」 をクリックしソースの種類を 「Kinesis」 に、Stream Nameを 「TeradataKinesisStream」 に、KinesisソースのURLを https://kinesis.${AWS::Region}.amazonaws.com に入力します。
最後にAWS::Regionを自分の地域に置き換えてください。nextをクリックして続行します。(CloudFormationの出力欄にも同じ情報があります)
次のページで「Classification as JSON」を選択しNextをクリックします。スキーマの定義画面で「Add Column」をクリックし以下のタイプのカラム名を指定します。
Type | Column Name |
---|---|
String | searchword, countrycode, useragent,languagecode, sourceip, visityearmonth, desturl, customer |
BigInt | yearmonthkey, visitdate, duration, custkey |
「next」をクリックして確認し次の画面で「Finish」をクリックするとKinesisテーブルの作成が完了します。
ステップ4:KinesisからVantageにデータをストリーミングするGlue Streaming ETLジョブのオーサリング
以下の手順でTeradata JDBCドライバをダウンロードしAmazon S3の任意の場所にロードしてGlueストリーミングETLジョブでVantageデータベースに接続するために使用することができます。
- 最新のTeradata JDBCドライバをダウンロードします。
- ダウンロードしたファイルからtdjdcb4.jarを解凍します。
- Amazon S3バケットを作成します。
- S3バケットにtdjdbc4.jarをアップロードします。
では、AWS GlueのETLジョブタブからストリーミングETLジョブをオーサリングしてみましょう。左側のパネルからJobsをクリックし「Add Job」ボタンをクリックします。
次のページでは
- Name:Kinesis2Teradata
- IAM Role:ドロップダウンから TeradataGlueKinesisRole
- Type:Spark Streaming
- This Job Runs:Proposed Script generated by AWS Glue
を指定します。他はデフォルトのまま、下にスクロールします。
同じウィンドウ内で「Security Configuration, script libraries, and job parameters (optional)」を選択し、セクションを展開します。
Dependent jars pathフィールドにS3バケットのパスとTeradata JDBCドライバーのキー名を入力します。s3://<あなたのバケット名>/terajdbc4.jar のような形式である必要があります。:
残りのパラメータはデフォルト値のまま下にスクロールし「Next」を選択します。
Data Sourceペインが表示されますので、上記で作成したTeradataKinesisStreamテーブルのラジオボタンを選択し「Next」をクリックします。
Data Targetペインが表示されます。同じTeradataKinesisStreamを選択し「Next」をクリックします。ここでは、代わりにスクリプトで宛先を変更します。
次のウィンドウには、ソースカラムとターゲットカラムのマッピングが表示されます。変更の必要はありません。
ジョブの保存をクリックしスクリプトを編集します。またスクリプトに以下の変更を加えてください:
- 33行目で、windowSize を100秒 から5秒 に変更します。
- 32行目で「datasink1=」の行を複製し、元のバージョンをコメントアウトします。これらの値を使用して、Teradata JDBCドライバの詳細を示す以下のスニペットを追加し、この中でvantage ip/hostnameを更新することを確認します。
datasink1 = glueContext.write_dynamic_frame.from_options(frame = apply_mapping, connection_type = "jdbc", connection_options = {"url": "jdbc:teradata://ec2-XX-YYY-ZZZ-AA.us-west-2.compute.amazonaws.com/DATABASE=GlueDB,TMODE=ANSI","driver":"com.teradata.jdbc.TeraDriver","dbtable": "TeradataKinesisStream","database": "GlueDB","user": "GlueUser","password": "aws"}, transformation_ctx = "datasink1")
ページの上部にある「Save」をクリックします。最後に「Run Job」をクリックするとKinesisからVantageへのデータのストリームを開始します。
ジョブの起動には数分かかります。
Step 5: Lambda Streaming Stimulator - Kinesis Producerを起動する。
Glueジョブを実行しながらCloudFormation Resourcesページに戻ってLambda Function名を探すか、TeradataStreamingStimulator Physical IDリンクをクリックしてLambdaコンソールを起動しましょう。
Lambdaコンソールで、右上のTestボタンをクリックし、ストリーミングデータをシミュレートします。
configure test event画面が表示されます。configure test event画面でシミュレータが実行するためにリストされたフィールドでフォーマットされた以下のようなjsonレコードを指定します。テストイベントの名前を指定し「Save」をクリックして、テストイベントを作成します。
{
"bucket": "streaming-data-repo",
"stream_name": "TeradataKinesisStream"
}
バケットにストリーミングされるデータが入ります。「Save」をクリックし保存したのち再度「Test」をクリックすると設定にあるKinesis Streamにデータをストリーミングするシミュレータが起動します。
クリックすると、シミュレータは2分間実行された後、エラーでタイムアウトします。(タイムアウトはコンソールからラムダの設定で調整することができます。リソースを消費しないようにストリーミングが停止するように設定されています)
ステップ6:Amazon QuickSightを使用して分析したデータを可視化する
Vantage にロードされたデータにはさまざまな分析を適用できます。しかしこの例ではQuickSightを使用してVantageにロードされたデータを可視化する方法のデモンストレーションに重点を置いて説明します。
まずAmazon QuickSightを開き新しいデータセットを作成します。データセットの一覧からTeradataを選択するとポップアップ・ウィンドウが表示されます。
- 「Database Name」フィールドに、データベースサーバーのVantageインスタンスのDNS 名と手順3で作成したデータベースのポート(1025)およびデータベース認証情報を入力します。
- 「Validate Connection」を選択してパラメータの正しさを確認します。接続が確立され検証されるとその横に緑色のチェックマークが表示されます。
- 同じポップアップウィンドウで、「Create Data Source」を選択します。
データソースが作成されるとAmazon QuickSightはVantageのテーブルを特定します。
- TeraTopicテーブルを選択し、ポップアップウィンドウから「Use Custom SQL」を選択します。
- クエリの名前を指定しクエリとして「select * from TeraTopic」を入力し「Confirm Query」をクリックします。
- 読み込んだら「Edit/Preview data」をクリックします。以下のようにデータが読み込まれます。
- 日付フィールドのデータ型を必要に応じて変更するか計算フィールドを作成してQuickSightを使用してデータの可視化を開始することができます。
Amazon QuickSightでAutoGraphのビジュアライゼーションを作成する方法についてはこのドキュメントを参照してください。
ステップ7:後始末
この記事の一部として作成されたリソースによる追加料金が発生しないようにAWS CloudFormationのスタックを削除することを確認します。CloudFormationコンソールに移動しStacksで作成されたスタックを削除することができます。また作成されたGlue Jobsを停止し接続、データベース、テーブル、作成されたGlue Jobを削除してください。
おわりに
この記事では、AWS Glueでカスタムデータベースコネクタを設定する方法、Streaming ETLを使用してAmazon KinesisからTeradata Vantageへシームレスにデータをストリームする方法、Amazon QuickSightを使って結果を直接視覚化する方法について学びました。
ぜひお試しください!