LoginSignup
1
0

Databricks にて replaceWhere による選択的上書き時におけるソースデータフレームが空の場合の動作検証

Posted at

概要

Databricks にて replaceWhere による選択的上書き時におけるソースデータフレームが空の場合に、DELETE のみが実行されるかを検証しました。検証結果としては、DELETE のみが実行されました。DELETE のみを実行したくない場合には、レコードが存在しない場合には書き込み処理をスキップすることで対応できます。本記事では、検証コードとその結果を共有します。

## 対応方法
if df.limit(1).count() > 0:
    (
        df.write
            .mode("overwrite")
            .option("replaceWhere", 'datasource in ("bbb.txt","ccc.txt")')
            .saveAsTable("replace_test.tbl_01"
        )
    )
else:
    print("ソースデータがないためスキップ")

image.png

検証方法と検証結果

次のようなデータをもつテーブルを用意します。

image.png

datasource列にてbbb.txtccc.txtの値のレコードを空のデータフラームで書き込みます。

image.png

replaceWhere による選択的上書きを実施したところ、次のようにデータが上書きされました。bbb.txtccc.txtがなくなっていることを確認できました。

image.png

検証コード

1. スキーマを作成

%sql
create schema if not exists replace_test;

image.png

2. テーブル作成と初期データの挿入

%sql
create or replace table replace_test.tbl_01
(
  str_col string,
  int_col int,
  datasource string
);
 
INSERT INTO replace_test.tbl_01
(
  str_col,
  int_col,
  datasource
)
SELECT 'a',NULL,'aaa.txt'
UNION ALL
SELECT 'b',NULL,'aaa.txt'
UNION ALL
SELECT NULL,NULL,'bbb.txt'
UNION ALL
SELECT NULL,NULL,'bbb.txt'
UNION ALL
SELECT NULL,NULL,'ccc.txt'
UNION ALL
SELECT 'd',NULL,'ddd.txt'
UNION ALL
SELECT 'e',NULL,'ddd.txt'
;
select * from replace_test.tbl_01;

image.png

3. 上書きデータを保持したデータフレームを作成

# 空のデータフラームを作成
src_d = []
 
src_s = """
str_col string,
int_col int,
datasource string
"""
 
df = spark.createDataFrame(src_d,src_s)
df.display()
"""
 
df = spark.createDataFrame(src_d,src_s)
df.display()

image.png

4. replaceWhere による選択的上書きの実施と結果確認

(
    df.write
        .mode("overwrite")
        .option("replaceWhere", 'datasource in ("bbb.txt","ccc.txt")')
        .saveAsTable("replace_test.tbl_01"
    )
)
spark.table("replace_test.tbl_01").display()

image.png

5. リソースの作成

%sql
drop schema replace_test cascade

image.png

1
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
1
0