我应该在每次运行copy命令时创建表吗

chhkpiq4  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(306)

我的任务是将mysql数据库迁移到amazonredshift。目前我正试图通过
1) 将表格转换为csv文件
2) 存储在s3中
3) 在红移中创建表
4) 使用copy命令将数据从s3传输到redshift
我正在使用python来尝试自动化这个过程,并使用boto3来加密通往s3的数据。
但是,按照我现在的流程,我必须为s3中的每个csv手动创建一个红移表。由于我最终要移动大量数据,这将是非常低效的。
是否有一个代码可以运行来检测模式并创建表,而无需每次加载新数据时都进入并更改CREATETABLE语句?

63lcw9qa

63lcw9qa1#

显然,下面的答案只是提供了工作步骤,如果遵循正确的将做你的工作尝试自动化。我在我的案例中也做了类似的工作,尽管用例并不像您在这里试图做的那样精确。
expore所有表名。
循环表名。
对每个表重复4到8次。
从mysql导出表架构
在红移中创建表
从mysql导出tsv中的数据
将tsv文件放入s3
将数据复制到红移
这就是全部。

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循环是for Windows ,但你可以改变它 Linux/Unix

相关问题