概要
Databricks(Spark)にてDelta Lake形式・Parquet形式でAnalyze Tableを実行した際に格納されるデータの調査結果を共有します。Analyze Table実行後に、Hive Metastoreデータベース(MySQL)のTABLE_PARAMSテーブルとPARTITION_PARAMSテーブルにデータが格納され、SparkからDESC EXTENDED
により確認できます。
統計情報の種類としては3種類あり、Delta Lake形式では、パーティションの統計情報をサポートしていないようです。ただ、Sparkにてパーティションの統計情報がどのように利用されるかを確認できませんでした。
- テーブルの統計情報
- カラムの統計情報
- パーティションの統計情報
Sparkの統計情報に関しては下記の資料が参考になります。
引用元:Spark SQL Beyond Official Documentation
詳細は下記のGithub pagesのページをご確認ください。
コードを実行したい方は、下記のdbcファイルを取り込んでください。
https://github.com/manabian-/databricks_tecks_for_qiita/blob/main/tecks/survey_about_analyze_table/dbc/survey_about_analyze_table.dbc
実行環境
databricks runtime: 8.3.x-scala2.12
Python version: 3.8.8
Pyspark version: 3.1.2.dev0
データの確認
Parquet形式におけるテーブルの統計情報
DESC EXTENDED
の実行結果
DESC EXTENDED students_parquet;
Hive Metastoreデータベースへのクエリ実行結果
SET @TABLE_NAME="students_parquet";
SELECT
target.*
FROM
TABLE_PARAMS AS target
INNER JOIN
TBLS AS master
on target.TBL_ID = master.TBL_ID
and master.TBL_NAME = @TABLE_NAME
;
Delta Lake形式におけるテーブルの統計情報
DESC EXTENDED
の実行結果
統計情報が確認できませんでした。
DESC EXTENDED students_delta;
Hive Metastoreデータベースへのクエリ実行結果
SET @TABLE_NAME="students_delta";
SELECT
target.*
FROM
TABLE_PARAMS AS target
INNER JOIN
TBLS AS master
on target.TBL_ID = master.TBL_ID
and master.TBL_NAME = @TABLE_NAME
;
Parquet形式におけるカラムの統計情報
DESC EXTENDED
の実行結果
DESC EXTENDED students_delta student_id;
Hive Metastoreデータベースへのクエリ実行結果
SET @TABLE_NAME="students_parquet";
SELECT
target.*
FROM
TABLE_PARAMS AS target
INNER JOIN
TBLS AS master
on target.TBL_ID = master.TBL_ID
and master.TBL_NAME = @TABLE_NAME
;
Delta Lake形式におけるカラムの統計情報
DESC EXTENDED
の実行結果
DESC EXTENDED students_parquet student_id;
Hive Metastoreデータベースへのクエリ実行結果
SET @TABLE_NAME="students_delta";
SELECT
target.*
FROM
TABLE_PARAMS AS target
INNER JOIN
TBLS AS master
on target.TBL_ID = master.TBL_ID
and master.TBL_NAME = @TABLE_NAME
;
Parquet形式におけるパーティションの統計情報
DESC EXTENDED
の実行結果
DESC EXTENDED students_parquet PARTITION (student_id = 111111);
Hive Metastoreデータベースへのクエリ実行結果
SET @TABLE_NAME="students_parquet";
SELECT
target.*
FROM
PARTITION_PARAMS AS target
INNER JOIN
PARTITIONS AS master
on
target.PART_ID = master.PART_ID
INNER JOIN
TBLS AS master2
on master.TBL_ID = master2.TBL_ID
and master2.TBL_NAME = @TABLE_NAME
;
Delta Lake形式におけるパーティションの統計情報
DESC EXTENDED
の実行結果
データを確認できませんでした。
DESC EXTENDED students_delta PARTITION (student_id = 111111);
Hive Metastoreデータベースへのクエリ実行結果
データを確認できませんでした。
SET @TABLE_NAME="students_delta";
--レコードを取得できない想定
SELECT
target.*
FROM
PARTITION_PARAMS AS target
INNER JOIN
PARTITIONS AS master
on
target.PART_ID = master.PART_ID
INNER JOIN
TBLS AS master2
on master.TBL_ID = master2.TBL_ID
and master2.TBL_NAME = @TABLE_NAME
;