Microsoft Fabric で Delta Lake Clone を使う際の注意点

## はじめに

DeltaLake の機能として [Cloneコマンド](https://delta.io/blog/delta-lake-clone/) がありますが、Fabric Lakehouse で使用できるかを確認しました。

結論としては、**ノートブック以外での利用は不可**でした。


### Cloneコマンドについて

OSS Delta Lake では SHALLOW CLONE がサポートされています。

SHALLOW　CLONEは、メタデータのみを複製するだけなので、非常に高速にテーブルの複製ができる DeltaLake のテーブルユーティリティコマンドです。

ソーステーブルと同じデータファイルから開始されますが、更新は別の独立した DeltaLogとデータファイルが追加されていくことになるのでソーステーブルに影響なく処理することが可能です。


:::note info

Databricks ではデータの実体もコピーして新しいテーブルを作成する [DEEP CLONE](https://learn.microsoft.com/ja-jp/azure/databricks/delta/clone#clone-types)もサポートされています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/cf23999a-304a-5f3f-ff00-493573504f74.png)


:::



## 手順


### 準備

レイクハウスに適当なテーブルを作成しておきます。

```python:pyspark

from pyspark.sql import Row

# サンプルデータの作成
data = [Row(id=1, name="Alice", age=30),
        Row(id=2, name="Bob", age=25),
        Row(id=3, name="Charlie", age=35),
        Row(id=4, name="David", age=40),
        Row(id=5, name="Eva", age=22)]

# DataFrameの作成
df = spark.createDataFrame(data)
display(df)

df.write.mode("overwrite").saveAsTable("source_people")

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/51efd1f3-a9b9-1752-7a3e-d43fe9457e68.png)

### Clone コマンドの実行

1. 名前かURLでソーステーブルを指定できます。以下のコマンドを実行します。

    ```sql:sql
    
    %%sql
    
    create or replace table clone_people_by_name
    shallow clone source_people;
    
    ```
    
    
    または、別の場所にあるテーブルなどパスで指定する場合は、abfssパスで参照可能です。
        
    ```sql:sql
    
    %%sql
    
    create or replace table clone_people_by_name
    shallow clone delta.`abfss パス`;
    
    ```
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/655bd3d5-9587-fd0c-686f-28e71244dc10.png)



2. レイクハウスのファイルを確認すると、DeltaLog だけが作成されたテーブルが確認できます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7bd54f27-f5ab-b995-b18b-98e6bb4e001c.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a6d84fae-7df1-c299-bccb-c0da73d5de61.png)

### クエリの確認

#### 成功するエンジン

- ノートブック
問題なくクエリできます。
            
    ```sql:sql
    
    %%sql
    select * from clone_people_by_name;

    ```
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/006d84db-bbd5-2f77-3254-cb24d57dd6ad.png)
        

#### 失敗するエンジン

- SQL分析エンドポイント
System.NotSupportedException が表示されてしまいました。メタデータの同期処理がうまくいかないようです。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d7abcc87-2fc3-9bb0-0931-79a2cdf88fb7.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/89f28d46-ee81-8b64-cf60-8f75ed04c882.png)

- データパイプライン
こちらも NotFound のエラー
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/03a6735d-eea9-24c9-dd56-536206f6a237.png)

- データフローGen2
データフローGen2 は SQL 分析エンドポイントを使用するようですので、表示されず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/92db23cf-94c6-33d4-fcfa-e1672f87ca0a.png)


- Direct Lake セマンティックモデル
こちらも表示されず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/843a1d89-1e6a-68f2-e747-298fcc1f6fed.png)