DP-900 学習メモ

# はじめに
DP-900取得に向けて学習した内容のメモです。
あくまで、自身が不明な点を調べたメモですので、試験範囲を網羅的に記事にしたものではありません。あしからず。

## 行指向データベース
- MySQL,PostgreSQL,SQL Serverが行指向にあたる
- それぞれの行をひとかたまりのデータとして扱う
- オンライントランザクション処理が得意

## 列指向データベース
- Azure Cosmos DB for Apache Cassandra
- データ分析のために最適化されたデータベース
- 行指向が行をひとかたまりとして扱うのに対し、列指向は列単位で処理する為、特定の属性の情報を取り出す処理が得意
- 例えば、テーブルから商品名と値段だけを抜き出す処理とか
- 大量のデータの読み込み効率がいい

## Azure Database for PostgreSQL
- リレーショナルデータベース
- 行指向データベース

## Azure Cosmos DB
- データベース、コンテナレベルでスループットの設定が可能
- **複数リージョン**での読み取り/書き込みが可能なマルチマスター構成がとれる

## Azure Cosmos DB for Apache Cassandra
- 列指向データベース
- 大量のデータ処理に特化しているためWebサービス、IoTなどに使用される
- **Cassandra Query Language**(CQL)を使用してデータのクエリを行う

## Azure Cosmos DB API for MongoDB
- NoSQLデータべース
- Cosmos DBのデータモデルのうち**ドキュメント型**のAPI
- Cosmos DBの中でGoやRustなどのSDKを使用できる

## Azure Cosmos DB for Apache Gremlin
- グラフデータベース
- Cosmos DBのデータモデルのうち**グラフ型**のAPI

## リレーショナルデータベース
- SQLでデータの追加、削除、更新、検索を行う
- データは行と列の**テーブル形式**で保存

## 非リレーショナルデータベース
- Cosmos DB
- 表や行でなく、**JSON形式**でデータを保存
- NoSQLデータベース
- リレーショナルデータベースと比べ、処理が速い
- 大量のデータを高速処理するのに向いている
- SQLを使用しないので、複雑な検索はできない
- 正確性を犠牲に高速化しているので、データの正確さが求められるユースケースでは不向き

## CSV
```
ID, Name, Country
111, Mike, USA
222, Nancy, Canada
```
- データを(,)で区切るだけ

## XML
```
<?xml version='1.0' encoding='utf-8'>
<root>
    <employee>
        <employ>
            <ID>1</ID>
            <Name>Hana</Name>
            <Country>Japan</Country>         
        </employ>
        <employ>
            <ID>2</ID>
            <Name>Taro</Name>
            <Country>Japan</Country>
        </employ>
    </employee>    
</root>
```
- タグで囲むhtmlに似た形式

## YAML
```yml
-
  ID: 1
  Name: Hana
  Country: Japan # (岩手県出身)
-
  ID: 2
  Name: Taro # 弟は二郎
  Country: Japan
```
- コメントアウトが出来ることが特徴

## JSON
```
[
    {'ID': '1', 'Name': 'Hana', 'Country': 'Japan'},
    {'ID': '2', 'Name': 'Taro', 'Country': 'Japan'}
]
```
- []や{}で囲み、項目名と値を(:)で区切ってペアとして扱う
- 複数のデータになるときは(,)で区切る


## データウェアハウス
- 複雑なクエリと分析に特化
- 過去データ(販売データや顧客データなど)を利用して分析処理を行うとかに使う
- **非構造化データの処理には向いていない**

## Azure Data Lake Storage Gen2
- **ビッグデータ分析に特化**したストレージサービス
- **構造化、非構造化どちらも保存できる**
- 階層型名前空間
- Synapse Analyticsを使用した分析の前に生データを保存するのに利用される
- ファイル/フォルダレベルでのRBAC制御とACLをサポート

