Amazon Redshiftは、あらゆる業界や規模の企業の中で最も著名なデータウェアハウスのリーダーの一つです。
Amazon Redshiftを使用することで、大量のデータを取得、比較、評価し、目的の結果を得るために複数の段階でデータの操作を行うことができます。巨大なクラウドコンピューティングプラットフォームであるAmazon Web Servicesの一部を構成するこのフルマネージドなペタバイトスケールのデータウェアハウスは、今回紹介する機能の組み合わせにより、高いパフォーマンスと効率的なストレージを実現しています。
Table of Content:
- Amazon Redshiftの概要と新規ソフトウェア開発者の移行ガイド
- データベースの設計・構築方法
- どのようにデータをロードし、データベースでクエリーを実行するか?
- データベースを維持・管理するには?
- データウェアハウスのデータベースを開発する際のベストプラクティスとは?
- Intermixはどのように役立つ?
Amazon Redshiftの概要と新規ソフトウェア開発者の移行ガイド
Amazon Redshiftのアーキテクチャには、7つの主要なコンポーネントがあります。
- Data applications
Amazon Redshiftは、いくつかのデータアプリケーションで使用できます。ETL、アナリティクス、ビジネス・インテリジェンス/レポーティングツールなどです。さらに、もしあなたがSQLを書くことに慣れているのであれば、Redshiftは業界標準のPostgresをベースにしているので、Postgresと多くの共通点があり、そのクエリ言語はSQLに大きく似ているので、使用するのは難しくありません。したがって、業界標準のPostgreSQL用JDBCドライバやODBCドライバを使って、クライアントアプリケーションに接続することができます。
- Clusters
クラスターは、Redshiftのアーキテクチャにおける基本的なコンポーネントの1つです。2種類のノードで構成されています。リーダーノードとコンピューティングノードで、以下に詳しく説明します。クラスターに1つ以上のコンピュートノードがある場合は、異なるやり取りやデータアプリケーションの通信を処理するリーダーノードもあります
- Leader nodes
リーダーノードは、コンパイルされたコードを計算ノードに配布するためのクエリ実行プランを解析・作成し、各コンピューティングノードにデータを割り当てます。テーブルを参照しているコンピューティングノードのみが実行に関与します。それ以外のクエリはリーダーノードでのみ実行されます。
- Compute nodes
Amazon Redshiftのクラスターには、少なくとも1つのコンピューティングノードが含まれています。このタイプのノードは、割り当てられたコンパイル済みのコードを実行し、その結果をリーダーノードに返して集約します。
- Node slices
スライスとは、コンピュートノードを分割したもので、ノードのメモリとディスクの容量が一定の割合で割り当てられています。スライスの概念は、各スライスがノードのワークロードの一部を処理するために並行して動作するという、ワークロード管理に役立ちます。
- Internal network
Redshiftは、クラスターのノードが通信や操作を行うために、近距離で通信可能な広帯域の接続の恩恵を受けて、独立した隔離された高速の内部ネットワークを作成します。
- Databases
Amazon Redshiftは、エンタープライズクラスのリレーショナルデータベースのクエリと管理システムであるため、他のRDBMSアプリケーションとの互換性があります。Redshiftは、従来のOLTP機能に加えて、巨大なデータセットの高性能な分析とレポート作成のために構築されています。各Redshiftクラスターは、1つまたは複数のデータベースで構成されています。
You can read more on AWS Redshift Architecture: Clusters & Nodes & Data Apps, oh my!
データベースの設計・構築方法
データの理解は、データベースの設計を強固なものにするための主要かつ重要なステップです。データの理解に基づいて、多くの状況を有利に活用することができ、十分な情報に基づいた意思決定と明確な実装ビジョンをもつことができます。データの知識があれば、予想されるデータ保存量や、クエリのパフォーマンスなど、さまざまなパラメータをコントロールすることができます。クエリを作成する前に、データと既存のリレーションシップを十分に理解するために時間をかけることが重要です。
データベースを作成する前に、Amazon Redshiftのクラスターをセットアップし、すべてが稼働していること、SQLクライアントツールにしっかりと接続されていることを確認する必要があります。1つのクラスターで複数のデータベースをホストすることができます。
例えば、eコマースビジネスのためのデータベースを構築するとしましょう。まず、クラスターを立ち上げたときに作成した初期のデータベースに接続して、以下のコマンドを実行します。
create database e-commerce;
データベースの名前は、予約語を含まない127バイトまでの任意の名前を使用することができます。作成したeコマース・データベースは、Redshiftのクラスターを起動したときに作成したマスター・ユーザーのみがアクセスできます。他のユーザーのアカウントを追加するには、CREATE USERコマンドを実行します。
たとえば、パスワードが ProductsManager の manager というユーザーを作成するには、次のコマンドを実行します。
create user manager password 'ProductsManager';
どのようにデータをロードし、データベースでクエリーを実行するか?
- 自身でデータをロードする
この時点で、e-commerceというデータベースがあり、そこに接続されています。あとは、テーブルを作成して、データをロードする必要があります。
まず、customersテーブルを作りましょう。
create table customers( customerid integer not null distkey sortkey, username char(8), firstname varchar(30), lastname varchar(30), city varchar(30), state char(2), email varchar(100), phone char(14));
同じ構文を使って残りのテーブルを作成し、COPYコマンドを使ってAmazon S3バケットやDynamoDBなどに保存されているデータをテーブルにロードすることができます。データは通常、COPYコマンドでAWS Redshiftにロードされますが、このコマンドはAmazon Redshiftの超並列処理アーキテクチャを利用して、ファイルを並列に読み書きするためのものです。
- データ統合サービスのパートナー
開発時間や問題を気にすることなく、簡単にRedshiftにデータをロードすることを可能にするETLやデータ統合サービスは数多くあります。お勧めの業界リーダーは、Integrate.io、Stitch、Talendなどです。
データを読み込んだ後は、SELECT、INSERT、DROPなどの標準的なSQLコマンドを使って、データベースを操作できるようになります。
データベースを維持・管理するには?
データベースの管理とメンテナンスは、このプロセスの中で最もエキサイティングではないかもしれませんが、効果的なデータベースの導入には欠かせない部分の一つです。このステップは、導入の多くの側面を強化する反復的なプロセスで、次のような内容が含まれます。
- バックアップとリカバリプランの設定
- テーブルを継続的にメンテナンスする
- ワークロードの効率的な管理
- 定期的にクエリを最適化する
このステップを踏むことで、データベースから望ましい結果を得られるだけでなく、Redshiftのパフォーマンス向上させる以下の主要な特性から恩恵を受けることができます。
- 超並列処理
- カラム型データストレージ
- ターゲットデータ圧縮エンコーディングスキーム
データウェアハウスのデータベースを開発する際のベストプラクティスとは?
クエリのパフォーマンスを最大化するために、以下の推奨事項は、Redshiftの利用をサポートしてくれます。
- テーブルを設計する場合: COPYに圧縮エンコーディングを選択させ、主キーと外部キーの制約を定義し、可能な限り小さいカラムサイズを使用し、日付カラムには日付/時刻データ型を使用する。
- データをロードする場合: COPYコマンドを使用してデータをロードする、1つのCOPYコマンドで複数のファイルからロードする、ロードデータを複数のファイルに分割する、ステージングテーブルを使用してマージを行う。
- クエリを設計する場合:select allの使用を避ける、複雑な集約を行うためにCASE式を使用を避ける、絶対に必要な場合以外はクロスジョインを使用しない、可能であればWHERE句を使用してデータセットを制限する、ジョインするテーブルにフィルタリングを追加する、など。
Intermixはどのように役立つ?
Intermixは、データチームがAmazon Redshiftクラスターのコストとパフォーマンスを最適化するためのパフォーマンスマネジメント製品です。AWSコンソールは、クラスターのヘルスメトリクスをリアルタイムに監視するのに適しています。intermix.ioでは、過去のトレンドや、個々のユーザーやモデルへのドリルダウン機能が備えられています。Intermixは、クラスターを効率的にスケーリングし、エンドユーザー・エクスペリエンスを真に理解するためのインサイトを得て、十分な情報に基づいた意思決定を行うことができます。