Databricks Delta Lake機能

## Delta Lake DML機能(データ追加/更新/削除)

ここでは、Delta Lakeの DML機能(データ追加/更新/削除)について、まとめていきます。

参照：https://docs.databricks.com/delta/delta-update.html



## データを追加する

データを追加していく方法をまとめます。

・ファイルアップロード
ファイルからデータをアップロードしていく方法を記していきます。
**ex.1直接ファイルアップロード**

![image-20201117181156190.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/30172a31-6d45-149b-7759-68aa13c421b7.png)


Dataタブをクリックし、Add Dataボタンをクリックすると上記画面に遷移される。


![image-20201117181227917.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/bc9aa85e-9355-438c-6488-de66f5e5643c.png)

DBFS配下の任意のフォルダをSelectボタンから、選択していく。



![image-20201117181303051.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/8a1344af-6124-c29f-7776-4f76c1debe02.png)

特に指定しない場合は/FileStore/tables/  配下にアップロードされる。



![image-20201117181340106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/e67b393e-5d73-065d-d1b5-88015addc556.png)


選択して、ウィンドウを閉じると、自動的にアップロードされる。
Remove fileを押すと、アップロードされたファイルが取り消しされる。



**ex.2 S3からファイルアップロード**

![image-20201117181546868.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/13782309-bba8-0fb7-0253-eee73801fc14.png)


Create New Tableの画面から、S3タブを選択します。
Create Table with UIボタンを押下します。

![image-20201117181609566.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/46e636b4-0fbb-9072-fbd5-f41a8ed6822b.png)



クラスターを選択するところで起動しているクラスターを選択します。
その下にあるS3 Bucket Nameの項目にS3バケット名を記載します。
必要項目が設定されましたら、Browse Bucketボタンを押下します。

![image-20201120141336019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/e2bfdf36-0d2a-1309-de93-a737c720e2ca.png)

![image-20201120141425950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/8f9ef511-cdf8-e529-f1ea-6ecff1d71b38.png)

S3バケットの中にあるファイルを表示してくれます。

そこで、データを取り込みたいファイルを選択します。

![image-20201120141626541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/4da8854c-ccf0-efa8-3b17-d0f220057e69.png)



Peview Tableボタンが表示されるので、クリックします。

![image-20201120141823762.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/44136115-04a0-95a5-a30a-1c4bc081a893.png)

データが読み込まれ、Create Tableボタンが表示されます。

ボタンをクリックすると、テーブルが作成され、Databaseにテーブル、データが追加されます。



![image-20201120142036212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/3c3fe789-14b2-917c-b061-f256cabcaa6f.png)

上記はデータタブから、S3バケットを参照して、データを読み込んでくるやり方です。

※データタブからデータを読み込むにはテーブルを作成することがデフォルトの設定となっています。



Notebook上で、コマンドを叩いて、S3バケットからデータを読み込んでくるやり方も記載いたします。

- Notebookを開いてs3をマウントする


```
dbutils.fs.mount("s3a://PoCで使用するバケット名", "/mnt/demo")
display(dbutils.fs.ls("/mnt/demo"))
```

※マウントが既にされていたら、上記は必要なし。

* csvファイルを読み込む

  ```
  df = spark.read.csv("/mnt/demo/読み込みたいファイル")
  display(df)
  ```

読み込んできたファイルの中身がディスプレイ上で表示される。

![S3accses (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/a4534511-f676-1093-b39d-f16b6452fb01.png)





**ex.3 その他システムからファイルアップロード**

![image-20201117181744988.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/c65f5fc8-c170-fd6b-e094-616126d610b7.png)



Create New Tableの画面から、Other Data Sourcesタブを選択します。
Connectorが出てきますので、そこから、データツールを選択します。

![image-20201117181816598.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/e96e92e3-2273-de76-af9f-36093d63fc38.png)

Create Table in Notebookボタンを押下します。
Notebookのページに遷移して、テーブル作成の
Notebookが簡易的に作成されます。

![image-20201117181910540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817530/c7b02297-4261-d030-4bb5-3df6c1e6ab09.png)

Notebookに記載されている必要な設定をして、Runを実行すると、
データがアップロードされます。



**更新と削除：**

Delta Lakeは、データセットをマージ、更新、削除するためのDML APIを提供します。これにより、GDPR/CCPAに容易に準拠でき、変更データのキャプチャを簡素化できます



## テーブルから削除する

述語に一致するデータをデルタテーブルから削除できます。たとえば、`2017`以前のすべてのイベントを削除するには、次のコマンドを実行できます。

- [SQL](https://docs.databricks.com/delta/delta-update.html#0-language-sql)

```
DELETE FROM events WHERE date < '2017-01-01'

DELETE FROM delta.`/data/events/` WHERE date < '2017-01-01'
```

詳細については、[APIリファレンス](https://docs.databricks.com/delta/delta-apidoc.html)を[参照](https://docs.databricks.com/delta/delta-apidoc.html)してください。

重要：

`delete`Deltaテーブルの最新バージョンからデータを削除しますが、古いバージョンが明示的にバキュームされるまで、物理ストレージからデータを削除しません。詳細については、[バキューム](https://docs.databricks.com/delta/delta-utility.html#delta-vacuum)を参照してください。

ヒント：

可能であれば、パーティション化されたDeltaテーブルのパーティション列に述語を指定します。そのような述語は操作を大幅に高速化できるためです。



## テーブルを更新する

Deltaテーブルの述語に一致するデータを更新できます。たとえば、のスペルミスを修正するには`eventType`、次のコマンドを実行します。

- [SQL](https://docs.databricks.com/delta/delta-update.html#0-language-sql)

```
UPDATE events SET eventType = 'click' WHERE eventType = 'clck'

UPDATE delta.`/data/events/` SET eventType = 'click' WHERE eventType = 'clck'
```

詳細については、[APIリファレンス](https://docs.databricks.com/delta/delta-apidoc.html)を[参照](https://docs.databricks.com/delta/delta-apidoc.html)してください。

ヒント

削除と同様に、更新操作はパーティション上の述語を使用して大幅に高速化できます。



以上がDML機能(データ追加/更新/削除)についてでした。

見ていただき、ありがとうございました。

株式会社メソドロジック

川名智士