我们在 Amazon RedShift 中对庞大的数据集进行了一些聚合,而我们在 MySQL 中有一些相对少量的数据。对于 RedShift 中的一些连接,我们需要 MySQL 中的数据。将 MySql 数据同步到 RedShift 的最佳方法是什么?红移中是否有像 oracle 中的远程视图这样的东西?或者我应该以编程方式查询 MySql 并在 RedShift 中插入/更新?
问问题
4524 次
4 回答
7
Redshift 现在支持通过 SSH从远程主机加载数据。该技术包括:
- 将集群中的公钥添加到远程主机上的 authorized_keys 文件中
- 允许从集群节点的 IP 地址对远程主机进行 SSH 访问
- 将 JSON 清单上传到 S3,指定远程主机、公钥和要在远程主机上执行的命令
- 使用指定的清单文件和 AWS 凭证运行 COPY 命令
清单指定的命令运行任意命令,该命令以适合Redshift COPY 命令提取的格式打印文本输出。
于 2013-11-11T23:25:28.833 回答
3
当 Redshift 中的连接需要 MySQL 数据时,我们通常只是将其从一个发送到另一个。
这意味着:
- Redshift:创建一个类似的表模式(记住 Redshift/PSQL 的特殊性)
- MySQL:转储数据表(csv 格式)
- 压缩导出并将其发送到 S3
- Redshift:截断表,并使用 COPY 导入所有数据
步骤 2 到 4 可以编写脚本,并允许您在必要时或定期将新数据发送到 Redshift。
于 2013-10-16T23:16:48.790 回答
0
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)
于 2016-04-27T21:19:29.000 回答
-3
检查这种将 Mysql 数据加载到 redshift 的最简单方法。如果您的期望只是将初始数据快照加载到 redshift,请尝试使用该免费解决方案。此外,您将获得架构迁移、并排查询控制台以及整个加载过程的一些统计报告(带图表)。
于 2015-11-17T14:41:26.630 回答