[英]Synchronize data from MySql to Amazon RedShift
我們對Amazon RedShift中的大型數據集進行了一些聚合,我們在MySQL中有一些相對較少的數據。 對於RedShift中的一些連接,我們需要MySQL中的數據。 將MySql數據同步到RedShift的最佳方法是什么? 像oracle中的遠程視圖那樣在redshift中有這樣的東西嗎? 或者我應該以編程方式查詢MySql並在RedShift中插入/更新?
當Redshift中的連接需要MySQL數據時,我們通常只是將它從一個發送到另一個。
它意味着:
步驟2到4可以編寫腳本,並允許您在必要或定期將新數據發送到Redshift。
什么是Oracle中的“遠程視圖”?
無論如何,如果您可以從表格中提取數據到CSV文件,那么您還有一個腳本選項。 您可以使用Python / boto / psycopg2組合將CSV加載腳本編寫到Amazon Redshift。
在我的MySQL_To_Redshift_Loader中,我執行以下操作:
將MySQL中的數據提取到臨時文件中。
loadConf=[ db_client_dbshell ,'-u', opt.mysql_user,'-p%s' % opt.mysql_pwd,'-D',opt.mysql_db_name, '-h', opt.mysql_db_server] ... q=""" %s %s INTO OUTFILE '%s' FIELDS TERMINATED BY '%s' ENCLOSED BY '%s' LINES TERMINATED BY '\\r\\n'; """ % (in_qry, limit, out_file, opt.mysql_col_delim,opt.mysql_quote) p1 = Popen(['echo', q], stdout=PIPE,stderr=PIPE,env=env) p2 = Popen(loadConf, stdin=p1.stdout, stdout=PIPE,stderr=PIPE) ...
使用boto Python模塊和分段上傳將數據壓縮並加載到S3。
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) bucket = conn.get_bucket(bucket_name) k = Key(bucket) k.key = s3_key_name k.set_contents_from_file(file_handle, cb=progress, num_cb=20, reduced_redundancy=use_rr )
使用psycopg2 COPY命令將數據附加到Redshift表。
sql=""" copy %s from '%s' CREDENTIALS 'aws_access_key_id=%s;aws_secret_access_key=%s' DELIMITER '%s' FORMAT CSV %s %s %s %s;""" % (opt.to_table, fn, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,opt.delim,quote,gzip, timeformat, ignoreheader)
檢查這種最簡單的方法將Mysql數據加載到redshift。 當您期望將初始數據快照加載到紅移時,請嘗試使用該免費解決方案。 此外,您將獲得模式遷移,並排查詢控制台以及整個加載過程的一些統計報告(帶圖表)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.