[AWS] [データウェアハウス] Redshiftの実践的な実験---ユナイテッド航空の航空会社のデータを分析する

実験には以下が含まれます:

  1. AmazonRedshiftクラスターを作成します
  2. SQLクライアントを介してAmazonRedshiftに接続します
  3. S3データをAmazonRedshiftにロードする
  4. AmazonRedshiftでデータをクエリする
  5. AmazonRedshiftのパフォーマンスを監視する

タスク1:AmazonRedshiftクラスターを作成する

2ノード
データベース構成へのドロップダウン:
データベース名:ラボ
マスターユーザー名:マスター
マスターユーザーパスワード:Redshift123

次に、S3フルアクセスでロールを作成(または選択)します。
作成しない場合:

{ 「バージョン」:「2012-10-17」、「ステートメント」:[ { 「アクション」:「s3:」、「リソース」:「」、「効果」:「許可」} ] }








クラスターパーミッションで新しく作成されたロールを選択します:Redshift-Role
このロールのARNをコピーします。後で使用します:arn:aws:iam :: 303364507332:role / Redshift-Role

その他の設定:選択したセキュリティグループに注意して、インバウンドTCPポート5439を解放します。

作成を開始します。

作成後のステータス:

ノードとクラスターを説明するために、前のアーキテクチャ図をここにドラッグします。

XXXX(PS:ビデオデータウェアハウスの章を見てみましょう)

Task2:链接Amazon Redshift

Redshiftクラスターに接続する主な方法は2つあります。2つの方法を簡単に紹介します
。1つ:AWSコンソールを使用してクラスターに直接クエリを実行します。
2:pgwebなどのDBクライアントを使用して接続します。ポート番号は5439であることに注意してください。

最初の方法は、Redshifit、Queryクラスターを直接クリックし、関連するデータベース名を入力することです。ユーザーと一時パスワードでログインして、Queryステートメントを実行できます。
(一時パスワードでログインする必要があることに注意してください)

Task3:S3データをAmazonRedshiftにロードする

最初にデータウェアハウステーブルを作成し、次のコードをRedshiftのクエリエディターにコピーして実行します:(
作成されたテーブルはパブリックスキーマにあることに注意してください)

CREATE TABLEフライト(
年smallint、
月smallint、
日smallint、
キャリアvarchar(80)DISTKEY、
origin char(3)、
dest char(3)、
aircraft_code char(3)、
miles int、
departures int、
minutes int、
seats int、
乗客int、
freight_pounds int
);

返された結果:

次に、このコードをクエリエディターにコピーして、
次のコマンドを実行します(注:IAM_ROLEは独自のIAM ARN、 'arn:aws:iam :: 303364507332:role / Redshift-Role'に置き換えられます)


's3://us-west-2-aws-training/awsu-spl/spl-17/4.2.6.prod/data/flights-usa'
IAM_ROLE'arn:aws:iam :: 303364507332:roleからフライトをコピーします/赤方偏移-ロール「
GZIP
DELIMITER」、」
REMOVEQUOTES REGION'us
-West-2' ;
(注、このクエリがすぐに実行され、SQLを実行しているときに何もデータが照会されていない場合は、自分の役割が正常に追加されているかどうかを確認してください。 )

このコードは、23 CSVを含む6GBのデータをコピーするため、実行に少し時間がかかります(約2分、海外でRedshiftを使用します。1分44秒。なぜこんなに速いのですか?データソースのアドレスを確認してください)。データファイル、データは1990年から2012年までのユナイテッドエアラインのデータ(96825753データ)に基づいています。
実行時に、データはS3からRedshiftクラスターに並列にロードされます。
テーブルを作成するときにパーティションキーを指定できます。この実験では、パーティションキーはcarrier varchar(80)DISTKEYである
ため、データがテーブルに読み込まれると、各行のデータが各ノードスライスに割り当てられます。パーティションキーによると。以前のRedshiftアーキテクチャで説明したように、適切なパーティションキーを選択すると、クエリの効率と並列データの読み込み速度を大幅に向上させることができます。

2〜5分の待機時間の後、データのコピーが完了します

DBクライアントツールを使用して最初に確認できます。データは次のようになります(9千万を超えるデータ)。

タスク4:クエリの実行:

フライトからCOUNT(*)を選択します。

データ分析やデータ探索では、各フィールドの意味を理解することが非常に重要です。フィールドノートは次のとおりです。

1.まず、フライトテーブルで10個のデータをランダムに見つけます。

SELECT *
FROMフライト
ORDERBY random()
LIMIT 10;

2.最も多くの出発がある航空会社とgroupbyキャリアのトップ10を見つけます。


航空会社を選択
合計(出発)
フライトから
GROUPBY航空会社
ORDERBY 2 DESC
LIMIT 10;

実際、まだまだ書くべきことがたくさんあります。会社の特定のニーズに対応するとき、上司は多くのアイデアを持っています。たとえば、
彼はまたどの航空会社が最もTOP3の乗客を運んでいるかを知りたいですか?

タスク5:テーブルの結合

テーブルアソシエーションクエリは、リレーショナルデータベースの方法に似ています。前のコースで説明しました。データウェアハウスの概念は、実際にはデータベースのアップグレードバージョンであり、より大きなデータとより多くの次元の分析が含まれています。

別のテーブルを作成し、そのスキーマを定義します。

CREATE TABLE航空機(
aircraft_code CHAR(3)SORTKEY、
aircraft VARCHAR(100)
);

次に、前の手順のように、テーブルにデータを挿入し、クエリエディタにコマンドをコピーします。

