我已经有一个 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
)来完成。
引用资料:
- 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>
是您上传的文件的路径名。
路径名以带引号的字符串形式给出。
引用资料:
- MYSQL 8.0 Reference Manual - 13.2.7 LOAD DATA Syntax
- Does any JDBC driver supports LOAD DATA INFILE sql command?
请注意,如果您从服务器的文件系统上传,上传可能会更快,但它需要“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/