Wie Verwenden von Lastdaten infile von mysql, wenn die CSV-Dateien in Google Eimern sind und die MySQL 5.7.17 auf einer RHEL Maschine in Cloud installiert?

Keshri Nandan:

Ich habe bereits eine J2EE - Anwendung, die die Einfuhr von CSV - Dateien auf einer Stelle auf dem MySql 5.7.17 - Server auf einer RHEL Maschine in Google Cloud - Plattform mit dem Befehl MySQLs Daten lädt Infile gehalten. Jetzt gibt es einige Anforderung aufgrund der wir auf der RHEL Maschine setzen die CSV zu stoppen und stattdessen halten sie in google Eimer und den Zugang von dort für die „Daten laden infile“ -Befehl. Wenn wir die URL der CSVs verwenden zB https://www.googleapis.com/storage/v1/b/ .csv dann wie kann dies geschehen? Und ich habe dies zu tun alles in meiner Java - Anwendung. Ich bin in der Lage , die CSV - Dateien in Java zu lesen, aber welcher Dateipfad sollte in den Ladedaten infile Befehl gesetzt werden? Bitte beachten Sie, dass der MySql Setup nicht die durch den Google als Instanz vorgesehen ist ...

//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());

    }
Stephen C:

Wenn wir die URL der CSVs verwenden zB https://www.googleapis.com/storage/v1/b/.csv dann wie kann dies geschehen?

Weiß nicht. Ich würde es auf diese Weise nicht tun.

Hier ist, wie ich es tun würde:

Schritt 1.

Lesen Sie die CVS - Datei aus dem Eimer und speichern Sie es als eine Datei in dem lokalen Dateisystem. Dies würde von Java unter Verwendung von Java - Anbindung für den Google APIs durchgeführt werden, oder es könnte durch Ausführen ein externes Kommandos (zB getan werden gsutil) aus Java.

Verweise:


Schritt 2.

Verwenden JDBC zu laufen LOAD DATA LOCAL INFILE '<pathname>'... wo <pathname>der Pfadname der Datei ist , dass Sie hochgeladen haben .

Der Pfadname wird als Zeichenfolge in Anführungszeichen angegeben.

Verweise:

Beachten Sie, dass der Upload vermutlich schneller wäre, wenn Sie aus dem Dateisystem des Servers hochladen, aber es erfordert „root“ Datenbank-Login, und Sie haben das Problem, die Datei in das Dateisystem des Servers zu bekommen.


... aber welcher Dateipfad sollte in den Ladedaten infile Befehl gesetzt werden?

Vorausgesetzt , dass Sie über ein sprechen LOAD DATA LOCAL INFILE, können Sie entweder einen absoluten oder relativen Pfadnamen verwenden. Relative Pfadnamen werden das (Anwendung) JVM aktuellen Verzeichnis aufgelöst relativ werden; dh das aktuelle Verzeichnis , wenn die Anwendung gestartet wurde.

Ich denke du magst

Origin http://43.154.161.224:23101/article/api/json?id=239564&siteId=1
Empfohlen
Rangfolge