概要
- Microsoft LearnでAzureの基本をマスターする:データの基礎を自己学習する
- このコースは以下の4つのラーニングパスからなっている。今回は2ポチ目までをメモ
- コアデータの概念を探る
- Azureでリレーショナルデータを探索する
- Azureの非リレーショナルデータを探索する
- Azure で最新のデータウェアハウス分析を調べる
コアデータの概念を探る
コアデータの概念を調べる
データ形式
- 構造化データ:表など
- 半構造化データ:JSON
- 非構造化データ:画像、ビデオ
ファイル形式
Avro
行ベース。Apache によって作成された。各レコードには、レコード内のデータの構造を説明するヘッダーが含まれる。ヘッダーは JSON として格納。データはバイナリ情報として格納。アプリケーションでは、ヘッダー内の情報を使用してバイナリ データを解析し、格納されているフィールドを抽出する。データを圧縮し、必要なストレージとネットワーク帯域幅を最小限に抑えることができる。
ORC (Optimized Row Columnar)
列ベース。HortonWorks によって開発。Apache Hive での読み取り、書き込み操作を最適化する。ORC ファイルには、データの "ストライプ" が含まれる。各ストライプには、列または列のセットのデータが保持される。
Parquet
列ベース。Cloudera と Twitter によって作成。 Parquet ファイルには、行グループが含まれる。各列のデータは、同じ行グループにまとめて格納される。
データベースの詳細
リレーショナル データベース
非リレーショナル データベース
NoSQLデータベースとも呼ばれたりする。
キーバリューデータベース
ドキュメントデータベース:値がドキュメントであるキーバリューデータベース
列ファミリ データベース:列が、列ファミリと呼ばれるグループになってる。
グラフ データベース:ノードとしてのエンティティと、その関係を定義するリンクが格納される
トランザクション データ処理
- トランザクションデータの例:銀行口座間のお金の移動
- 処理中のデータに、即時アクセスできることが必要
- オンライン トランザクション処理 (OLTP) と呼ばれる
- ACID セマンティクス(トランザクションの4つの基本的特性)のサポート要
原子性 (Atomicity)
各トランザクションは 1 つの単位として扱われ、完全に成功するか、完全に失敗しなければならない。 たとえば、1 つの銀行口座の資金を引き落とし、別の銀行口座に同額を入金するトランザクションでは、両方のアクションが完了する必要がある。 いずれかの操作を完了できない場合、もう一方のアクションは失敗しなければならない。
一貫性 (Consistency)
トランザクションでは、1 つの有効な状態から別のそれに移る場合のみ、データベースのデータを取得することができます。 上記の借方と貸方の例を続けると、トランザクションの完了状態に、あるアカウントからもう一方のアカウントへの資金の転送が反映されている必要があります。
分離性 (Isolation)
同時実行トランザクションが相互に干渉することはなく、一貫性のあるデータベースの状態になる必要があります。 たとえば、あるアカウントから別のアカウントに資金を転送するトランザクションが処理中である場合、これらのアカウントの残高を確認する別のトランザクションでは、一貫性のある結果が返される必要があります。残高確認のトランザクションでは、送金 "前" の残高を反映する 1 つのアカウントの値や、送金 "後" の残高を反映する他のアカウントの値を取得することはできません。
持続性 (Durability)
トランザクションがコミットされると、トランザクションはコミットされたままになります。 アカウント送金トランザクションが完了すると、変更されたアカウントの残高が保持されます。これにより、データベース システムをオフにした場合でも、コミットされたトランザクションは再びオンになったときに反映されるようになります。
分析データ処理
- 一般的なアーキテクチャ
データレイク/OLTPデータベース → ETL → データウェアハウス → オンライン分析処理(OLAP)モデル → クエリ実行
- データレイク:構造化データだけでなく、非構造化データも保管する。データは加工されてない。 ‐ データウェアハウス:読み取り用に最適化された構造化データを保管する
- OLAP モデル:分析ワークロード用のデータ ストレージ。ドリルアップ、ドリルダウンできる。
データ ロールとサービスを調べる
データの世界における仕事上の役割について調べる
データベース管理者
- ユーザーにアクセス許可を割り当て
- データのバックアップ/リストア
データ エンジニア
- データの統合
- データ クリーニング
- データ ガバナンス ルールの策定
- データを転送および変換するのに必要なパイプラインの実装
データ アナリスト
- データを調査および分析して視覚化やグラフを作成
- 組織が情報に基づいた意思決定を行えるようにする
その他
- データ サイエンティスト
- データ アーキテクト
- アプリケーション開発者
- ソフトウェア エンジニア
データ サービスを特定する
Azure SQL
- Azure SQL Database: フルマネージドのPaaS型DB
- Azure SQL Managed Instance: SQLサーバをホストしたインスタンス。Azure SQL DB よりも柔軟な構成が可能
- Azure SQL VM: SQLサーバがインストールされている仮想マシン。最も柔軟な構成が可能
Azure Database
オープンソースのリレーショナル データベース用。
Azure Cosmos DB
- 非リレーショナル (NoSQL) データベース
- JSON ドキュメント、キーと値のペア、列ファミリ、およびグラフとしてデータを格納
Azure Storage
複数のデータを格納できる。データレイクをホストできる。
- BLOB コンテナー: バイナリファイル用のスケーラブルでコスト効率の高いストレージ
- ファイル共有: 企業ネットワークにあるようなネットワークファイル共有
- テーブル: データ値の読み取りと書き込みを迅速に行う必要があるアプリケーションのキー値ストレージ
Azure Data Factory
- データを転送および変換するデータ パイプライン
ETLソリューションを構築するために使用される
ETLはExtract Transform Loadの頭文字
Azure Synapse Analytics
統合されたデータ分析ソリューション。次の分析機能に対して単一のサービス インターフェイスを提供
- パイプライン
- SQL
- Apache Spark
- Azure Synapse Data Explorer: Kusto クエリ言語 (KQL) を使用して、ログおよびテレメトリ データにリアルタイムでクエリを実行する
Azure Databricks
- 一般的な DatabricksプラットフォームをAzure に統合したもの
- Apache Spark データ処理プラットフォームと SQL データベース セマンティクスおよび統合管理インターフェイスを組み合わせて大規模なデータ分析を実現
Azure HDInsight
Apacheのビッグ データ処理テクノロジをホストするクラスターを提供
‐ Apache Spark - Apache Hadoop - Apache HBase - Apache Kafka - Apache Storm
Azure Stream Analytics
- リアルタイムのストリーム処理エンジン
- データストリームを取り込み、クエリでデータ抽出。クエリ結果を出力に書き込む
- リアルタイムの視覚化のためにストリーミング データを取り込む
Azure Data Explorer
- ログおよびテレメトリ データのクエリを提供するスタンドアロン サービス
Azure Purview
- 企業規模のデータ ガバナンス
- データマップを作成し、複数のデータ ソースとシステム間でデータ系列を追跡
- データの整合性を確保
Microsoft Power BI
- 分析データ モデリングおよびレポート用のプラットフォーム ‐ 対話型でデータの視覚化
- Power BI サービスの Web ベースのレポートとアプリ、および Power BI モバイル アプリを使用して公開・配信
Microsoft Azureデータの基礎: Azure でリレーショナル データを探索する
基本的なリレーショナル データの概念を調べる
リレーショナル データを理解する
エンティティ=テーブル
インスタンス=テーブル内の行
各列には特定のデータ型で格納される。例)Order テーブルの Quantity 列は整数の数値に制限される
正規化について理解する
正規化はデータベースの専門家によって使用される用語
データの重複を最小限に抑え、データの整合性を強制適用するスキーマ設計プロセスを表す
以下の規則により、正規化できる
- 各 "エンティティ" を独自のテーブルに分離します。
- 個別の "属性" を独自の列に分離します。
- "主キー" を使用して各エンティティ インスタンス (行) を一意に識別します。
- "外部キー" 列を使用して関連エンティティをリンクします。
SQL を探索する
SQL は、"構造化照会言語" を表す
リレーショナル データベースとの通信に使用される
SQL を使用する一般的なリレーショナル データベース管理システムには、Microsoft SQL Server、MySQL、PostgreSQL、MariaDB、Oracle などがある
一般的な SQL 言語
Transact-SQL (T-SQL)。 このバージョンの SQL は、Microsoft SQL Server と Azure SQL サービスによって使用されます。
pgSQL。 この言語には、PostgreSQL で実装されている拡張機能が含まれています。
SQL ステートメントの種類
DDL ステートメント
データベース内のテーブルやその他のオブジェクトを作成、変更、および削除
- CREATE
- ALTER
- DROP
- RENAME
CREATE TABLE Product ( ID INT PRIMARY KEY, Name VARCHAR(20) NOT NULL, Price DECIMAL NULL );
DCL ステートメント
ユーザーまたはグループに対する権限を許可、拒否、または取り消して、データベース内のオブジェクトへのアクセスを管理
- GRANT
- DENY
- REVOKE: 以前に許可されたアクセス許可を削除
GRANT SELECT, INSERT, UPDATE ON Product TO user1;
DML ステートメント
テーブル内の行を操作します。 データの取得 (クエリ)、新しい行の挿入、または既存の行の変更、不要になった行の削除。
- SELECT
- INSERT
- UPDATE
- DELETE
SELECT FirstName, LastName, Address, City FROM Customer WHERE City = 'Seattle' ORDER BY LastName;
WHERE: 条件と一致する行だけが選択、更新、または削除される ‐ ORDER BY: 指定した列でデータが並べ替え
JOIN: 1 つのテーブル内の行を他のテーブル内の行と接続
SELECT o.OrderNo, o.OrderDate, c.Address, c.City FROM Order AS o JOIN Customer AS c ON o.Customer = c.ID
- SET: 特定の列の値を更新
UPDATE Customer SET Address = '123 High St.' WHERE ID = 1;
DELETE FROM Product WHERE ID = 162;
- INTO: テーブルと列を指定
- VALUES: INTO句で指定した列に格納する値のリストを指定
INSERT INTO Product(ID, Name, Price) VALUES (99, 'Drill', 4.99);
データベース オブジェクトについて説明する
ビュー
- SELECT クエリの結果に基づく仮想テーブル
ビューを作成する。
CREATE VIEW Deliveries AS SELECT o.OrderNo, o.OrderDate, c.FirstName, c.LastName, c.Address, c.City FROM Order AS o JOIN Customer AS c ON o.CustomerID = c.ID;
作成したビューに対し、クエリを実行。
SELECT OrderNo, OrderDate, LastName, Address FROM Deliveries WHERE City = 'Seattle';
ストアド プロシージャ
データベースに対する連続した複数の処理を一つのプログラムにまとめ、データと共に保存できるようにしたもの
外部からクエリを実行するのと同じ手順で実行できる。
ストアド プロシージャを作成する。
CREATE PROCEDURE RenameProduct @ProductID INT, @NewName VARCHAR(20) AS UPDATE Product SET Name = @NewName WHERE ID = @ProductID;
作成したストアドプロシージャを実行。
EXEC RenameProduct 201, 'Spanner';
インデックス
インデックス無:集合住宅を歩き回り、各戸の表札を見て配達先かどうか確かめる
インデックス有:住民の情報が書かれた見取り図で配達先を確認して向かう
インデックスは以下のような列に設定すると、効果を得やすい
- SQLの検索条件で頻出する列や、結合条件に指定されている列
- テーブル内の全データの量に対して、取得対象のデータが少ない列
- Bツリーインデックスの場合はカーディナリティが高い列(格納されている値の種類が多い列)、ビットマップインデックスの場合はカーディナリティが低い列
CREATE INDEX idx_ProductName ON Product(Name);