このブログ記事は、Introducing Data Import from Amazon S3 in MySQL HeatWave on AWSの翻訳版です。
概要
MySQL HeatWave on AWSはHeatWaveインメモリ・クエリ・アクセラレータを利用したフルマネジド・データベース・サービスであり、トランザクション処理と分析処理および機械学習をMySQLとデータレイクに保存されたデータに対して行うことができる、業界唯一の統合されたクラウド・データベース・サービスです。HeatWave on AWSは、作業の複雑さや遅延をお客様に感じさせることなく、またワークロードごとに異なるシステムを使うことによるETL処理の重複や利用コストの追加なしで、リアルタイムでセキュアな分析を可能にします。
MySQLデータベースを使ってデータを保存し、MySQL HeatWaveで高速処理する際に、まずデータのインポート作業が必要です。MySQL HeatWaveにデータをインポートする方法としてMySQL Shellを使用する場合、下記の2種類があります。
- パラレル・テーブル・インポート
比較的大きなデータ・ファイルを区切り文字(デリミター)を使用したテキスト・ファイル形式で、MySQL テーブルにインポートする方法です。
- ダンプ・ロード
MySQL Shell ダンプユーティリティによって、エクスポートしたMySQLダンプ・ファイルをインポートする方法です。
いずれの方法でもMySQL HeatWave on AWSへの高速データ・インポートが可能です。これらの方法でインポートをする場合、AWS環境のクライアント・マシンにMySQL Shellがインストールされている必要があります。AWS環境では通常AWS EC2をご利用いただくと思いますが、MySQL Shellの利用の際に以下の留意点があります。
- ユーザ・インターフェース: MySQL Shellは現在コマンドラインのみでのご提供です。
- コスト: クライアント・マシンとMySQL HeatWave間のデータ転送にコストがかかります。
- セキュリティ: S3のデータへのアクセスには、AWSユーザのアクセスキーのみサポートしています。
- 性能: HeatWaveが直接Amazon S3からデータを読みに行かず一旦クライアント・マシンにロードするため、時間がかかります。

そこで本記事では、Amazon S3からMySQL HeatWave on AWSへのデータ・インポートを可能にする機能をご紹介します。これを用いることで、Amazon S3のデータをMySQL HeatWave on AWSに直接読み込ませることができます。MySQL HeatWave on AWSコンソールにおける、シンプルで直感的なユーザ・インターフェースからこの機能を使うことができます。

この新しいデータ・インポート機能はシンプルな操作性で、優れたセキュリティとパフォーマンスを発揮します。
- 使いやすさ: MySQL HeatWave on AWSコンソールにおける数クリックの操作で、Amazon S3のデータをMySQL HeatWave on AWSに読み込ませることができます。MySQL Shell(MySQL Shellダンプと、区切り文字によるテキストファイル)で操作するのと同様のデータ形式をサポートしています。


- コスト削減: MySQL Shellを操作するためのEC2インスタンスは必要ありません。そのため、Amazon S3のデータをMySQL HeatWaveへ読み込ませる際にデータ転送料などはかかりません。
- セキュリティ強化: Amazon S3の認証にAWSユーザのアクセスキーをサポートしているのに加え、新しいデータ・インポート機能ではAWS IAMロールをサポートしています。そのため、Amazon S3から特定のMySQL HeatWaveインスタンスへの排他的なアクセスを可能にし、お客様のビジネスを守る強固なセキュリティを提供します。
- 性能向上: Amazon S3に保存されたデータをMySQL HeatWaveインスタンスへ直接ダウンロードするので、従来の方法のようにデータ転送が重複することはありません。
適用例
このデータ・インポート機能は次のような使い方ができます。
- 他のMySQLデータベースからのマイグレーション
- AWS Aurora、AWS RDS、AWS EC2インスタンスやオンプレミスで運用しているMySQLからのマイグレーションの際に、MySQL Shellで取ったデータ・ダンプをMySQL HeatWave on AWSにインポートすることが可能です。
- 区切り文字によるテキストファイルでエクスポートしたAWS Redshift、Snowflake、Google BigQueryのデータを、MySQL HeatWave on AWSにインポートすることが可能です。
- 区切り文字によるテキストファイルの定期的なインポート
- お客様やパートナー様からテキストファイルでデータを頂いている場合、本記事でご紹介するデータ・インポート機能を使ってMySQL HeatWave on AWSにロードすることができます。
- 社内のアプリケーションやログをMySQL HeatWave on AWSで処理し、ダウンストリーム・アプリケーションなどに活用することができます。
実施例
この実施例では、AWS US EastリージョンのAmazon S3に保存されたairportdbというデータベースのMySQLダンプを、MySQL HeatWave on AWSインスタンスにインポートし、HeatWaveクラスターにデータのロードとクエリ実行を行います。
- Amazon S3と同じリージョンで、MySQL HeatWave on AWSコンソールのMySQLタブのDB Systemタブに移動したら、Create MySQL DB Systemを選択します。

