#1 Azure Data Explorer を使ってみよう 【環境準備編】


## 【 Azure Data Explorer 分析・可視化編 その１ 】

### 概要
Azure Data Explorer を使ってみよう！　ということで、以下の３ステップで簡単に說明します
  1. [【環境準備編】](https://qiita.com/turupon/items/351d23d2a76fcf18dd86)：Azure Data Explorer 環境を作成し、ADLS Gen2 のデータを抽出します
  2. [【可視化編】](https://qiita.com/turupon/items/ca09d5780f3e6a07f6f8)：Data Explorer で クエリー処理 されたデータを可視化し、共有します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/0e8b619c-f7a9-229d-bef5-867a859be166.png)


今回は 【環境準備編】の說明となります

  - Azure DataLake Storage Gen2
    - データの確認
  - Azure Data Explorer
    - クラスターの作成
    - データベースの作成
    - インジェストの作成

### ローカル環境

- macOS Big Sur 11.3 
- python 3.8.3
- Azure CLI 2.28.0

### 前提条件

1. Azure環境がすでに用意されていること（テナント/サブスクリプション）
2. ローカル環境に「azure cli」がインストールされていること。
3. 「Azure Databricks を使ってみよう」の
[【環境準備編】](https://qiita.com/turupon/items/5a5782a62c24ccb3b3b5)[【抽出変換編】](https://qiita.com/turupon/items/21e2ca80ca497886d99d)[【格納編】](https://qiita.com/turupon/items/50f3e12222fa2f7d4144)の３つを完了していること

---

## 事前準備

### Azure CLI の機能拡張

```
## 最新の Data Explorer CLI（Kusto CLI）バージョンを使用する拡張機能をインストールします
$ az extension add -n kusto

## Azure CLI の確認
$ az version
{
  "azure-cli": "2.28.0",
  "azure-cli-core": "2.28.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {
    "azure-iot": "0.10.13",
    "databricks": "0.7.3",
    "kusto": "0.3.0",
    "stack-hci": "0.1.4"
  }
}
```

### Azure 環境の準備

```
### ローカル環境変数の定義
export RG_NAME_ETL=rg-ituru_bricks01
export RG_NAME=rg-ituru_explorer01
export SUBS_NAME=PSP2-01
export STORAGE_ACCOUNT=testaccount
export ETL_CONTAINER=etl-cost-data
export DE_CLUSTER_NAME=iturudecluster01
export DATABASE_NAME=database001

## 使用するテナントへのログイン
$ az login --tenant <tenant_id>

## 使用サブスクリプションの定義
$ az account set --subscription $SUBS_NAME

## 使用サブスクリプションの確認（IsDefault=True）
$ az account list --output table

## サブスクリプションのリソースIDを取得
$ SUBS_ID=$(az account show --query "id" --output tsv)

## Azure Data Explorer 用のリソースグループ作成
$ az group create --name $RG_NAME --location japaneast
```

### Gen2 の　Storage　Account の確認

```
## ストレージアカウントの確認（接続文字列の取得可否で判断）
$ CONNECT_STRING=$(az storage account show-connection-string -g $RG_NAME_ETL -n $STORAGE_ACCOUNT --subscription $SUBS_NAME --output tsv)
$ echo $CONNECT_STRING
DefaultEndpointsProtocol=https;AccountName=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;EndpointSuffix=core.windows.net

## コンテナの確認
$ az storage container list --account-name $STORAGE_ACCOUNT --output table
Name           Lease Status    Last Modified
-------------  --------------  -------------------------
cost-data                      2021-10-15T20:22:38+00:00
etl-cost-data                  2021-10-15T21:12:14+00:00

## 使用するコンテナのデータファイルの確認
## コンテナー内の BLOB を一覧表示する
$ az storage blob list --account-name $STORAGE_ACCOUNT --container-name $ETL_CONTAINER --output table

　　※【格納編】でサブスクリプション名で階層化したデータを使用します。
　　　　　　ParSubscription_02.json/Subscription=NSG-01
　　　　　　ParSubscription_02.json/Subscription=iapp-01
```

---

## 環境の構築

### Azure Data Explorer の作成

```
## Azure Data Explorer クラスターの作成（完了まで、十数分かかります）
az kusto cluster create --name $DE_CLUSTER_NAME --sku name="Dev(No SLA)_Standard_E2a_v4" tier="Basic" --type "SystemAssigned" --resource-group $RG_NAME --location japaneast

## 作成したクラスターの確認
az kusto cluster show --cluster-name $DE_CLUSTER_NAME --resource-group $RG_NAME

## Azure Data Explorer クラスターでデータベースの作成
az kusto database create --cluster-name $DE_CLUSTER_NAME --database-name $DATABASE_NAME --resource-group $RG_NAME --read-write-database soft-delete-period=P7D hot-cache-period=P5D location=japaneast

## 作成したデータベースの確認
az kusto database show --database-name $DATABASE_NAME --resource-group $RG_NAME --cluster-name $DE_CLUSTER_NAME
```

### Azure Data Explorer インジェストの作成

Azure Portal で上記で作成した Data Explorer サービスに移動し、「ステップ３：データ　インジェスト」の 「新しいデータの取り込み」ボタンを押し、Azure Data Explorer ポータル画面を表示させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/a434e899-932e-b04d-299f-1fb8c64547b4.png)

表示された「Ingest new data」の「Destination」タブ画面において、以下の値を設定し、画面下部の「Next Source」ボタンを押す

| 項目 | 値 |
| ---- | --- |
| Cluster | iturudecluster01.japaneast |
| Database | database01 |
| Table | Create new table - tbl001 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/f96e7ca3-b1d4-50f3-1497-a84548b5f87b.png)

次に表示された「Ingest new data」の「Source」タブ画面において、以下の値を設定し、画面下部の「Next Schema」ボタンを押す

| 項目 | 値 |
| ---- | --- |
| Source Type | ADLS Gen2 コンテナーから |
| インジェストの種類 | １回限りで継続的 |
| Select source | コンテナーの選択 |
| Storage subscription | PSP2-01 |
| Storage account | testaccount |
| Container | etl-cost-data |
| Table | tbl01 |
| Sample size | 1 - 5,000 |
| File Filters - Folder path | ParSubscription_02.json |
| File Filters - File extention | .json |

「ファイルを定義するスキーマ」の選択ではどちらでも同じなので上のものを選択しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/a84a4fc3-7ab5-d355-65bf-14b53bb29dce.png)

