Scripting y archivos muy grandesTengo un script que importa muchos archivos y los concatena.
Este archivo puede tener> 41 millones de filas y estar en los 10 de Gigabits (tengo 100 GB de espacio libre y 128 GB de memoria: usando JMP16.2)
Luego tengo scripts para seleccionar filas y columnas y demás.Mi pregunta realmente no se trata de secuencias de comandos en sí, pero ¿por qué si ejecuto cada secuencia de comandos en orden en lugar de tener una secuencia de comandos que incluye todas las secuencias de comandos, JMP "se bloquea".
P.ej, Todo parece funcionar en el sentido de que si ejecuto cada JSL en orden, funciona
1. Concat_files.JSL
2. Change_Test_Instance_Name.JSL
3. Resumen_Prueba_Instancia.JSL
contra
un script que ejecuta cada uno de los anteriores para mí...
P.ej,
Ejecutar_todos_los_scripts.JSL
include("ADDIN_HOME(mis_scripts)\Concat_files.jsl");
include(("ADDIN_HOME(my_scripts)\Change_Test_Instance_Name.JSL");
include("ADDIN_HOME(my_scripts)\Summarize_Test_Instance.JSL.jsl");
Esto simplemente cuelga mi sistema....Tengo el registro abierto y me doy cuenta de que está atascado en el siguiente script (el registro muestra una instrucción show como show("Ingresando el nombre de Change_Test_Instance");
He intentado usar esperar (); declaraciones entre cada include (y dentro de cada uno de los scripts), pero eso todavía no funciona.¿Hay algo más que deba probar?
Automatización y secuencias de comandosRe: Scripting y archivos muy grandesPerdón por la respuesta tardía (ocupado con el trabajo).
Gracias por las ideas.Nunca he usado el depurador.
También miraré la idea del espacio de nombres.También descubrí que si tengo el DT principal abierto (se ha concatenado) y luego ejecuto el script con la declaración de inclusión, también se ejecuta tan rápido como cuando ejecuto el script tal como está (sin incluir).Entonces, algo sobre la tabla de datos principal que está en la memoria por un tiempo en lugar de concatenar y luego ejecutar inmediatamente el script de inclusión.
Re: Scripting y archivos muy grandesEs posible que pueda ejecutar el código con el depurador/perfilador JSL, o simplemente instrumentarlo con time_start..time_end más detallado como lo está haciendo. Supongo que el código tiene un comportamiento N ^ 2 (tiempo 4X para duplicar los datos) por alguna razón con las inclusiones. Tal vez un problema de espacio de nombres con algún nombre que colisiona con un nombre en la tabla de datos.
Un lugar que podría ser malo es
dt_summary << select where( Contains( Test_names, :Test_Instance ) );
pero es difícil saberlo sin cronometrarlo. Si Test_names pudiera tener 1e6 elementos y dt_summary pudiera tener 1e6 filas, en promedio se examinarían 500.000 test_names en cada una de las 1e6 filas. O tal vez solo hay 10 o más y no es un problema. Es posible que desee reescribirlo, aproximadamente así
// untested. combine two loops and use an aa rather than a list for lookup
Test_names = AssociativeArray();
For Each Row(
If( ( Contains( dt_summary:Test_Instance, "CHAR_char" )),
Test_names[ dt_summary:Test_Instance ] = 1
)
);
dt_summary << select where( Test_names<<CONTAINS></CONTAINS>
La matriz asociativa será mucho más rápida si la lista tiene varios cientos de elementos.
Si desea utilizar el generador de perfiles JSL, no realice la ejecución de 3 horas para su primera experiencia de creación de perfiles. Pruebe un programa pequeño, usando un incluir, y asegúrese de jugar con estos botones:
Something in the toolboxSomething in the toolboxAlgo en la caja de herramientas
A new window opens, the clock is for timing JSL.A new window opens, the clock is for timing JSL.Se abre una nueva ventana, el reloj es para cronometrar JSL.
The tooltip for the icon says "run profiler".The tooltip for the icon says "run profiler".La información sobre herramientas para el icono dice "ejecutar perfilador".
es posible que pueda usar el botón azul de pausa o esperar a que termine, luego examine los puntos calientes:
tabs for sourcestabs for sourcespestañas para fuentes
tabs for sourcestabs for sources pestañas para fuentes
Re: Scripting y archivos muy grandesParece que pegué el mismo registro...
Aquí es cuando Correr solo...200 s o alrededor de 3,33 minutos
N Rows(dt) = 41929065;
"In Reduce_Test_Instance";
As Date(Today()) = 15Feb2022:10:11:57;
"Reducing Test Instances Ended";
As Date(Today()) = 15Feb2022:10:15:17;
start_time - As Date(Today()) = -200;
Re: Scripting y archivos muy grandesDejé que el script se ejecutara para ver si estaba atascado (parece que se estaba ejecutando, pero toma horas, no minutos cuando se ejecuta dentro de un script).
Solo tengo declaraciones show en el registro.
Aquí está la salida de registro para ejecutar scripts dentro de un script.(El "cambio a una instancia de prueba" toma 3,65 horas frente a 3,65 minutos si ejecuto el mismo script en el mismo archivo).La CPU estaba ejecutando 12 núcleos (CPU0 a CPU11) alrededor del 20 % durante las 3,65 horas
Aquí están los registros y un fragmento del JSL a continuación.
N Items(files_open) = 12;
"Files are Concatenated ";
As Date(Today()) = 14Feb2022:13:00:32;
start_time - As Date(Today()) = -492;
"Saving Digital_shmoo_all";
As Date(Today()) = 14Feb2022:13:00:54;
"Done Saving Digital_shmoo_all";
As Date(Today()) = 14Feb2022:13:01:24;
"Changing to one test instance";
N Rows(dt) = 41929065;
"In Reduce_Test_Instance";
As Date(Today()) = 14Feb2022:13:01:39;
"Reducing Test Instances Ended";
As Date(Today()) = 14Feb2022:16:41:13;
start_time - As Date(Today()) = -13174;
"Transposing";
"File has been transposed";
As Date(Today()) = 14Feb2022:16:42:23;
start_time - As Date(Today()) = -69;
Si ejecuto el script de instancia de prueba de reducción solo con el mismo archivo grande, aquí está el registro
As Date(Today()) = 14Feb2022:13:01:24;
"Changing to one test instance";
N Rows(dt) = 41929065;
"In Reduce_Test_Instance";
As Date(Today()) = 14Feb2022:13:01:39;
"Reducing Test Instances Ended";
As Date(Today()) = 14Feb2022:16:41:13;
start_time - As Date(Today()) = -13174;
"Transposing";
"File has been transposed";
As Date(Today()) = 14Feb2022:16:42:23;
start_time - As Date(Today()) = -69;
Lo básico de este script es encontrar nombres que comiencen con "Char_Char" y cambiarlos para que no tengan "Char_Char"; Hacer esto creando una tabla de resumen, seleccionando las filas en la tabla de resumen que tienen "Char_Char", obteniendo las filas en la tabla principal que están seleccionadas y luego cambiando el nombre en la tabla principal.Aquí hay un recorte del guión lento.
One_Test_Instance.JSL
dt = Current Data Table();
Names Default To Here( 1 );
Show( N Rows( dt ), "In Reduce_Test_Instance" );
Show( As Date( Today() ) );
start_time = As Date( Today() );
dt << clear select;
dt << clear column selection;
Wait();
Test_names = {};
dt << Summary(
Group( :Test_Instance ),
Freq( "None" ),
Weight( "None" ),
output table name( "Summary_of_Table" )
);
dt_summary = Current Data Table();
Wait();
For Each Row( Insert Into( Test_names, dt_summary:Test_Instance ) );
Wait();
For( i = N Items( Test_names ), i > 0, i--,
If( (!Contains( Test_names[i], "CHAR_char" )),
Remove From( Test_names, i )
)
);
dt_summary << select where( Contains( Test_names, :Test_Instance ) );
Wait();
aa = dt << get selected rows; //Get selected rows in main table
Wait();
Close( dt_summary, nosave );
If( N Rows( aa ) > 0,
(dt:Test_instance[aa]) = "CHAR_char_meas_TI";
(dt:Setup[aa]) = "meas_TI"; //Change name in main table
);
dt << clear select;
dt << clear column selection;
Wait();Re: Scripting y archivos muy grandes¿Está abriendo/cerrando ventanas de informes, quizás 100 o 1000? No abrir las ventanas en absoluto podría ayudar, mucho. (Posiblemente, el sistema operativo no tiene la oportunidad de limpiar algo).
¿Está imprimiendo miles de líneas en el registro JMP 16? Hay una preferencia para usar el formato de registro anterior que podría ayudar.
El administrador de tareas podría proporcionar alguna información. Observe los identificadores y los objetos GDI, así como los culpables obvios de la memoria y el disco.
O verifique la luz del disco en la parte frontal de la computadora, si tiene una. No parece que debas estar paginando, ¡esa es una buena computadora!
Me gustaría saber qué estaba pasando cuando obtuviste una respuesta; si nada de lo anterior ayuda, el soporte técnico también puede ayudar.