Databricks（Spark）にてDelta Lake形式・Parquet形式でAnalyze Tableを実行した際に格納されるデータの調査結果

## 概要
Databricks（Spark）にてDelta Lake形式・Parquet形式でAnalyze Tableを実行した際に格納されるデータの調査結果を共有します。Analyze Table実行後に、Hive Metastoreデータベース（MySQL）のTABLE_PARAMSテーブルとPARTITION_PARAMSテーブルにデータが格納され、Sparkから`DESC EXTENDED`により確認できます。

統計情報の種類としては3種類あり、Delta Lake形式では、パーティションの統計情報をサポートしていないようです。ただ、Sparkにてパーティションの統計情報がどのように利用されるかを確認できませんでした。

1. テーブルの統計情報
1. カラムの統計情報
1. パーティションの統計情報

Sparkの統計情報に関しては下記の資料が参考になります。
[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/af651f66-62a7-b9c0-6f18-6a542f4eed89.png">](https://www.iteblog.com/ppt/dataai-summit-europe-2020/spark-sql-beyond-official-documentation-iteblog.com.pdf)
引用元：[Spark SQL Beyond Official Documentation](https://www.iteblog.com/ppt/dataai-summit-europe-2020/spark-sql-beyond-official-documentation-iteblog.com.pdf)


詳細は下記のGithub pagesのページをご確認ください。

https://manabian-.github.io/databricks_tecks_for_qiita/#survey_about_analyze_table/survey_about_analyze_table.html

コードを実行したい方は、下記のdbcファイルを取り込んでください。

```URL
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`の実行結果

```python
DESC EXTENDED students_parquet;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2cf448dd-c953-a12a-9c2c-4b38f6c2ad47.png)

#### Hive Metastoreデータベースへのクエリ実行結果

```python
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
;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/27f7dcdf-66e3-33d6-ffc8-16488a1b7e0d.png)

### Delta Lake形式におけるテーブルの統計情報

#### `DESC EXTENDED`の実行結果
統計情報が確認できませんでした。

```python
DESC EXTENDED students_delta;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8903ed32-34fd-bd61-a42c-87dfc4bb91e6.png)


#### Hive Metastoreデータベースへのクエリ実行結果

```python
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
;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ad871108-bb17-af30-ec50-2c86994cf04a.png)


### Parquet形式におけるカラムの統計情報
#### `DESC EXTENDED`の実行結果

```SQL
DESC EXTENDED students_delta student_id;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e2a70e34-c4db-c0b0-f36a-299d3a6a2d75.png)



#### Hive Metastoreデータベースへのクエリ実行結果

```SQL
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
;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f82f0707-1356-8c2b-218c-053b35c89c31.png)


### Delta Lake形式におけるカラムの統計情報

#### `DESC EXTENDED`の実行結果

```SQL
DESC EXTENDED students_parquet student_id;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9a2fed04-9ba2-c765-e871-2a885f0dfc61.png)

#### Hive Metastoreデータベースへのクエリ実行結果

```SQL
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
;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/10213ec5-cefd-55ac-3ee5-1f05ea4cc3be.png)


### Parquet形式におけるパーティションの統計情報
#### `DESC EXTENDED`の実行結果

```SQL
DESC EXTENDED students_parquet PARTITION (student_id = 111111);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c5990161-aeff-1656-7afe-fd9e30247100.png)

#### Hive Metastoreデータベースへのクエリ実行結果
```SQL
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
;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4e877bb6-445d-83f3-b5e9-db02915edd6e.png)


### Delta Lake形式におけるパーティションの統計情報
#### `DESC EXTENDED`の実行結果
データを確認できませんでした。

```SQL
DESC EXTENDED students_delta PARTITION (student_id = 111111);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ba8fcd41-f22b-a6a2-c62e-5e80bb9ccc8f.png)

#### Hive Metastoreデータベースへのクエリ実行結果
データを確認できませんでした。

```SQL
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
;
```