maxcompute sql不支援對資料的update和delete操作,但是實際工作中可能确實有一些場景需要這樣處理,怎麼辦呢?實際上,maxcompute sql的insert文法支援insert into/overwrite兩種資料導入的方式。分别對應資料導入的追加寫入和覆寫寫入兩種場景。追加寫入比較容易了解,覆寫寫入是指,如果覆寫寫入的表是非分區表,那就清空這個表的内容然後用新的結果覆寫進去。如果是非分區表,那就清空相關的分區,然後重新寫入資料。本文就各種場景下的的解決方法做一個說明。
從前面的描述可以看到,insert overwrite的就是一個現成的update功能,我們要update不正是要用update後的結果來覆寫update前的結果嗎。是以我們可以把需要update後的結果select出來,然後insert overwrite回去,就能實作了update的結果了。這裡用幾個簡單的例子來說明下友善了解:
如果是分區表的資料需要修改資料的話,就套用分區表的insert文法和select文法,都是一樣的道理,就不一一舉例了。
delete删除資料,分為是要删除某個表或者分區裡的全部資料,還是隻是删除一部分的資料。
如果需要删除某個非分區表,使用 <code>truncate table table_name;</code>删除這個表裡的全部資料
如果需要删除的是分區表裡的資料,需要<code>alter table table_name drop partition;</code>的方式将這個分區删掉進而實作删除對應的分區裡的資料(分區連同分區裡的資料一起被删除)。
删除部分資料,就是指通過where語句過濾,隻删除部分資料的情況。delete也是用insert overwrite來實作的。如果需要删除一部分的資料,那其實就是覆寫寫入剩下的資料。如果要删除全部的資料,那就是覆寫寫入空資料。這裡還是隻提到普通表的例子,和update一樣,普通表和分區表的差別,就是insert的時候,需要指定修改的分區,或者使用動态分區。
總的看來,這些都不是太有難度的東西,都隻是一些比較常用的小技巧。希望這些小技巧能幫助到大家,讓工作變得更加有效率。
在最後還是提醒大家,在工作中為避免誤操作,盡量避免直接對資料進行直接的修改和删除,建議是建立一張新的表,把結果表進過加工後寫入新的表。寫入結束核對好了資料後,再把資料導過來。請務必注意資料備份!