MaxCompute SQLでデータ更新と削除する方法
既にご存じの方もいらっしゃると思いますが、MaxCompute SQLでは、データ更新(Update)と削除(Delete)をサポートしません。ただ、実際の業務の中で必要なケースも存在しています。そのケースに遭遇した場合にどうすればいいのでしょうか。本記事で実際の例を交えながら、対策を皆さんに共有させて頂きたいと思います。
- データ更新
MaxComputeでデータ投入を行う際に、Insert Into/Overwrite 2種類の方法があり、それぞれ違う意味合いを持ちます。Insert Intoは、テーブルやパーティションに追加データが挿入されるのに対し、Insert Overwrite は、テーブルやパーティションから元のデータを削除してからデータが挿入され、データの置き換えとも言えます。
MaxCompute SQLは、SQLに似たような構文を使用できますが、SQL全ての標準に準拠しているわけではないため、Update文がありません。ただ、Insert Overwrite文を上手く活用すれば、データ更新を実現することも可能です。それでは、事前に作成したdemoテーブルを使い、試して見ます。
demoテーブル (Partitionは'20181208'です)は下記のようとなります。
select * from demo where dt = '20181208';
cityコラムの一行目のBerlinをMunichに更新したいのであれば、下記の構文で実行すると、レコード更新ができるようになりました。
insert overwrite table demo partition (dt='20181208') select customerid,customername,contactname,address,case when city='Berlin' then 'Munich' else city end as city,postalcode,country from demo where dt = '20181208';
select * from demo where dt='20181208';
- データ削除
標準SQLと同様に、テーブルの全レコードを削除したいのであれば、TRUNCATE TABLE table_nameを使えば、問題なく実現することができます。もし指定したいレコードを削除したい場合は、上述のInsert Overwrite文を利用して実現することも可能です、demoテーブルの例で使い方をみて見ましょう。例えば、'Munich'が含まれている行を削除したいならば、下記の構文を実行すると、削除動作ができるようになります。
insert overwrite table demo partition (dt='20181208') select customerid,customername,contactname,address,city,postalcode,country from demo where city != 'Munich' and dt='20181208';
select * from demo where dt='20181208';
- まとめ
いかがでしたでしょうか。Update文とDelete文がないため、悩ましい更新と削除の作業はInsert overwrite構文を活用すれば、実現できるようになりました。皆さんもぜひ活用してください。
Author And Source
この問題について(MaxCompute SQLでデータ更新と削除する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/qfkdy/items/a6051323608a7f635a2e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .