Databricks DLT にて Unity Catalog のビューの作成が可能

## 概要

Databricks の DLT にて Unity Catalog のビューの作成をサポートしたようです。おそらく DLT release 2025.12 から利用できるようになり、 CREATE VIEW (DLT) というドキュメントが作成されていました。動作確認結果を共有します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d61e6162-5d72-4a24-b311-d458a47313b8.png)

本機能により、DLT の結果とは異なるスキーマに配置したビューを配置し、そのスキーマにてデータを公開できるようになります。本記事では、 DLT の処理を行うスキーマと異なるスキーマ上にビューを作成しています。

## 利用時の注意事項

### 現時点でサポートされているのは SQL のみ

DLT にて Unity Catalog のビューを作成できるのは SQL のみです。 Python で DLT の処理を記述している場合には、 別途 SQL で DLT の処理を記述して

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6b2de80b-0cb3-419b-8daf-62ea5b663174.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9efb08ee-0eb2-401a-ba34-7c85b7305df7.png)
### CREATE VIEW とは別物であること

CREATE VIEW (DLT) は、 CREATE VIEW とはシンタックスが異なります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ef0a880d-53fb-47f1-aeb1-139b09b0fb23.png)

出所：[CREATE VIEW (DLT) - Azure Databricks | Microsoft Learn](https://learn.microsoft.com/en-us/azure/databricks/dlt-ref/dlt-sql-ref-create-view)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ed63a9a6-099a-4bfd-ae83-9836e18cf2e6.png)

出所：[CREATE VIEW - Azure Databricks - Databricks SQL | Microsoft Learn](https://learn.microsoft.com/en-us/azure/databricks/sql/language-manual/sql-ref-syntax-ddl-create-view)

:::note info

ビューのソースのスキーマ変更をビューに自動で反映できないかと考えて、CREATE VIEW (DLT) のドキュメントでは`WITH SCHEMA`句の記述はなかったのですが、記述したところ想定通りに動作しました。ただし、想定外の動作をする可能性もあるため、自己責任で利用する必要があります。

```sql
CREATE VIEW dlt_views_01.view_01 
WITH SCHEMA EVOLUTION 
AS
SELECT
  *
FROM table_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1ea8b084-7b09-4115-a63f-0cf11c322ae6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/df415971-231a-416b-a954-1b8907d310d8.png)

:::

## 動作確認

### 前提条件

- DLT のパイプラインを実行できる状態になっていること

### 1. カレントのカタログを設定

```sql
%sql
USE CATALOG manabian_test_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e76b5061-59b6-46a9-aca7-ff9facecd86f.png)

### 2. ビュー配置用のスキーマを作成

```sql
%sql
CREATE SCHEMA IF NOT EXISTS dlt_views_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/73b2fdef-7033-4478-9a5e-14d8ff4218a7.png)


### 3. DLT のソーステーブルを作成

```sql
%sql
CREATE SCHEMA IF NOT EXISTS dlt_source_01;
```

```sql
%sql
CREATE OR REPLACE TABLE dlt_source_01.table_01
AS
SELECT
  1 AS id,
  'John' AS string_col;
SELECT * FROM dlt_source_01.table_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/70f78b3f-33ce-4646-9a8b-f3504e5c022a.png)

### 4. DLT の処理を Python で記述

```python
from dlt import *
from pyspark.sql.functions import *


catalog = "manabian_test_01"
schema = "dlt_test_01"

# table_01 の処理
table_01 = "table_01"
ftable_01 = f"{catalog}.{schema}.{table_01}"

@dlt.table(
  name = ftable_01,
)
def customers_bronze_ingest_flow():
  return (
      spark.readStream.table(f"{catalog}.dlt_source_01.table_01")
  )
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7d72b9b8-cbd6-41a0-b642-1d1c1c412907.png)

### 5. ビューを SQL で記述

```sql
-- unity Catalog のビューを定義
CREATE VIEW dlt_views_01.view_01 
AS
SELECT
  *
FROM table_01;

-- こちらは Spark 一時ビュー
CREATE TEMPORARY VIEW temp_view_01 AS
SELECT
  *
FROM table_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4dfce314-8026-4fda-b789-415b0f549510.png)

:::note info
比較するために、 Unity Catalog のビューと Spark の一時ビューを定義しています。

:::

### 6. パイプラインを実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f78a4159-eefc-4967-a765-9c651fbab4c1.png)

### 7. ビューへのクエリを実行

```sql
%sql
SELECT * FROM dlt_views_01.view_01
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f451706d-1f9b-46a4-98e0-ea3f698af941.png)