航空機を
's3://us-west-2-aws-training/awsu-spl/spl-17/4.2.6.prod/data/lookup_aircraft.csv'
IAM_ROLE'arn:aws:iam :: 283565736923:roleからコピーします/ Redshift-
Role'IGNOREHEADER 1
DELIMITER '、'
REMOVEQUOTES
TRUNCATECOLUMNS
REGION 'us-west-2';

まず、新しく作成されたテーブルでランダムに10個のランダムデータをチェックしましょう。

SELECT *
FROM航空機
ORDERBY random()
LIMIT 10;

返された結果:

このテーブルには2つのフィールドが含まれていることがわかりました。1つは航空機コードで、もう1つは航空機です。この航空機コードは、フライトテーブルのフィールドでもあります。次に、それらをアソシエーション結合として作成し、多くの次元クエリを実行できます。((aircraft_code)を使用して航空機に参加する)

SQLの実行:フライト数(別名はトリップ)TOP10航空機(フライト番号である必要があります)。

SELECT
航空機、
SUM(出発)の旅行AS
便FROMは
使用して航空機のJOIN(aircraft_code)
GROUP BY航空機
ORDER BYがDESCトリップ
LIMIT 10;

次のステップはDBクライアントを使用することです。興味のある学生は、DBクライアントを再度使用することも、無視することもできます。Task6に直接ジャンプ:パフォーマンス分析

2:pgwebなどのDBクライアントを使用して接続します。ポート番号は5439であることに注意してください。

Redshiftのホストアドレス

次に、Run Queryには、flightsという名前のテーブルが作成されます。

タスク6:データのロード:

次に、COPYコマンドを実行します

タスク7:クエリの実行:

运行SQL:フライトからCOUNT(*)を選択します。

SELECT * FROM FlightORDER BY random()LIMIT 10;

SELECTキャリア、SUM(出発)FROMflightsGROUP BYcarrierORDER BY 2 DESCLIMIT 10;

タスク8:パフォーマンス分析

Redshiftクエリエディターは複数のSQLをサポートしていないため、このSQLを実行するにはDBclinetを使用する必要があります。エラー:複数のSQLステートメントは許可されていません。

enable_result_cache_for_sessionをOFFに設定します。

EXPLAIN
SELECT
航空機を、
SUM(出発)の旅行AS
便FROMは
使用して航空機のJOIN(aircraft_code)
GROUP BY航空機
ORDER BYがDESCトリップ
LIMIT 10;

どういう意味ですか?SQLのこの文は、主に各論理ステップでクエリに費やされた時間を分析します。SUMはいつ実行され、そのコストは?JOINはいつ実行され、そのコストは?SQLクエリのパフォーマンスを最適化するための対応は非常に重要です。

データ圧縮と列指向ストレージ

これらの2つのポイントが、データウェアハウスのクエリ効率が従来のリレーショナルデータベースよりも速い主な理由です。

このSQLを実行し、分析してみましょう。

圧縮フライトの分析;

エンコードは圧縮方法であり、Est_reduction_pctは圧縮率を表します。すごいじゃないですか?
詳細については、https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/r_ANALYZE_COMPRESSION.htmlを参照してください。

タスク9:既存のテーブルから新しいテーブルを作成します。

目的はさらに分析することです。たとえば、ロサンゼルスに飛ぶ乗客の数を分析したいですか?ラスベガスへのTOP10の最も人気のあるフライトは何ですか?
さて、始めましょう、空港テーブルを作成し、SORTKEYを定義します:

CREATE TABLE
Airports airport_code CHAR(3)SORTKEY、
airport varchar(100)
);


's3://us-west-2-aws-training/awsu-spl/spl-17/4.2.6.prod/data/lookup_airports.csv'
IAM_ROLE'arn:aws:iam :: 488279654332:roleから空港をコピーします/ Redshift-
Role'IGNOREHEADER 1
DELIMITER '、'
REMOVEQUOTES
TRUNCATECOLUMNS
REGION 'us-west-2';

ラスベガスのフライトのテーブルを作成します。

TABLE vegas_flights CREATE
DISTKEY(原点)
SORTKEY(原点)
AS
SELECTの
便を*、。
空港
便FROMが
起源= AIRPORT_CODE ON空港のJOIN
DEST = 'LAS';

次に、ラスベガス行きの最も人気のあるトップ10のフライトを見つけましたか?

SELECT
Airport、
to_char(SUM(passengers)、 '999,999,999')
aspassengers FROM vegas_flights
GROUP BY Airport
ORDER BY SUM(passengers)desc
LIMIT 10;

タスク10:ディスク容量とデータ分散を確認する

SELECT
所有者ASノード、
diskno、
使用済み、
容量、
使用済み/容量::数値* 100
パーセントとして使用FROMstv_partitions
WHERE host = node
ORDER BY 1、2;

使用済み:メガバイト、使用されているMBディスクの数
容量:ディスク容量。
Percent_used:使用量。ここで、node0は0.54%を使用し、node1は0.42%を使用しました。

タスク11:監視とメンテナンス

各クエリの実行:

クラスターの概要の監視:

構成と既存のクラスターへの変更:
暗号化、スナップショット、復元、構成情報の変更などはすべてここにあります。

アラームを作成します。

まあ、私はそれを段階的に行い、それほど多くを書くことを期待していませんでした。

最後に、クラスターを閉じることを忘れないでください。地元の専制君主は無料です。

詳細なビデオリファレンス:https
//edu.51cto.com/center/course/lesson/index?id = 558306

おすすめ

転載: blog.csdn.net/u010478127/article/details/106815306