我的任务是将MySQL数据库移动到amazon redshift。目前我试图通过
来实现这一目标1)将表格转换为CSV文件
2)将它们存储在S3
中3)在redshift中创建一个表
4)使用COPY命令将数据从S3传输到redshift
我正在使用Python尝试自动执行此过程,并使用boto3加密到S3的数据。
但是,通过我现在的流程,我必须在Redshift中为S3中的每个csv手动创建一个表。由于我最终会移动大量数据,因此效率非常低。
我是否可以运行代码来检测架构并创建表,而无需每次我想加载新数据时都进入并更改CREATE TABLE语句?
答案 0 :(得分:0)
显然,下面的答案只是提供工作步骤,如果正确遵循将完成您尝试自动化的工作。在我的案例中我做了类似的事情,虽然用例并不像你想要的那样精确。
就是这样。
mysql -h localhost -u user -pPassword test --skip-column-names --execute="SHOW TABLES;" > database.tmp
echo "Start!"
/* Look over table name names */
for /F %%A in (database.tmp) do (
echo "Exporting table Names for %%A"
mysqldump -h localhost -u radhe -pPassword --no-data database %%A > "%%A_tables.sql"
psql -h redshift-hostname -d databasename -U username -f "%%A_tables.sql"
mysql -h localhost -u user -pPassword -e "select * from %%A" -B > %%A_data.tsv
S3CMD put s3://yourbucket:path/%%A_data.tsv %%A_data.tsv
psql -h redshift-hostname -d databasename -U username -c "copy %%A from 's3://yourbucket:path/%%A_data.tsv'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';"
)
PS :以上for循环适用于Windows
,但您可以将其更改为Linux/Unix