【受験記録】AWS certified Data Analytics - Speciality(DAS-C01)

## 前提
- 4年目エンジニア
- アプリケーション開発メイン
- インフラはあんまり触らない
- AWS　CLF,　Associate3つ, AWS SAPは保持
- 受験日 2022/5/4

##試験結果
点数:806点/750点/1000点(取得スコア/合格ボーダー/満点スコア)
スコアパフォーマンス: "分野4:分析および可視化"を除くセクションは"コンピテンシーを満たしている"

## 試験感想
DASに関してはインターネット上に情報が少なく、対応している書籍も日本語ではないので、勉強の仕方に苦労しました。
受験予約は結構昔にしていましたが、実際の勉強期間は試験ガイドを確認初めてから２週間くらいでGWに入ってから詰め込んだ感じでした…
勉強は以下の流れで進めていきました。
（Bigdata on AWS）→ DAS試験ガイド→ データレイク書籍→ whizlab動画 サマリ視聴→ whizlab 模擬問題  →AWS公式サンプル問題、公式練習問題集

- [DAS公式ガイド](https://aws.amazon.com/jp/certification/certified-data-analytics-specialty/#:~:text=AWS%20Certified%20Data%20Analytics%20%2D%20Specialty%20%E8%A9%A6%E9%A8%93%E3%82%AC%E3%82%A4%E3%83%89)
    - 公式が出してくれている試験に関するガイド資料。試験対象のサービスや問われる観点を確認しました。
- [データレイク書籍](https://www.amazon.co.jp/AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AC%E3%82%A4%E3%82%AF-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%81%AB%E3%82%88%E3%82%8B%E7%B5%B1%E5%90%88%E5%9E%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80-%E4%B8%8A%E5%8E%9F-%E8%AA%A0/dp/491031301X)
    - さまざまな方の受験体験記で言及されていたので購入して読了。ハンズオン形式だったがハンズオンは実施せず、一通り流し読みして書籍で出てくるサービス概要や連携の仕方を把握するために使用しました。
- [whizlab](https://www.whizlabs.com/aws-certified-data-analytics-specialty/)
    - 過去に5年サブスクリプションで買っていたため、模擬問題、解説動画、ラボ使用し放題の状態です。解説動画は英語なので（集中力が保たず、）各セクションのサマリ動画のみ視聴、あとは模擬問題を繰り返し、実施しました。模擬問題でよくわからなかった部分に関してはBlackbelt等を使用していました。
- [AWS公式サンプル問題](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-data-analytics-specialty/AWS-Certified-Data-Analytics-Specialty_Sample-Questions.pdf),[公式練習問題集](https://aws.amazon.com/jp/certification/certified-data-analytics-specialty/#:~:text=AWS%20Certified%20Data%20Analytics%20%2D%20Specialty%20%E5%85%AC%E5%BC%8F%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C%E9%9B%86)
    - おなじみAWS公式のサンプル問題、公式練習問題集。

受験中にはいくつか初見のサービスもありました（Data Exchangeなど）が、おおむね模擬問題やサンプル問題等の傾向と変わらない印象を受けました。

##  勉強メモ
（正確性は保証しません）
### Kinesis Data Stream
- 書き込みスロットリング時の対応
	- シャードの数を増やす
	- ランダムなパーティションキーを使用し、シャード間の配分を均等になるように調整する

### Kinesis Data Firehose
- データターゲット
	- S3
	- Redshift（S3経由）
	- ES
	- Splunk
- データ変換
	- Lambdaによるデータ変換が可能(機密情報の削除など)

### Kinesis Data Analytics
- リアルタイム分析ツール(Firehoseと組み合わせ)
- アルゴリズム
	- Random Cut Forest (RCF): 異常検出アルゴリズムのひとつ
- データ出力先
	- Kinesis Data Firehose
	- Lambda
	- Kinesis Data Streams
- ウインドウクエリ
	- スタッガーウインドウ: データの到着に合わせて開く、時間ベースのウインドウによるデータ集約
	- タンブリングウインドウ: 一定間隔で開閉し、各ウインドウに重複しない。周期的なレポート用。
	- スライディングウインドウ: 固定の時間で継続的にデータを集約

### Redshift
- ノードタイプ
	- DC2(dense compute,  高密度のコンピュートノード): SSD, 低ストレージ、高I/O (ノードあたり最大2.56TB, 7.5GB/s) 
	- DS2(dense storage, 高密度のストレージノード): HDD, 高ストレージ、低I/O  (ノードあたり最大16TB, 3.3GB/s)
- リサイズアプローチ
	- 弾性リサイズ(Elastic resize): ノードタイプ、ノード数、その両方を変更可能。ノード数のみであればクエリを一時停止、接続は可能な限り保持される。 10分から15分必要
	- クラシックリサイズ(Classic resize):弾性リサイズでできない構成(From/To シングルノードクラスターetc)への変更で使用。2時間から2日以上必要
- 分散スタイル
	- ファクトテーブルと 1 つのディメンションテーブルを共通の列に基づいて分散させる
	- フィルタリングされたデータセットのサイズに基づいて最大ディメンションを選択
	- フィルタリングされた結果セットでカーディナリティが高いDISTKEYを選択
	- DISTSTYLE ALL 分散を使用する
- キー設定
	- DISTSTYLE: 各テーブルのノードへのレコード分散方法
	- DISTキー: 分散の基準となるカラム
		- 結合したい２テーブルの外部キーの両方を指定
- データロード
	- COPYコマンド: S3バケット内のファイルから並列処理でロードできる
		- 複数の同時COPYコマンド実行では直列実行となり、パフォーマンスが下がる
			- 一時的なステージングテーブルを作成、ロードする
			- マニフェストファイルを使用したCOPYコマンドの実行
		- COPY処理の高速化
			- ファイル数がクラスタ内のスライス数の倍数になるようにファイルを分割する
			- 圧縮後ファイルサイズが1MB〜1GBで均等なサイズ
	- VACUUM処理: 削除フラグのついた領域の解放の実施
- データエクスポート
	- Glueを使用しS3へUNLOADが可能
- 機密データへのアクセス制御
	- カラムレベルアクセスコントロール
		- 列単位でGRANT, REVOKEステートメントが実行可能

### Redshift Spectrum
- S3をデータソースにRedshift同様の分析が可能

### EMR
- Hadoop
	- バージョン
		- レガシーと最新がある
			- レガシーから最新へ移行し、Javaプログラムを活用する場合、CUSTOM_JARステップを設定、Javaプログラムを再コンパイルする
- Spark
	- データロード, ダッシュボード更新時間の短縮
		- Spark DataFrames : データの列について整理
- Hive
	- メタデータ
		- デフォルトではマスターノードのMySQLに保管。クラスタ終了時、データ削除
		- 永続化する場合、外部メタストアを構築する必要がある(Glue Data Catalog, RDSやAurora)
- CloudFormationとの連携
	- ノードのインスタンス
		- CustomAmiIdプロパティにカスタムAMIを設定
- 構成オプション
	- インスタンスフリート
	- インスタンスグループ(オートスケーリング可)
- S3select
	- 使用可能
- データロード
	- D3DistCp: S3からEMRへデータをコピー
- 監視
	- IsIdleメトリック
		- yarnジョブの稼働をチェックしアイドル状態かを確認
	- 児童スケーリングによく使われるメトリクス
		- YarnMemoryAvailablePercentage: Yarnが使用できる残りメモリの割合
		- ContainerPendingRatio: 保留中コンテナと割り当て済みコンテナの比率
- 暗号化
	- クラスターのルートボリュームの暗号化
		- EBSはLinux Unified Key Setup(LUKS)で暗号化される 
	- 稼働中クラスタのルートボリューム暗号化
	  - セキュリティ設定でローカルディスクの暗号化を指定

### Glue	
- ETLスクリプト言語
	- Python
	- Scala
- テーブル/パーティションの更新
	- ETLスクリプトでenableUpdateCatalogを含む修正を行う
- クローラのパフォーマンス向上
	- 除外パターンの使用
	- 複数のクローラの実行
	- 小さいファイルを結合し大きいファイルの作成
- コストコントロール: 互いに独立している
	- クエリ単位の制限
	- ワークグループごとの制限

### LakeFormation
- データレイク構築サービス
- ストレージ層: S3
	- 新しいバケットを作成、データをインポートする
	- 既にS3を使用している場合、LakeFormationに既存のS3バケットを登録する
- データカタログ作成: Glueと統合
- セキュリティ
	- ポリシーを利用し、データアクセスを詳細制御可能
		- IAMユーザ、ロール、グループ、ADユーザ
		- カタログオブジェクト(テーブル、カラムなど)↔︎Notバケット、オブジェクト
- ブループリント: データの読み込みとカタログ化のため
	- RDSやEC2上のMySQL, PostgreSQL, SQL server, MariaDB, OracleDBからインポート
	- JDBCを使ってオンプレDBにも対応

### Athena
- データソース
	- 単一のS3バケット
- クエリ
	- ODBC接続可能
	- INSERT文を実行できるが、ソースデータを編集しない
- パフォーマンス改善
	- ファイルサイズの最適化
- 使用制限: 制限を超えた場合、後続のクエリはキャンセルされる
	- クエリごとの制限
	- ワークグループごとの制限

### ElasticSerach
- 可視化ツールとの連携
	- Kibanaが良い(QuickSightは次点)

### QuickSight
- データソース
	- Athenaテーブル
		- QuickSightへAthenaテーブルのS3ソースバケットへのアクセス権限を付与する
- AD連携
	- 要Enterprise版
		- AWS Directory Service, AD Connectorのサポート

### IoT Core
- データソース
	- デバイス(MQTTプロトコル)
- 分析
	- IoT Analytics
		- 時系列分析のための処理、保存、レポート作成を行う

### その他
- Apache Parquet: 圧縮された列指向型データストレージ形式。EMR(Spark)やAthenaで扱える。圧縮されているためコスト効率が良い。