Databricksにおける利用課金ログデータの分析

[Analyze billable usage log data \| Databricks on AWS](https://docs.databricks.com/administration-guide/account-settings/usage-analysis.html) [2022/9/15時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

本書では、Databricksアカウントの利用データをどのように読み込み、分析するのかを説明します。

[アカウントコンソールで利用課金データを直接参照](https://docs.databricks.com/administration-guide/account-settings-e2/usage.html)することができます。

複数の方法で利用課金ログをダウンロードしたり、デリバリーをスケジュールすることができます。

- [アカウントコンソールから利用課金データを直接ダウンロード](https://docs.databricks.com/administration-guide/account-settings-e2/usage.html)
- [Account APIによる利用課金データを直接ダウンロード](https://docs.databricks.com/administration-guide/account-settings/billable-usage-download-api.html)
- [Accaunt APIで設定されたS3バケットへの利用課金データのデリバリー](https://docs.databricks.com/administration-guide/account-settings/billable-usage-delivery.html)

いずれの場合においても、[CSVファイルのスキーマ](#csvファイルのスキーマ)は同じものとなります。

[これらのログをパース、解析する](#databricksで利用ログを分析する)ためにDatabricksを使うことができます。

# CSVファイルのスキーマ

| カラム | 型 | 説明 | サンプル |
|:--|:--|:--|:--|
| workspaceId  | string  | ワークスペースID  | `1234567890123456`  |
| timestamp  | datetime  |  当該の利用における最終の時刻 | `2019-02-22T09:59:59Z`  |
| clusterId  |  string |  クラスターID |  `0405-020048-brawl507` |
| clusterName  | string  | ユーザーが指定したクラスター名  | `Shared Autoscaling`  |
| clusterNodeType  |  string | クラスターのインスタンスタイプ  | `m4.16xlarge`  |
| clusterOwnerUserId  | string  | クラスター作成者のID  | `12345678901234`  |
| clusterCustomTags  | string("がエスケープされたjson)  | この時間でクラスターに関連づけられたカスタムタグ  | `"{""dept"":""mktg"",""op_phase"":""dev""}"`  |
| sku  | string  | 課金のSKU。値の一覧については[課金SKUテーブル](#課金のsku)をご覧ください。  | `STANDARD_ALL_PURPOSE_COMPUTE`  |
| dbus  |  double | この時間でユーザーによって使用されたDBUの数  |  `1.2345` |
| machineHours  | double  | このクラスターのすべてのコンテナで使用されたマシンアワーの総数  | `12.345`  |
| clusterOwnerUserName  | string  | クラスター作成者のユーザー名(メールアドレス)  | `user@yourcompany.com`  |
| tags  | ("がエスケープされたjson)  | この時間でクラスターに関連づけられたデフォルト・カスタムクラスタータグ、デフォルト・カスタムインスタンスプールタグ。[クラスタータグ](https://qiita.com/taka_yayoi/items/8d951b660cd87c6c5f18#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%BF%E3%82%B0)と[プールタグ](https://docs.databricks.com/clusters/instance-pools/configure.html#instance-pool-tags)をご覧ください。これは、`clusterCustomTags`のスーパーセットです。  | `"{""dept"":""mktg"",""op_phase"":""dev"", ""Vendor"":""Databricks"", ""ClusterId"":""0405-020048-brawl507"", ""Creator"":""user@yourcompany.com""}"`  |

## 課金のSKU

- AWS_ENHANCED_SECURITY_AND_COMPLIANCE
- ENTERPRISE_ALL_PURPOSE_COMPUTE
- ENTERPRISE_ALL_PURPOSE_COMPUTE_(DLT)
- ENTERPRISE_ALL_PURPOSE_COMPUTE_(PHOTON)
- ENTERPRISE_DLT_ADVANCED_COMPUTE
- ENTERPRISE_DLT_ADVANCED_COMPUTE_(PHOTON)
- ENTERPRISE_DLT_CORE_COMPUTE
- ENTERPRISE_DLT_CORE_COMPUTE_(PHOTON)
- ENTERPRISE_DLT_PRO_COMPUTE
- ENTERPRISE_DLT_PRO_COMPUTE_(PHOTON)
- ENTERPRISE_JOBS_COMPUTE
- ENTERPRISE_JOBS_COMPUTE_(PHOTON)
- ENTERPRISE_JOBS_LIGHT_COMPUTE
- ENTERPRISE_SERVERLESS_SQL_COMPUTE
- ENTERPRISE_SERVERLESS_SQL_COMPUTE_AP_SYDNEY
- ENTERPRISE_SERVERLESS_SQL_COMPUTE_EUROPE_FRANKFURT
- ENTERPRISE_SERVERLESS_SQL_COMPUTE_EUROPE_IRELAND
- ENTERPRISE_SERVERLESS_SQL_COMPUTE_US_EAST_N_VIRGINIA
- ENTERPRISE_SERVERLESS_SQL_COMPUTE_US_EAST_OHIO
- ENTERPRISE_SERVERLESS_SQL_COMPUTE_US_WEST_OREGON
- ENTERPRISE_SQL_COMPUTE
- PREMIUM_ALL_PURPOSE_COMPUTE
- PREMIUM_ALL_PURPOSE_COMPUTE_(DLT)
- PREMIUM_ALL_PURPOSE_COMPUTE_(PHOTON)
- PREMIUM_DLT_ADVANCED_COMPUTE
- PREMIUM_DLT_ADVANCED_COMPUTE_(PHOTON)
- PREMIUM_DLT_CORE_COMPUTE
- PREMIUM_DLT_CORE_COMPUTE_(PHOTON)
- PREMIUM_DLT_PRO_COMPUTE
- PREMIUM_DLT_PRO_COMPUTE_(PHOTON)
- PREMIUM_JOBS_COMPUTE
- PREMIUM_JOBS_COMPUTE_(PHOTON)
- PREMIUM_JOBS_LIGHT_COMPUTE
- PREMIUM_SERVERLESS_SQL_COMPUTE
- PREMIUM_SERVERLESS_SQL_COMPUTE_AP_SYDNEY
- PREMIUM_SERVERLESS_SQL_COMPUTE_EUROPE_FRANKFURT
- PREMIUM_SERVERLESS_SQL_COMPUTE_EUROPE_IRELAND
- PREMIUM_SERVERLESS_SQL_COMPUTE_US_EAST_OHIO
- PREMIUM_SERVERLESS_SQL_COMPUTE_US_EAST_N_VIRGINIA
- PREMIUM_SERVERLESS_SQL_COMPUTE_US_WEST_OREGON
- PREMIUM_SQL_COMPUTE
- STANDARD_ALL_PURPOSE_COMPUTE
- STANDARD_ALL_PURPOSE_COMPUTE_(DLT)
- STANDARD_ALL_PURPOSE_COMPUTE_(PHOTON)
- STANDARD_DLT_ADVANCED_COMPUTE
- STANDARD_DLT_ADVANCED_COMPUTE_(PHOTON)
- STANDARD_DLT_CORE_COMPUTE
- STANDARD_DLT_CORE_COMPUTE_(PHOTON)
- STANDARD_DLT_PRO_COMPUTE
- STANDARD_DLT_PRO_COMPUTE_(PHOTON)
- STANDARD_JOBS_COMPUTE
- STANDARD_JOBS_COMPUTE_(PHOTON)
- STANDARD_JOBS_LIGHT_COMPUTE

2020/3以前の利用課金ログでは、以下のSKUを使用しています。

- LIGHT_AUTOMATED_NON_OPSEC
- LIGHT_AUTOMATED_OPSEC
- STANDARD_AUTOMATED_NON_OPSEC
- STANDARD_AUTOMATED_OPSEC
- STANDARD_INTERACTIVE_NON_OPSEC
- STANDARD_INTERACTIVE_OPSEC

# Databricksで利用ログを分析する

このセクションでは、分析のためにどのように利用課金CSVファイルのデータをDatabricksで利用できる様にするのかを説明します。利用量テーブルの作成の選択肢を説明し、利用分析ダッシュボードの実行に使用できるサンプルノートブックを提供しています。

CSVファイルは商用のスプレッドシートアプリケーションの標準ではありますが、Apache Sparkで読み込むためには修正が必要となります。Databricksで利用量テーブルを作成する際には、`option("escape", "\"")`を使用する必要があります。

合計DBUは`dbus`カラムの合計となります。

## テーブル作成UIを用いてログをインポートする

分析するためにCSVファイルをDatabricksにインポートするには、[Databricks SQLのデータアップロード、テーブル作成](https://qiita.com/taka_yayoi/items/89eda6708b7c2e77d651)を使用することができます。

## Sparkデータフレームの作成

また、CSVファイルへのパスから利用量テーブルを作成するために以下のコードを使用することができます。

```py:Python
df = (spark.
      read.
      option("header", "true").
      option("inferSchema", "true").
      option("escape", "\"").
      csv("/FileStore/tables/usage_data.csv"))

df.createOrReplaceTempView("usage")
```

例えば、[ログデリバリーを使用](https://docs.databricks.com/administration-guide/account-settings/billable-usage-delivery.html)している際など、ファイルがS3バケットに格納されている場合には、コードは以下の様になります。ファイルパスやディレクトリを指定することができます。ディレクトリを指定すると、すべてのファイルがインポートされます。以下の例ではファイルを指定しています。

```py:Python
df = (spark.
      read.
      option("header", "true").
      option("inferSchema", "true").
      option("escape", "\"").
      load("s3://<bucketname>/<pathprefix>/billable-usage/csv/workspaceId=<workspace-id>-usageMonth=<month>.csv"))

df.createOrReplaceTempView("usage")
```

以下の例では、利用課金ファイルを格納するディレクトリをインポートしています。

```py:Python
df = (spark.
      read.
      option("header", "true").
      option("inferSchema", "true").
      option("escape", "\"").
      load("s3://<bucketname>/<pathprefix>/billable-usage/csv/"))

df.createOrReplaceTempView("usage")
```

## Deltaテーブルの作成

上の例のデータフレーム(`df`)からDeltaテーブルを作成するには以下のコードを使用します。

```py:Python
(df.write
    .format("delta")
    .mode("overwrite")
    .saveAsTable("database_name.table_name")
)
```

:::note alert
**警告！**
新規CSVを追加、置換した際には、保存したDeltaテーブルは自動で*更新されません*。最新のデータが必要であれば、Deltaテーブルを使用する前にこれらのコマンドを再実行してください。
:::

## 使用量分析ダッシュボードのノートブック

利用課金データのデリバリーを使用している場合、CSVファイルが格納されるS3バケットのへのパスを指定し、ウィジェットにレポートのパラメーターを入力することで、利用量分析ダッシュボードを実行することができます。

ノートブックをDatabricksワークスペースにインポートした際、最初のノートブックセルの上部にレポートパラメーターを入力するウィジェットが表示されます。ウィジェットはノートブックのブラウザオンリーのビューでは表示されません。以下のウィジェットのイメージを示します。
![](https://docs.databricks.com/_images/usage-dashboard-widget.png)

### 使用量分析ダッシュボードノートブック

https://docs.databricks.com/_static/notebooks/usage-delivery-analysis-dashboard.html

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)