Databricks Runtime 13.1 (Beta)の新機能

Databricks Runtime 13.1 (Beta)が公開されました。

https://docs.databricks.com/release-notes/runtime/13.1.html

# 新機能と改善点

- [構造化ストリーミングワークロードにおけるステートフルオペレーションの高度なサポート](https://docs.databricks.com/release-notes/runtime/13.1.html#advanced-support-for-stateful-operators-in-structured-streaming-workloads)
    複数のステートフルオペレーションを連鎖できるようになり、ウィンドウ集計のようなオペレーションのアウトプットを、joinのような別のステートフルオペレーションに入力できるようになりました。
- [構造化ストリーミングにおけるPub/Subサポート](https://docs.databricks.com/release-notes/runtime/13.1.html#pubsub-support-for-structured-streaming)
    構造化ストリーミングでGoogle Pub/Subをサブスクライブできるビルトインコネクターを利用できるようになりました。
- [構造化ストリーミングにおけるウォーターマーク内での重複排除](https://docs.databricks.com/release-notes/runtime/13.1.html#drop-duplicates-within-watermarks-in-structured-streaming)
    構造化ストリーミングで重複したレコードを削除するために、指定されたウォーターマークの閾値と組み合わせて、`dropDuplicatesWithinWatermark`を使用できるようになりました。
- [Kinesisデータソースでavailable nowトリガーがサポートされました](https://docs.databricks.com/release-notes/runtime/13.1.html#trigger-available-now-is-supported-for-kinesis-data-sources)
    構造化ストリーミングのインクリメンタルバッチとして、Kinesisからのレコードを処理する際に`Trigger.AvailableNow`を使用できるようになりました。
- [トランケーテッドパーティションカラムを持つIcebergテーブルのDeltaへの変換をサポート](https://docs.databricks.com/release-notes/runtime/13.1.html#expanded-support-for-delta-conversions-from-iceberg-tables-with-truncated-partition-columns)
    `int`、`long`、`string`のトランケーテッドカラムで定義されたパーティションを持つIcebergテーブルに`CLONE`や`CONVERT TO DELTA`を使用できるようになりました。
- [START VERSIONの削除](https://docs.databricks.com/release-notes/runtime/13.1.html#remove-start-version)
    `ALTER SHARE`で`START VERSION`は非推奨になりました。
- [Pythonで新たなH3エクスプレッションが利用可能に](https://docs.databricks.com/release-notes/runtime/13.1.html#new-h3-expressions-available-with-python)
    Pythonで`h3_coverash3`や`h3_coverash3string`エクスプレッションを使用できるようになりました。

# SQL関数の追加

- [array\_prepend\(array, elem\)](https://docs.databricks.com/sql/language-manual/functions/array_prepend.html): `elem`が前に追加された`array`が返却されます。
- [try\_aes\_decrypt\(expr, key \[, mode \[, padding\]\]\)](https://docs.databricks.com/sql/language-manual/functions/try_aes_decrypt.html): AES暗号化を用いて生成されたバイナリーを復号化し、エラーがあった場合には`NULL`を返却します。
- [sql\_keywords\(\)](https://docs.databricks.com/sql/language-manual/functions/sql_keywords.html): Databricks SQLのキーワードの一覧を返却します。

## array\_prepend\(array, elem\)

```sql:SQL
SELECT array_prepend(array(1, 2, 3), 0);
```

配列の先頭に`0`が追加されました。
![Screenshot 2023-05-17 at 9.02.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/610a1160-1c28-6d6f-7718-82f4d623deee.png)


## try\_aes\_decrypt\(expr, key \[, mode \[, padding\]\]\)

最初にAESで暗号化します。

```sql:SQL
SELECT base64(aes_encrypt('Spark', 'abcdefghijklmnop'));
```

```
R763N8E99TwxGlt8MFIMQrX7foEv8D4rk7mYPn46rKhn
```

これを復号化します。

```sql:SQL
SELECT cast(try_aes_decrypt(unbase64('R763N8E99TwxGlt8MFIMQrX7foEv8D4rk7mYPn46rKhn'),
                          'abcdefghijklmnop') AS STRING);
```

複合化されました。

```
Spark
```

## sql\_keywords\(\)

```sql:SQL
SELECT * FROM sql_keywords() LIMIT 10
```

キーワードが`keyword`、予約語であるかどうかを示す`reserved`が返ってきます。予約語になるかどうかは実行時のモードによります。詳細は[こちら](https://docs.databricks.com/sql/language-manual/sql-ref-ansi-compliance.html)。

![Screenshot 2023-05-17 at 9.03.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c249b844-228f-8e49-78a6-c513ea3e77dd.png)


### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)