python跨庫檢查資料一致性
因為最近上線了samza實時流平臺,實時從源資料端實時傳輸資料到資料倉儲,於是就需要檢查samza資料傳輸的準確性,則透過下面的python指令碼定時檢查兩個資料端表的行數,以簡單的檢測下資料一致性。下面的指令碼每天在早上6點執行,檢查昨天以前的所有資料行數是否一致,並郵件通知。因為要檢測的表比較多,並且清洗規則不一致,所以只能一張表一張表的進行比較,下面只是指令碼的部分程式碼
#coding=utf-8
import MySQLdb
import psycopg2
import smtplib
import time
from email.mime.text import MIMEText
#通用的郵件函式
import psycopg2
import smtplib
import time
from email.mime.text import MIMEText
#通用的郵件函式
def mail(sub,content):
mailto_list=["hzwuj@tairanchina.com"]
mail_host="smtp.tairanchina.com"
mail_uer="trcloud@tairanchina.com"
mail_pass="r!dHE#3OAGs5TGeh"
message = MIMEText(content,_charset='utf-8')
message['Subject'] = sub
message['From']=mail_uer
message['To'] = ";".join(mailto_list)
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_uer,mail_pass)
s.sendmail(mail_uer, mailto_list, message.as_string())
s.close()
return True
except Exception:
print 'filed'
return False
mailto_list=["hzwuj@tairanchina.com"]
mail_host="smtp.tairanchina.com"
mail_uer="trcloud@tairanchina.com"
mail_pass="r!dHE#3OAGs5TGeh"
message = MIMEText(content,_charset='utf-8')
message['Subject'] = sub
message['From']=mail_uer
message['To'] = ";".join(mailto_list)
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_uer,mail_pass)
s.sendmail(mail_uer, mailto_list, message.as_string())
s.close()
return True
except Exception:
print 'filed'
return False
#設定變數為今天的日期
datetime=time.strftime("%Y%m%d", time.localtime())
#從源資料庫mysql去得出清洗後的總條數
conn=MySQLdb.connect(host='115.231.97.10',port=3306,user='select',passwd='123456',db='cms')
cursor1=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
cursor1.execute("select 'biz_account' as tablename,count(*) as sum from biz_account where del_flag='0' and date(create_date)<%s" % datetime)
rows1=cursor1.fetchall()
for list1 in rows1:
sum1=list1['sum']
tablename1=list1['tablename']
#從資料庫倉庫greenplum從獲取samza清洗後的表總行數
conn2 = psycopg2.connect(database="dw", user="admin", password="123456", host="172.30.248.24", port="5432")
cursor2 = conn2.cursor()
cursor2.execute("select 'dw_biz_account' as tablename,count(*) as sum from dw.dw_biz_account where create_day<'%s'" % datetime )
rows2=cursor2.fetchall()
for list2 in rows2:
sum2=list2[1]
tablename2=list2[0]
#總條數比較
if sum1!=sum2:
mail('資料不一致',"%s:%s %s:%s"%(tablename1,sum1,tablename2,sum2))
if sum1!=sum2:
mail('資料不一致',"%s:%s %s:%s"%(tablename1,sum1,tablename2,sum2))
else:
mail('資料一致','資料一致')
conn.close()
conn2.close()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29989552/viewspace-2132488/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 快速檢查資料庫一致性資料庫
- 資料庫配置檢查資料庫
- SQL Server 跨資料庫查詢SQLServer資料庫
- RMAN備份恢復典型案例——快速檢查資料庫一致性資料庫
- 資料庫健康檢查(轉)資料庫
- MySQL資料庫健康檢查--MySQL巡檢MySql資料庫
- oracle資料庫巡檢(二)全面檢查Oracle資料庫
- ORAchk-資料庫健康檢查資料庫
- MSSQL資料庫健康檢查--SQL Server巡檢SQL資料庫Server
- 漫談Oracle資料庫健康檢查Oracle資料庫
- 資料庫的查詢與檢視資料庫
- Oracle資料庫健康檢查常用SQLOracle資料庫SQL
- 解析MSSQL跨資料庫查詢的實現方法SQL資料庫
- 使用_allow_resetlogs_corruption隱藏引數跳過資料庫一致性檢查資料庫
- 資料庫的常規檢查指令碼資料庫指令碼
- 巧用shell生成資料庫檢查指令碼資料庫指令碼
- 資料庫的檢查步驟指令碼資料庫指令碼
- oracle 資料庫效能健康檢查指令碼Oracle資料庫指令碼
- oracle資料庫健康檢查報告模板Oracle資料庫
- 怎樣檢查資料庫壞塊(DBV)資料庫
- 資料庫日常健康檢查方式方法資料庫
- 檢查資料庫是否啟用了跟蹤資料庫
- 資料遷移中的資料庫檢查和建議資料庫
- python資料庫-MySQL資料庫高階查詢操作(51)Python資料庫MySql
- 一條SQL完成跨資料庫例項Join查詢SQL資料庫
- [C#] zdbviewcs: 跨平臺資料庫檢視器。支援SqlServer、Oracle、MySql等資料庫C#View資料庫ServerOracleMySql
- (轉)oracle 資料庫效能健康檢查指令碼Oracle資料庫指令碼
- oracle rman backup命令檢查資料庫錯誤Oracle資料庫
- 資料庫健康檢查 sqlplus 指令碼資料庫SQL指令碼
- 實用的資料庫檢查程式 (1) (轉)資料庫
- 實用的資料庫檢查程式(3) (轉)資料庫
- 如何使用命令列工具檢查資料庫?命令列資料庫
- 資料庫映象和跨資料庫事務資料庫
- Python全棧 MongoDB 資料庫(資料的查詢)Python全棧MongoDB資料庫
- Python全棧MongoDB資料庫(資料的查詢)Python全棧MongoDB資料庫
- DBV,Analyze,Rman檢查資料檔案物理和邏輯一致性
- Redis與資料庫資料一致性Redis資料庫
- 一個簡單資料庫健康檢查指令碼資料庫指令碼