我在云存储实例(bd_storage(上有一个CSV文件,并且需要在云SQL数据库(test(中对已经创建的表(矩阵(进行导入。问题是默认情况下的UI导入选项由Comma(','(分开,而我的CSV文件分别为Semicolon分离(';'(。
我知道我可以使用文本编辑器将所有逗号更改为分号,但是CSV文件对于我的PC来说太大了(这就是我使用Google Cloud Platform的原因(。我如何使用云外壳来做到这一点?
这是我尝试过的一些示例,但没有成功:
注意:我使用gcloud sql connect mschiaff --user=root
登录,然后use test
指定数据库,其中" mschiaff"是云SQL实例。
-
LOAD DATA LOCAL INFILE 'gs://bd_storage/Matrícula_Ed_Superior_2016_UPLOAD.csv' INTO TABLE `matriculas` CHARACTER SET 'utf8' FIELDS TERMINATED BY ';';
错误:
2(hy000(:file'gs:/bd_storage/matrícula_ed_superior_2016_upload.csv'找不到(errcode:2" no oke file或目录"(
-
LOAD DATA INFILE 'gs://bd_storage/Matrícula_Ed_Superior_2016_UPLOAD.csv' INTO TABLE `matriculas` CHARACTER SET 'utf8' FIELDS TERMINATED BY ';';
错误:
错误1045(28000(:访问用户'root'@'%'(使用密码:是(
这是我的论文。
我有几个建议,您可以使用要么来实现此目标。
LOAD DATA LOCAL INFILE
不能用来指向一个存储桶,因为它希望该文件在本地存储。因此,您需要在用于连接到CloudSQL实例的机器文件系统上存储的CSV副本。例如,让我们假设您将从云外壳中执行此操作。
1(在云外壳中将CSV从储物桶复制到主目录:
cd ~
gsutil cp gs://YOU_BUCKET_NAME/file.csv .
1(从云外壳连接到CloudSQL实例:
gcloud sql connect CLOUDSQL_INSTANCE_NAME --user root
2(连接到正确的数据库:
use DATABASE_NAME;
3(将CSV导入数据库中的表格并指定一个半分界符(此命令中的文件位置将在云外壳文件系统中查找文件,因为这是您从那里连接的位置(:
LOAD DATA LOCAL INFILE '/home/USERNAME/file.csv' INTO TABLE table_name FIELDS TERMINATED BY ';';
您现在应该成功将CSV导入到数据库表中。
另外,与您无法打开文件以将定界符更改为逗号而不是分号的文件,您可以尝试将CSV驻留在Compute Engine实例中,然后从实例运行sed
命令。要用文件中的逗号替换所有分号。
您可以使用保险丝将存储桶安装到实例上。此说明在这里。
安装到实例后,您可以在CSV上运行以下命令,以用逗号替换分号。
$ sed -ie "s/;/,/g /path/to/mount/point/file.csv
用逗号替换了分号后,您就可以通过控制台导入CSV。
如果对您来说很有意义,亚马逊RDS支持加载数据本地填充,并添加以下连接参数(应将其包含在连接字符串中(
ENABLE_LOCAL_INFILE=1