Data Lake AnalyticsでTable StoreとOSSを分析する
本記事では、Data Lake AnalyticsでTable StoreとOSSを分析する方法をご紹介します。
はじめに
Data Lake Analyticsについて
Data Lake Analytics(DLA)は、サーバーレスの対話型クエリおよび分析サービスです。
■以下の特徴を持っています。
- ・サーバーレスアーキテクチャ* メンテナンスを不要とし、弾力的なスケーリングと透過的なアップグレードをサポート
- ・標準SQLインターフェースを提供* 標準的なJDBC(Java Database Connectivity)とODBC(Open Database Connectivity)の技術を採用
- ・複数のデータソースにまたがる関連性を分析* Object Storage Service、TableStore、AnalyticDB、RDS(MySQL、PostgresSQL、SQL Server用)、Redis、MongoDB、PolarDBなどの複数のデータソースにまたがる関連性分析をサポート
- ・高性能な分析エンジン* 新世代解析エンジンXIHEを活用し、MPP(Massive Parallel Processing)とDAG(Directed Acyclic Graph)技術を適用して高圧縮率、高スケーラビリティ、高可用性を実現
- ・BIツール連携* Quick BIやDataVなどのBIツールとの連携をサポート
- ・コストの柔軟性* 利用料金はスキャンするデータ量に基づいて課金
本ブログでは以下の機能を実際に使用してご紹介します。
・標準SQLインターフェースを提供
・複数のデータソース(本ブログでは例としてObject Storage ServiceとTable Storeを使用)にまたがる関連性を分析
以下の工程でご紹介していきます。
・Table Storeにテーブルを作成
・Object Storage ServiceにCSVをアップロード
・Data Management ServiceでTable Storeテーブルのスキーマを作成
・Data Management ServiceでTable Storeテーブルの外部テーブルを作成
・Data Lake Analyticsでテーブル結合を確認(Table Storeの異なるテーブルを結合)
・Data Management ServiceでCSVのスキーマを作成
・Data Management ServiceでCSVの外部テーブルを作成
・Data Lake Analyticsでテーブル結合を確認(Table StoreのテーブルおよびObject Storage ServiceのCSVを結合)
・Data Lake Analyticsでクエリ結果をエクスポート
環境
Table Store
Table Storeにテーブルを作成
まずはData Lake Analyticsで参照するデータをTable Storeで用意します。
参照用テーブル001の作成
テーブル定義の作成(参照用テーブル001)
以下のテーブル定義を作成します。
テーブルへのデータ挿入(参照用テーブル001)
以下のテストデータをテーブルに挿入します。
timeStamp | messageId | deviceName | rawMessage |
---|---|---|---|
2020-06-16 12:00:00 | 0000000000000000001 | dev_001 | dev_001@test@001 |
2020-06-16 12:01:00 | 0000000000000000002 | dev_002 | dev_002@test@001 |
2020-06-16 12:02:00 | 0000000000000000003 | dev_003 | dev_003@test@001 |
参照用テーブル002の作成
テーブル定義の作成(参照用テーブル002)
以下のテーブル定義を作成します。
テーブルへのデータ挿入(参照用テーブル002)
以下のテストデータをテーブルに挿入します。
timeStamp | messageId | deviceName | state | message |
---|---|---|---|---|
2020-06-16 12:00:00 | 0000000000000000001 | dev_001 | info | システムが再起動しました。 |
2020-06-16 12:01:00 | 0000000000000000002 | dev_002 | warn | xxへの接続がタイムアウトしました。 |
2020-06-16 12:02:00 | 0000000000000000003 | dev_003 | error | システムが異常終了しました。 |
Object Storage Service(OSS)
バケットとディレクトリの作成
Data Lake Analyticsで参照するデータをObject Storage Serviceで用意します。
Data Lake Analyticsで参照可能なファイルはCSV、JSON、TSV、Parquet、ORC、RCFile、Avroなど多岐に渡ります。
その中で今回はCSVを使用します。
参照するCSVを格納するディレクトリとそのディレクトリを内包するバケットを作成します。
今回は以下の階層としました。
OSSプロダクト
└バケット名
└ ディレクトリ名
└ CSVファイル
CSVファイルのアップロード
以下のテストデータが含まれたCSVをOSSにアップロードします。
deviceName,user,addressdev_001,斎藤,saito@test.comdev_002,高橋,takahashi@test.comdev_003,石本,ishimoto@test.com
Data Lake Analytics(DLA)
エンドポイントの作成
Data Lake Analyticsへのエンドポイントを作成します。
これは後のTable StoreやObject Storage Serviceとの連携の際に必要となる作業です。
Data Management ServiceからData Lake Analyticsに接続できるようにします。
以下画像の「Create Endpoint」ボタンを押下し、エンドポイントを設定します。
VPC、VSwitch、Available Zoneを設定します。
エンドポイントが作成されました。
これでData Management ServiceからData Lake Analyticsにログイン可能となります。
プロダクト連携
Data Management Serviceへのログイン
先程、作成したエンドポイントから「Log on in DMS」を押下し、Data Management Serviceコンソールに遷移します。
Data Lake Analyticsエンドポイントと、
Data Lake Analyticsのアカウント管理画面のRoot AccountでData Management Serviceにログインします。
Table Store + Data Lake Analytics 連携
Table Storeスキーマの作成
Table StoreのテーブルをData Lake Analyticsに連携させるため、
Data Management Serviceでテーブルのスキーマを作成します。
記述例
以下は記述例となります。
CREATE SCHEMA <スキーマ名> WITH DBPROPERTIES (catalog = 'ots',location = '<Table StoreインスタンスのVPCエンドポイント>',instance = '<Table Storeインスタンス名>');
Data Management Service
実際に今回入力したスキーマは以下になります。
CREATE SCHEMA ots_dla_test WITH DBPROPERTIES (catalog = 'ots',location = 'https://suzuki10-test.cn-shanghai.vpc.tablestore.aliyuncs.com',instance = 'suzuki10-test');
Data Lake Analytics
スキーマ作成に成功するとData Lake Analyticsコンソールでスキーマが作成されます。
外部テーブルの作成
引き続きData Management Serviceで作業をします。
スキーマの次は外部テーブルを作成します。
記述例
以下は記述例になります。
Table Storeで作成したテーブル定義により、以下の記述は変化しますので、Table Storeのテーブルに合わせ調整します。
CREATE EXTERNAL TABLE <スキーマ名>.<テーブル名> (`<フィールド名>` <データ型> <not NULL または NULL> ,`<フィールド名>` <データ型> <not NULL または NULL> ,PRIMARY KEY (`<主キーのフィールド名>`, `<主キーのフィールド名>`));
外部テーブルの作成(参照用テーブル001)
今回作成した外部テーブルは以下になります。
CREATE EXTERNAL TABLE ots_dla_test.tbl_001 (timeStamp varchar not NULL ,messageId varchar not NULL ,deviceName varchar not NULL ,rawMessage varchar NULL ,PRIMARY KEY (`timeStamp`, `messageId`, `deviceName`));
外部テーブルの作成(参照用テーブル002)
今回作成した外部テーブルは以下になります。
CREATE EXTERNAL TABLE ots_dla_test.tbl_002 (timeStamp varchar not NULL ,messageId varchar not NULL ,deviceName varchar not NULL ,state varchar NULL ,message varchar NULL ,PRIMARY KEY (`timeStamp`, `messageId`, `deviceName`));
テーブル結合
Data Management Serviceでスキーマと外部テーブルを作成すると、
Data Lake Analyticsコンソールでクエリの実行が可能となります。
では、実際にData Lake Analyticsコンソールで今回作成した2つのテーブルに対し、クエリを発行してみます。
テーブル結合イメージは以下になります。
以下のSELECT文をData Lake Analyticsコンソールの「Serverless SQL > Execute」画面で入力し、実行します。
SELECT rawMessage, state, message FROM ots_dla_test.tbl_001INNER JOIN ots_dla_test.tbl_002ON ots_dla_test.tbl_001.messageId = ots_dla_test.tbl_002.messageId;
結果は以下になります。
本ブログで作成したTable Storeの2つのテーブルが結合され結果が表示されました。
Table Store + Object Storage Service + Data Lake Analytics 連携
Object Storage Serviceスキーマの作成
Object Storage ServiceのCSVをData Lake Analyticsに連携させるため、
CSVのスキーマを作成します
記述例
以下は記述例になります。
CREATE SCHEMA oss_dla_test with DBPROPERTIES(catalog='oss',location = 'oss://<バケット名>/<あればディレクトリ名>/');
Data Management Service
実際に今回入力したスキーマは以下になります。
CREATE SCHEMA oss_dla_test with DBPROPERTIES(catalog='oss',location = 'oss://oss-suzuki10n01/dla/');
Data Lake Analytics
スキーマ作成に成功するとData Lake Analyticsコンソールでスキーマが作成されます。
外部テーブルの作成
引き続きスキーマの次はTable Store同様、Data Management Serviceで外部テーブルを作成します。
記述例
以下は記述例になります。
今回参照するのはObject Storage ServiceにアップロードしたCSVになりますので、
CSVに合わせた外部テーブルを作成します。
CREATE EXTERNAL TABLE <スキーマ名>.<テーブル名>(<フィールド名> <データ型>,<フィールド名> <データ型>)ROW FORMATSERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'WITH SERDEPROPERTIES('serialization.encoding'='<文字コード>', 'field.delim'='<データの区切り文字>')STORED AS TEXTFILELOCATION 'oss://<バケット名>/<ディレクトリ名>/<ファイル名>'TBLPROPERTIES ('skip.header.line.count' = '<読み込み対象外の行数>')
外部テーブルの作成(CSV)
実際に作成したテーブルは以下になります。
OSSにアップロードしたCSVに合わせ以下を調整しています。
・CSVの区切り文字にカンマを使用しているため、'field.delim'=','を指定
・CSVに日本語が含まれるため、'serialization.encoding'='SJIS'を指定
・CSVにフィールド名を記入しているので、'skip.header.line.count' = '1'を指定
CREATE EXTERNAL TABLE oss_dla_test.oss_testdata_csv(deviceName STRING,user STRING,address STRING)ROW FORMATSERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'WITH SERDEPROPERTIES('serialization.encoding'='SJIS', 'field.delim'=',')STORED AS TEXTFILELOCATION 'oss://oss-suzuki10n01/dla/oss_testdata001.csv'TBLPROPERTIES ('skip.header.line.count' = '1')
テーブル結合
Data Management ServiceでObject Storage ServiceのCSVスキーマと外部テーブルを作成すると、
Object Storage Serviceに関してもData Lake Analyticsコンソールでクエリの実行が可能となります。
実際にData Lake Analyticsコンソールで以下の3つのテーブルに対し、クエリを実行してみます。
・Table Store 参照用テーブル001
・Table Store 参照用テーブル002
・Object Storage Service CSVファイル
テーブル結合イメージは以下になります。
以下のSELECT文をData Lake Analyticsコンソールの「Serverless SQL > Execute」画面で入力し、実行します。
SELECT rawMessage, state, message, address FROM ots_dla_test.tbl_001INNER JOIN ots_dla_test.tbl_002ON ots_dla_test.tbl_001.messageId = ots_dla_test.tbl_002.messageIdINNER JOIN oss_dla_test.oss_testdata_csvON ots_dla_test.tbl_001.devicename = oss_testdata_csv.devicename
結果は以下になります。
本ブログで作成したTable Storeの2つのテーブルとObject Storage ServiceのCSVが結合され異なるデータソースからなる結果が表示されました。
データエクスポート
Data Lake Analyticsはクエリで結合したテーブルをCSV形式でエクスポートが可能です。
Execute画面の「エクスポート結果セット(Export Result Set)」ボタンを押下することでCSVファイルをダウンロード可能です。
ダウンロードされたCSVファイルはExecute画面でのクエリ結果が反映されています。
"rawMessage","state","message","address""dev_001@test@001","info","システムが再起動しました。","saito@test.com""dev_003@test@001","error","システムが異常終了しました。","ishimoto@test.comm""dev_002@test@001","warn","xxxへの接続がタイムアウトしました。","takahashi@test.com"
まとめ
今回はData Lake Analyticsを使用したクエリ実行についてご紹介しました。
Data Lake Analyticsと各プロダクトを連携することでTable Storeのテーブルだけではなく、
Object Storage ServiceのCSVもまとめてデータ分析することができました。
Data Lake Analyticsうまく活用することで異なるデータソースの関連データの解析が容易になると思われます。
今回はTable StoreとObject Storage Serviceとの連携について記載しましたが、
他にもRDSとの連携や、OSSにアップロードしたログの分析などにもData Lake Analyticsは活用できます。