HTTP-Anfrage abrufen (Datei-Download): Zeitüberschreitung des Vorgangs nach 60.000 MillisekundenVerehrte Gäste,
Ich möchte eine CSV-Datei von einem internen Server („http:....“) importieren.
(JMP 14.0, Windows)
Im Großen und Ganzen hat es ganz gut geklappt, allerdings wird die Datei immer größer.
Da ich die gesamte Datei scannen muss (um alle Datentypen richtig zu erfassen), dachte ich, es wäre eine gute Idee,
um die Datei zunächst in das $TEMP-Verzeichnis herunterzuladen und dann zu importieren.
Also habe ich den Dateidownload mit http-Anfrage implementiert.
Bei einer kleineren Datei hat es wieder gut funktioniert, aber bei den größeren bekomme ich eine Zeitüberschreitung,
und ich habe keine Möglichkeit gefunden, JMP anzuweisen, dieses Timeout zu ändern.
außer dass ich die Registry ändern könnte, siehe bitte @landon im folgenden Link:
https://community.jmp.com/message/225323
Ist das Herunterladen einer großen Datei von http:... per „http-Anfrage“ die richtige Methode?
Gibt es eine andere Methode zum Ändern des Timeouts, ohne die Registrierung zu ändern (mein Skript muss auch bei anderen Benutzern funktionieren)?
Ist das Herunterladen vor dem Importieren (mit vollständigem Scan) schneller als der direkte Import vom Server?
Danke und viele Grüße,
Georg
Betreff: HTTP-Anfrage abrufen (Datei-Download): Zeitüberschreitung des Vorgangs nach 60.000 MillisekundenDanke Craig für die schnelle Antwort,
Ihr Ansatz funktioniert im Allgemeinen und liefert ähnliche Ergebnisse.
In den resultierenden Datentabellen sind die Datentypen jedoch unterschiedlich (aufgrund des Dezimaltrennzeichens , / .).
Ihre Informationen helfen mir also, eine Arbeitsweise zu finden.
BR, Georg
Betreff: HTTP-Anfrage abrufen (Datei-Download): Zeitüberschreitung des Vorgangs nach 60.000 MillisekundenDie HTTP-Anfrage hat eine Timeout-Meldung.Der Standardwert beträgt 60 Sekunden.
Names Default To Here( 1 );
request = New HTTP Request(
Url( "https://community.jmp.com/html/assets/community-icons/community-icon-mastering.png" ),
Method( "GET" ),
Timeout( 120 )
);
bytes = request << Send;
img = Open( bytes, jpg );
obj = New Window( "Mastering JMP", img );
Betreff: HTTP-Anfrage abrufen (Datei-Download): Zeitüberschreitung des Vorgangs nach 60.000 MillisekundenIch bin mir ziemlich sicher, dass JMP die Datei nur einmal zum Öffnen herunterlädt („https...“, Typ), auch wenn die Datei mehr als einmal gescannt werden muss (wenn der Typ „Text“ für CSV-Dateien ist). Ich denke, dass die Datei für den Text-/CSV-Fall im Speicher gehalten wird, was die maximale Größe begrenzt. Bei anderen Typen kann die Datei in einer temporären Datei gespeichert werden (z. B. der Excel-Öffner). brauchen um beispielsweise von einer Diskettendatei aus zu arbeiten).
Daher ist es möglich, dass das Herunterladen von CSV in eine Festplattendatei langsamer ist (wahrscheinlich jedoch nicht wesentlich). Wenn die CSV-Datei fast die Hälfte Ihrer Speichergröße erreicht (8 GB Dateigröße auf einem 16-GB-Computer ... die JMP-Tabelle benötigt auch Speicher!), kann es erforderlich sein, sie zuerst herunterzuladen.
Ich bin mir nicht sicher, wo die Zeitüberschreitung auftritt, aber ein alternativer Ansatz zum Herunterladen könnte so aussehen:
// here's a way to download a URL to a local file
filename = Save Text File(
"$temp/sample.csv", // extension is saved as CSV
Load Text File(
"https://data.cityofnewyork.us/api/views/kku6-nxdu/rows.csv?accessType=DOWNLOAD",
blob
)
);
dt1 = Open( filename ); // "text" not needed because extension is CSV
// here's a way to open directly
dt2 = Open(
"https://data.cityofnewyork.us/api/views/kku6-nxdu/rows.csv?accessType=DOWNLOAD",
"text" // here the extension might or might not be CSV, use "text" to make sure
);
// verify both ways make the same table
compare = dt1 << Compare Data Tables(
Compare with( dt2 ),
Compare Data,
Show Difference Summary( 0 ),
Show Difference Plot( 0 )
);
If( compare << Are Data Different,
Write( "\!nwhy are they different?" ),
Write( "\!nResults identical" )
);
Show( N Rows( dt1 ), N Cols( dt1 ), N Rows( dt2 ), N Cols( dt2 ) );
// clean up
compare << closewindow;
Close( dt1, "nosave" );
Close( dt2, "nosave" );
@bryan_boone