## Azure Databricks
- 大量のデータを高速に分析できるサービス
- 高速な分散処理を実現するApache Sparkが採用されている
- **構造化データ、非構造化データどちらにも対応**
- 構造化データを扱うデータウェアハウスと非構造化データをコスパ良く扱えるデータレイクのいいとこどり
- 機械学習モデルの開発も実施できる
- ETL処理できる

## Azure HDInsight
- ビックデータを処理する分散データ処理基盤システムとして代表的なHadoopをWindowsで利用できるように改修し、クラウドサービス化したもの
- 分散データ処理基盤は(結構ざっくり言うと)ビックデータ分析に必要な複数のサーバー群を1つのコンピュータとして扱えるようにしたもの
- Apache Sparkの設定ができる

## Azure Synapse Analytics
- 大量のデータを高速で処理できるデータ分析プラットフォーム
- Azure Databricks同様、ETL処理ができる
- **構造化データ、非構造化データどちらにも対応**できるデータレイク的側面もある

## ACID特性
### 原子性
- トランザクションの処理が「全部実行される」か「1つも実行されない」のどちらかの状態になること
- トランザクション内の処理を1セットとし、**途中で失敗すれば、元に戻す**。
- 銀行でAさんからBさんに振り込む際、振り込み途中で一部の送金処理は完了していても、入金処理が失敗した場合、振り込み自体していない状態に戻す

### 一貫性
- トランザクションの前後でデータの整合性が保たれ、**矛盾のない状態**になること
- ある一定のルール、制約に沿ってトランザクションの実行が行われること
- 銀行口座に100円しかないのに1万円の送金はできない

### 独立性
- 複数処理が同時に実行されてもお互いが干渉しないこと
- 同時処理時にはテーブルロックで他の処理を待機させ、**他の処理に影響を与えない**ようにする

### 永続性
- 一度確定したデータは**障害が発生しても永続的**に変わらず保持される

## 超並列処理(MPP)
- 複数のプロセッサが並列に動作して、大量のデータを処理する
- **Azure Synapse Analytics**が採用している仕組み

## Microsoft SQL Server Management Studio(SSMS)
- SQL Server、SQL DatabaseのSQL インフラストラクチャを管理するための統合環境
- **Windowsのみ**で使用可能
- SQL Server、SQL Databaseの設定変更ができる
- Azure Synapse Analyticsへのクエリ実行ができる
- PolyBaseなどの管理機能を持つ

## Azure Data Studio
- マルチプラットフォームのため、**Windows/Linux/Mac**で動作するデータ分析ツール
- オンプレ、クラウド問わず、どこにあるデータでも接続、管理できる
- SSMSより機能は劣るが、軽量なため動作が速い
- Azure上でデータベースのバックアップおよび復元ができる

## Microsoft Fabric
- 企業が必要とするデータや Analytics 関連の様々なツールを統合した、ワンストップのオールインワン分析ソリューション(分析ツールのハッピーセット的な)
- Power BI、Azure Synapse Analytics、Azure Data Factoryなどが含まれる

## Power BI
- データの収集、加工、分析、分析結果の表示などの機能を備えたツール

### Power BI デスクトップ
- データを視覚化する高度なクエリ、モデル、レポートを作成できる
- ローカル コンピューターに無料でダウンロードしてインストールするアプリケーション

### Power BI サービス
- クラウドベースのサービスまたはサービスとしてのソフトウェア (SaaS) 
- Power BI デスクトップ同様にレポートの作成、他ユーザへの共有が可能なうえ、ダッシュボードの作成、アプリの作成と共有が可能

### Power Apps
- 高度な知識やノウハウがなくてもアプリを作成できるローコード開発ツール

### Power BI Report Builder
- Power BI サービスに発行できる "ページ分割されたレポート" を作成するためのツール

## オンライントランザクション処理
- データは正規化されている
- 小規模で高速なデータ処理に特化

## オンライン分析処理
- 分析のために複雑なクエリに特化している
- 多次元的なデータを扱う為、正規化されていない

## クラスター化インデックス
- キー値に基づいてデータ行を並び替える
- 非クラスター化インデックスより検索が高速