snowflakeでうっかりテーブルの中身を書き換えてしまい血の気が引いたので、対処法を記録しておきます。
ある昔、以下のようにpythonワークシートでテーブルの中身を書き換えてしまいました。なんとなくテーブル名を既存のもので入力してぼーっとしながら実行してしまいました...辛すぎる(自業自得)(ぼーっとしすぎ)
テーブル書き換え
import snowflake.snowpark as snowpark
def main(session: snowpark.Session):
tableName = "table_A"
df_range = session.range(1, 10, 2).to_df(''a'')
df_range.write.mode("overwrite").save_as_table(tableName)
return tableName + " table successfully created"
テーブル名をそのままにして中身を書き換えた場合、次のようにいきなりタイムトラベル機能を使用してもエラーが出て難しそうでした。
timetravel(失敗)
insert overwrite into table_A
select * from table_A
before (statement => 'クエリID');
そこで試行錯誤の結果、SQLシートの以下のフローで書き換え前のバージョンに戻せました。
①書き換えてしまったテーブルをRENAMEする
②復元させたいテーブルをUNDROPする
例として、「table_A」というテーブルを間違えて書き換えてしまったとします。
RENAME
#テーブル名をHOGEにRENAME
ALTER TABLE IF EXISTS table_A RENAME TO HOGE;
UNDROP
#復元させたいテーブル(ここではtable_AをUNDROP)
UNDROP TABLE table_A;
これで何とか命拾いしました。
RENAMEした不要なHOGEテーブルを削除したい場合はDROPしてください。
テーブル削除
DROP TABLE HOGE;
めでたしめでたし。