実験には以下が含まれます:
- AmazonRedshiftクラスターを作成します
- SQLクライアントを介してAmazonRedshiftに接続します
- S3データをAmazonRedshiftにロードする
- AmazonRedshiftでデータをクエリする
- 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