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

How to use load data infile of mysql, when the CSV files are in google bucket and the mysql 5.7.17 is installed on an RHEL machine in cloud?

我已经有一个 j2ee 应用程序,它使用 MySql 在 Google 云平台的 RHEL 机器上的 MySql 5.7.17 服务器上的某个位置导入 CSV 文件的加载数据 Infile 命令。 现在有一些要求,因此我们必须停止将 CSV 放在 RHEL 机器上,而是将它们保存在 google 存储桶中,并从那里访问它们以供 "Load data infile" 命令使用。如果我们使用 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 ?

不知道。我不会那样做的。

我会这样做:

第 1 步

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

参考文献:

  • Download files and folders from Google Storage bucket to a local folder
  • How to download a file from Google Cloud Storage with Java?

第 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 的当前目录进行解析;即应用程序启动时的当前目录。