0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Delta Lake形式のGenerated Column(生成列)利用時におけるMerge処理時の制約に関する調査

Last updated at Posted at 2021-09-15

注意事項

本記事は、2021年9月15日時点におけるDatabricksでの調査結果です。

概要

Delta Lake 1.0から利用できるようになったGenerated Column(生成列)利用時におけるMerge操作に制約があるのですが、Merge内のInsert処理時にエラーとなるようです。

Delta Lakeのドキュメントにて、Generated Columnには下記のようにMerge処理がサポートされていないことが記載されております。

MERGE operations do not support generated columns.
image.png

引用元:Table batch reads and writes — Delta Lake Documentation

Merge処理時のどの操作をサポートしていないのを検証したところ、Update処理をサポートしておりましたが、Insert処理がサポートされていないことがわかりました。下記が、Insert処理時のエラーメッセージです。チェック制約違反となることが原因であることから、Generated Columns列の制約を満たすカラムをソースとすることでMerege操作時にはエラーとなりませんでした。

Error in SQL statement: InvariantViolationException: CHECK constraint Generated Column (count_string <=> > CAST(count AS STRING)) violated by row with values:

  • count : 1
  • count_string : null

image.png

Databricks Runtime 9.1以降では、Insert処理にも対応するでき、実質的にMerge操作に制約がなくなるようです。
下記が実行結果です。

image.png

検証環境

databricks runtime : 9.0.x-scala2.12
Python version : 3.8.10
pyspark version : 3.1.2

検証手順

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

Databricks Runtime 9.1での実行結果は下記のページです。

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

https://github.com/manabian-/databricks_tecks_for_qiita/blob/main/tecks/merge_test_generate_columns/merge_test_generate_columns.dbc
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?