次に表示された「Ingest new data」の「Schema」タブ画面において、以下の値を設定し、画面下部の「Next Summary」ボタンを押す

| 項目 | 値 |
| ---- | --- |
| Compression Type | Uncompressed |
| Data format | JSON |
| Nexted levels | 1 |
| Mapping | tbl001_mapping |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/371a6e2b-b234-8cc2-9cfb-0e99bd300755.png)

最後に「データ インジェスト完了」画面が表されます。問題がなければ画面下部の「Close」ボタンを押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/497c00e6-b9d6-9d68-f5f8-407cd899c96d.png)

Azure Portal の 「Azure Data Explorer クラスター」画面の左側から「クエリ」を選択し、「.show databases」コマンドを「クエリ ウィンドウ」に入力後、 [実行] を選択します。結果セットには、データベースである 「database01」 が表示されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/6c3454ec-3e10-a30f-1d97-e7d39af3b834.png)

---

### Azure Data Explorer データベースのクリーンアップ

```
## データベース一覧の表示
$ az kusto database list --cluster-name $DE_CLUSTER_NAME --resource-group $RG_NAME -o table
HotCachePeriod    IsFollowed    Kind       Location    Name                         ProvisioningState    ResourceGroup        SoftDeletePeriod
----------------  ------------  ---------  ----------  ---------------------------  -------------------  -------------------  ------------------
5 days, 0:00:00   False         ReadWrite  Japan East  iturudecluster01/database01  Succeeded            rg-ituru_explorer01  7 days, 0:00:00

## データベースをクリーンアップするには、データベースを削除します
$ az kusto database delete --cluster-name $DE_CLUSTER_NAME --resource-group $RG_NAME --name $DATABASE_NAME
```

### Azure Data Explorer テーブルのクリーンアップ

```
## テーブルクリーンアップするには、テーブルを削除します
## 「クエリ ウィンドウ」 から以下を実行します
.drop table <table_name>
```

---

### まとめ

Azure CLI と Azure Data Explorer Portal を使用した環境構築でした、、、