Ricezione richiesta HTTP (download file): operazione scaduta dopo 60000 millisecondiCarissimi,
Voglio importare un file CSV da un server interno ("http:....").
(JMP 14.0, Windows)
In genere ha funzionato abbastanza bene, ma il file diventa sempre più grande.
Dato che devo scansionare l'intero file (per ottenere tutti i tipi di dati corretti), ho pensato che sarebbe stata una buona idea,
scaricare prima il file nella directory $TEMP e poi importarlo.
Quindi ho implementato il download del file con richiesta http.
Per un file più piccolo ha funzionato di nuovo bene, ma per quelli più grandi ho un timeout,
e non ho trovato alcuna opzione per dire a JMP di modificare il timeout,
tranne che potrei cambiare il registro, vedi @atterrare su nel seguente collegamento:
https://community.jmp.com/message/225323
Scaricare un file di grandi dimensioni da http:... tramite "richiesta http" è il metodo giusto?
Esiste un altro metodo per modificare il timeout senza modificare il registro (il mio script deve funzionare anche con altri utenti)?
Il download prima dell'importazione (utilizzando la scansione completa) è più veloce dell'importazione diretta dal server?
Grazie e distinti saluti,
Georg
Ri: Ricezione richiesta HTTP (download file): operazione scaduta dopo 60000 millisecondiGrazie Craig per la rapida risposta,
il tuo approccio generalmente funziona e dà risultati simili,
ma nelle tabelle dati risultanti i tipi di dati sono diversi (a causa del separatore decimale , / .).
Quindi le tue informazioni mi aiutano a trovare un modo per lavorare.
BR, Georg
Ri: Ricezione richiesta HTTP (download file): operazione scaduta dopo 60000 millisecondiLa richiesta HTTP ha un messaggio di timeout.Il valore predefinito è 60 secondi.
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 );
Ri: Ricezione richiesta HTTP (download file): operazione scaduta dopo 60000 millisecondiSono abbastanza sicuro che JMP scarichi il file solo una volta per open("https...", type), anche se il file deve essere scansionato più di una volta (quando type è "text" per i file CSV). Penso che il file sia mantenuto in memoria per il caso text/csv, il che limiterà la dimensione massima; per altri tipi, il file può essere salvato in un file temporaneo (l'apertura di Excel potrebbe Bisogno per lavorare da un file su disco, ad esempio).
Quindi è possibile che il download di CSV su un file su disco possa essere più lento (probabilmente non in modo notevole però). Se il file CSV si avvicina alla metà della dimensione della memoria (dimensione del file da 8 GB su una macchina da 16 GB... anche la tabella JMP avrà bisogno di memoria!) potrebbe essere necessario scaricarlo prima.
Non sono sicuro di dove si verifichi il timeout, ma un approccio alternativo al download potrebbe assomigliare a questo:
// 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