背景・目的
Databricksのシステムテーブルの情報に触れる機会があったので、整理しました。
まとめ
システムテーブルは、下記の特徴があります。
- アカウントの運用データが入っています。
- 2023年12月15日現在で、パブリックプレビューです。
- Unity Catalogにより管理されます。
- アカウント管理者がREST APIで有効にします。
- パブリックプレビュー中には、リアルタイム監視はサポートされていない。
概要
システムテーブルによる使用状況の監視を基に整理します。
What are system tables?
システム テーブルは、Databricks でホストされるアカウントの運用データの分析ストアです。 システムテーブルは、アカウント全体の履歴可観測性に使用できます。
アカウントの運用データが入っている。
Which system tables are available?
下記のテーブルが、利用できます。詳細は、ドキュメントをご確認ください。
スキーマ | テーブル名 | 概要 |
---|---|---|
access | Audit logs | 監査ログ |
Table lineage | Unity Catalog上のテーブル、パスの読み書きイベントが記録される | |
Column lineage | Unity Catalog上の列の読み下記のイベントが記録される | |
billing | Billable usage | 課金利用の記録 |
Pricing | SKU価格の履歴 | |
compute | Clusters | クラスタの時間の経過に伴うクラスター構成の履歴 |
Node types | 現在使用可能なノードタイプ、基本的な情報 | |
marketplace | Marketplace listing access | リクエストデータのConsumer情報など |
storage | Predictive optimization | 予測最適化機能の操作履歴 |
Enable system tables
システムテーブルは Unity Catalogによって管理されるため、システムテーブルを有効にしてアクセスするには、アカウントに少なくとも1つの Unity Catalog対応ワークスペースが必要です。 システムテーブルには、アカウント内のすべてのワークスペースのデータが含まれますが、Unity カタログ対応のワークスペースからのみアクセスできます。
- Unity Catalogにより管理される
システム テーブルは、アカウント管理者が有効にする必要があります。 Unity Catalog REST API を使用してシステム テーブルを有効にすることができます。
- アカウント管理者がREST APIで有効にする
Limitations
現在、システム テーブルのパブリック プレビューには次の制限があります。
リアルタイム監視はサポートされていません。 データは終日更新されます。 最近のイベントのログが表示されない場合は、後でもう一度確認してください。
- パブリックプレビュー中には、リアルタイム監視はサポートされていない。
実践
事前確認
有効化
-
REST APIを実行するためには、管理者アカウントのAccess Tokenを作成しておきます。
-
下記のコマンドで実行前の状態を確認してみます。
- PAT Token:自身のAccess Token
- workspace:対象のワークスペース
- metastore-id:メタストアID(s3パスに書いてあります。)
curl -v -X GET -H "Authorization: Bearer <PAT Token>" "https://<workspace>.cloud.databricks.com/api/2.0/unity-catalog/metastores/<metastore-id>/systemschemas" | jq
-
下記の結果が返されました。information_schemaのみが、ENABLE_COMPLETEDとなっていました。ドキュメントを読むと、ENABLE_COMPLETEDがカタログエクスプローラーに表示されるようです。また、AVAILABLEが、使用可能だが、有効にはなっていないようです。
* Connection #0 to host XXXX left intact { "schemas": [ { "schema": "storage", "state": "AVAILABLE" }, { "schema": "access", "state": "AVAILABLE" }, { "schema": "billing", "state": "AVAILABLE" }, { "schema": "compute", "state": "AVAILABLE" }, { "schema": "marketplace", "state": "AVAILABLE" }, { "schema": "operational_data", "state": "UNAVAILABLE" }, { "schema": "information_schema", "state": "ENABLE_COMPLETED" } ] } $
-
下記のコマンドで有効化します。まずは、accessスキーマを指定します。HTTPステータス200を返しました。
curl -v -X PUT -H "Authorization: Bearer <PAT Token>" "https://<workspace.databricks.com/api/2.0/unity-catalog/metastores/<metastore-id>/systemschemas/access"
-
再び確認してみます。accessスキーマが有効になりました。
{ "schemas": [ { "schema": "storage", "state": "AVAILABLE" }, { "schema": "access", "state": "ENABLE_COMPLETED" }, { "schema": "billing", "state": "AVAILABLE" }, { "schema": "compute", "state": "AVAILABLE" }, { "schema": "marketplace", "state": "AVAILABLE" }, { "schema": "operational_data", "state": "UNAVAILABLE" }, { "schema": "information_schema", "state": "ENABLE_COMPLETED" } ] }
-
残りも有効化します。operational_dataは、UNAVAILABLEですが、一応試してみます。
for schema in storage billing compute marketplace operational_data;do curl -v -X PUT -H "Authorization: Bearer $TOKEN" "https://XXXXXX.cloud.databricks.com/api/2.0/unity-catalog/metastores/XXXXXXXX/systemschemas/$schema";done
-
下記の結果が返されました。やはりoperational_dataは有効化出来ませんでした。また、storageとcomputeでが有効にできずエラーになってしまいました。
{"error_code":"SCHEMA_DOES_NOT_EXIST","message":"Schema 'system.storage' does not exist.","details":XXXXX ・・・・ {"error_code":"TABLE_DOES_NOT_EXIST","message":"Table 'system.compute.node_timeline' does not exist.","details":XXXX ・・・ {"error_code":"INTERNAL_ERROR","message":"System schema \"operational_data\" is not currently available for enablement","details":XXXXX ・・・
-
再び確認してみます。下記が返されました。storageとcomputeがENABLE_INITIALIZEDになっていました。
{ "schemas": [ { "schema": "storage", "state": "ENABLE_INITIALIZED" }, { "schema": "access", "state": "ENABLE_COMPLETED" }, { "schema": "billing", "state": "ENABLE_COMPLETED" }, { "schema": "compute", "state": "ENABLE_INITIALIZED" }, { "schema": "marketplace", "state": "ENABLE_COMPLETED" }, { "schema": "operational_data", "state": "UNAVAILABLE" }, { "schema": "information_schema", "state": "ENABLE_COMPLETED" } ] } $
データの確認
-
list_pricesのテーブル定義を確認します。
DESC system.billing.list_prices
-
SELECTします。価格が確認できました。
SELECT price_start_time,price_end_time,sku_name,currency_code,usage_unit,pricing FROM system.billing.list_prices ORDER BY price_start_time DESC
考察
今回は、Databricksのシステムテーブルを確認しました。
一部、compute,storageスキーマが確認できませんでしたが、マニュアルなど探してみましたが詳細にはわかりませんでした。今後、調査してみようと思います。
参考