CSV使用Cloud Shell从云存储中导入云SQL



我在云存储实例(bd_storage(上有一个CSV文件,并且需要在云SQL数据库(test(中对已经创建的表(矩阵(进行导入。问题是默认情况下的UI导入选项由Comma(','(分开,而我的CSV文件分别为Semicolon分离(';'(。

我知道我可以使用文本编辑器将所有逗号更改为分号,但是CSV文件对于我的PC来说太大了(这就是我使用Google Cloud Platform的原因(。我如何使用云外壳来做到这一点?

这是我尝试过的一些示例,但没有成功:

注意:我使用gcloud sql connect mschiaff --user=root登录,然后use test指定数据库,其中" mschiaff"是云SQL实例。

  1. 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或目录"(

  2. 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

相关内容

  • 没有找到相关文章

最新更新