- MySQL DB SystemとHeatWave Clusterの作成フォームを埋めます。MySQLデータベースとHeatWaveクラスターの作成には、15〜20分ほどかかります。
本実施例ではData Import Role ARNとして下記のAWS IAMを使用し、手順5にてAmazon S3からMySQL DB Systemにサンプルデータをロードします。
Copied to Clipboard
Error: Could not Copy
Copied to Clipboard
Error: Could not Copy
arn:aws:iam::612981981079:role/oracle-mysql-heatwave-sample-data-role



- WorkspacesタブのData Importsタブに移動し Connect to MySQL DB Systemをクリックしたらポップアップが出るので、手順2で作成したデータベース名、ユーザ名、パスワードを記入して接続します。

- Import Dataをクリックします。

- Import Data into MySQL DB Systemフォームを埋めて、Importをクリックします。サンプルデータairportのMySQL Dumpを使用するには、下記のURIでAmazon S3バケットにアクセスしてください。
Copied to Clipboard
Error: Could not Copy
Copied to Clipboard
Error: Could not Copy
s3://oracle-mysql-heatwave-sample-data-us-east-1/published/airportdb/v1/mysqldump/

- Import Data into MySQL DB Systemフォームで書いたDisplay nameが表示されるので(実施例ではAirportDB)、クリックします。

- 全てのスキーマとテーブルがMySQLにロードされるまで(約10〜15分)、WorkspacesタブのDetailsにスキーマ毎、テーブル毎のデータ・インポートの進捗が表示されます。ロードが完了したら、Stateのランプが黄色から緑色になり、In ProgressからSucceededと表示が変わります。

- WorkspacesタブのManage Data in Heatwaveタブに移動し、airportdbの全てのテーブルを選択したらLoad into HeatWaveをクリックします。

- ロード操作を開始するために、ポップアップ画面のLoad Tablesをクリックします。

- 全てのテーブルがHeatWaveにロードされるまで(約2〜3分)、スキーマ毎、テーブル毎のデータ・インポートの進捗が表示されます。表示を更新するにはRefresh Estimateをクリックします。

- WorkspacesタブのQuery Editorにて、実行したいSQL文を入力しRun Queryをクリックします。下記は実行例です。
Copied to Clipboard
Error: Could not Copy
Copied to Clipboard
Error: Could not Copy
USE airportdb;
SELECT price, count(*) FROM booking WHERE price > 500 GROUP BY price ORDER BY price LIMIT 10;

- HeatWaveの高速処理により、実施例では上記のクエリを1秒未満で実行できました(約0.410秒)。

- HeatWaveからairportdbをアンロードしMySQLのみで同じクエリを実行すると、実施例ではHeatWaveを用いたときと比べて処理時間が約40倍長くかかりました(約17.4秒)。
Copied to Clipboard
Error: Could not Copy
Copied to Clipboard
Error: Could not Copy
USE airportdb;
SET session use_secondary_engine=OFF;
SELECT price, count(*) FROM booking WHERE price > 500 GROUP BY price ORDER BY price LIMIT 10;

総括
本記事でご紹介した方法は、シンプルな操作性で安全に、高い費用対効果でMySQL HeatWave on AWSへのデータ・インポートを実現します。Amazon S3からMySQL HeatWave on AWSに直接かつ迅速にデータをインポートしていただける様に、この機能は直感的に操作できるWebコンソールで提供されています。ユーザの皆様にはAmazon S3に保存してあるデータに対して、MySQL HeatWave on AWSが実現するトランザクション処理、高速分析、機械学習を活用していただけるようになります。
参考情報:
Mandy Pang
Senior Principal Product Manager
MySQL HeatWave Product Manager
小野 明日美 ONO, Asumi
MySQL Solution Engineer
MySQL Solution Engineer, 日本オラクル