通过Cloud Shell从Cloud Storage向Cloud SQL导入分号分隔的大CSV
解决分号分隔CSV导入Cloud SQL的方法
没问题,我帮你一步步搞定这个大CSV文件的导入,不用下载到本地修改!咱们用Cloud Shell结合MySQL客户端和Cloud Storage工具来操作:
1. 准备工作:确保权限和工具就绪
- 先确认你在Cloud Shell里有足够权限:能访问Cloud Storage的
bd_storage实例,以及Cloud SQL的test数据库。 - 如果Cloud Shell里还没装MySQL客户端,先运行这条命令安装:
sudo apt-get update && sudo apt-get install mysql-client -y - 另外,确保Cloud SQL Admin API已经启用(如果没开,去Cloud Console的API库搜一下启用就行)。
2. 用Cloud SQL Proxy安全连接数据库
用Proxy连接不用手动授权IP,是最方便安全的方式:
# 如果没有cloud_sql_proxy,先下载并赋予执行权限 wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy chmod +x cloud_sql_proxy # 启动Proxy,替换成你的项目ID、区域和实例名 ./cloud_sql_proxy -instances=<你的项目ID>:<区域>:test=tcp:3306 &
3. 直接通过管道导入分号分隔的CSV
我们用gsutil cat读取Cloud Storage上的CSV内容,通过管道传给MySQL客户端,直接指定分号作为分隔符:
gsutil cat gs://bd_storage/你的CSV文件名.csv | mysql -u <数据库用户名> -p<数据库密码> test -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE matriculas FIELDS TERMINATED BY ';' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;"
参数说明:
FIELDS TERMINATED BY ';':核心配置,指定字段用分号分隔ENCLOSED BY '\"':如果你的CSV字段用双引号包裹,保留这个配置;没有的话可以删掉IGNORE 1 ROWS:如果CSV第一行是表头,加这个忽略表头;没有表头就去掉/dev/stdin:表示把管道传过来的内容作为输入源,不用把文件下载到Cloud Shell本地
4. 验证导入结果
导入完成后,登录数据库检查数据是否正确:
mysql -u <数据库用户名> -p<数据库密码> test -e "SELECT COUNT(*) FROM matriculas;"
如果返回的行数和CSV里的数据行数(去掉表头的话)一致,就说明导入成功啦!
小贴士:如果文件特别大,导入过程别关闭Cloud Shell窗口,或者用
nohup命令让导入任务在后台运行,避免中途中断。
内容的提问来源于stack exchange,提问作者Matias Schiaffino
相关产品推荐
相关产品推荐

