java - 当 CSV 文件在谷歌存储桶中并且 mysql 5.7.17 安装在云中的 RHEL 机器上时,如何使用 mysql 的加载数据 infile?

标签 java mysql google-cloud-platform google-cloud-storage load-data-infile

我已经有一个 j2ee 应用程序,它使用 MySql 的加载数据 Infile 命令导入保存在谷歌云平台 RHEL 机器上 MySql 5.7.17 服务器上某个位置的 CSV 文件。 现在有一些要求,因此我们必须停止将 CSV 放在 RHEL 机器上,而是将它们保存在谷歌存储桶中,并从那里访问它们以执行“加载数据文件”命令。如果我们使用 CSV 的 URL,例如https://www.googleapis.com/storage/v1/b/ .csv 那怎么办呢?我必须在我的 Java 应用程序中完成所有这些工作。我能够在 java 中读取 CSV 文件,但是应该在加载数据 infile 命令中设置什么文件路径?请注意,MySql 设置不是 google 提供的实例...

//Below code is for only reading files from bucket:


String PROJECT_ID = "tttttt-179995";
String PATH_TO_JSON_KEY = "E:/<SOMETHING>.json";
String BUCKET_NAME = "<SOMEWHERE>_uat";
String OBJECT_NAME = "<SOME>.csv";

StorageOptions options=null;
try {
    options = StorageOptions.newBuilder().setProjectId(PROJECT_ID).setCredentials(GoogleCredentials.fromStream(new FileInputStream(PATH_TO_JSON_KEY))).build();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Storage storage = options.getService();
Blob blob = storage.get(BUCKET_NAME, OBJECT_NAME);

String fileContent = new String(blob.getContent());
System.out.println(fileContent);

Page<Blob> blobs = storage.list(BUCKET_NAME, BlobListOption.currentDirectory(),BlobListOption.prefix(OBJECT_NAME));

    for (Blob b : blobs.iterateAll()) {
        System.out.println(b.getSelfLink());

    }

最佳答案

If we use the URL of the CSVs e.g. https://www.googleapis.com/storage/v1/b/.csv then how can this be done ?

不知道。我不会那样做。

这是我的做法:

第一步。

从存储桶中读取 CVS 文件并将其作为文件存储在本地文件系统中。这可以通过 Java 使用 Google API 的 Java 绑定(bind)来完成,也可以通过从 Java 运行外部命令(例如 gsutil )来完成。

引用资料:


第 2 步。

使用JDBC 运行LOAD DATA LOCAL INFILE '<pathname>' ...哪里<pathname>是您上传的文件的路径名。

路径名以带引号的字符串形式给出。

引用资料:

请注意,如果您从服务器的文件系统上传,上传可能会更快,但它需要“root”数据库登录,并且您在将文件导入服务器的文件系统时遇到问题。


... but what file path should be set in the load data infile command ?

假设您正在谈论一个 LOAD DATA LOCAL INFILE , 您可以使用绝对路径名或相对路径名。相对路径名将相对于(应用程序)JVM 的当前目录进行解析;即应用程序启动时的当前目录。

关于java - 当 CSV 文件在谷歌存储桶中并且 mysql 5.7.17 安装在云中的 RHEL 机器上时,如何使用 mysql 的加载数据 infile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57306884/

相关文章:

java - 集群与复制

java - 使用 Android 应用程序搜索 Google 电子表格

java - 奥利奥后通知背景颜色

sql - Big Query Tables 中列的默认值

java - TreeMap 之后的排序技术?

mysql - 如何将PHP7与Mysql结合使用?

mysql - Galera 集群问题

mysql - 升级到 MySQL 8。从服务器收到字段 '255' 的未知字符集索引。异常(exception)

firebase - 无法将安全规则条件基于 Firebase 中的资源数据

python - 为什么 Google Speech Recognition API 只返回前 2-3 秒的音频转换文本