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?

【snowflake】データを上書き!タイムトラベルで元に戻せる?

Last updated at Posted at 2025-01-21

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;

めでたしめでたし。

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?