[英]purging a huge data mysql table using python
我有一個 1000M 的數據表,我需要一個自動腳本只保留最后 7 天並刪除前幾天。 我想使用 python 和塊概念來做到這一點。 想要明智地刪除塊。我有 2 個 dbts 1.我們是否有任何與 python 上的 mysql 相關的笨拙概念的庫 2. 如果沒有人可以建議我如何使用塊的最佳方法或將其與 mysql 一起應用。
我不知道一個 Python package 有一個 API 用於“分塊”從 ZDCBB673AZ44 表中刪除。 SqlAlchemy 提供了一個流暢的接口,可以做到這一點,但它與 SQL 並沒有太大區別。 我建議使用 PyMySql。
import datetime
import pymysql.cursors
connection = pymysql.connect(
host='host',
user='user',
password='password',
database='database'
)
seven_days_before_now = datetime.datetime.now() - datetime.timedelta(days=7)
chunksize = 1000
with connection.cursor() as cursor:
sql = 'DELETE FROM `mytable` WHERE `timestamp` < %s ORDER BY `id` LIMIT %s;'
num_deleted = None
while num_deleted != 0:
num_deleted = cursor.execute(sql, (seven_days_before_now, chunksize))
connection.commit()
LIMIT
只是將刪除的行數限制為chunksize
。 ORDER BY
確保DELETE
是確定性的,並且它按主鍵排序,因為主鍵保證被索引; 所以即使它對每個塊進行排序,至少它是在索引列上排序的。 如果不需要確定性行為,請刪除ORDER BY
,這將導致更快的執行時間。 您需要替換連接詳細信息、表名、列名和chunksize
。 此外,此解決方案假定表有一個名為id
的列,它是主鍵和一個自動遞增的 integer。 如果您的架構不同,您需要進行一些更改。
正如 Bernd Buffen 評論的那樣:獲得所需行為的正確方法是對表進行分區。 請考慮遷移。
而且,當然:停止使用 Python 2,從這個答案的第一個版本開始,它已經不受支持了將近兩年。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.