Pregunta sobre las referencias de la mesa (de Russel)
Esta pregunta surgió en el hilo sobre " Re: Sesión práctica del primer trimestre de 2022: principiantes", y me gustaría que otros también se unieran a la discusión, así que lo puse en el foro de discusión.
Pregunta sobre las referencias de tablas que mostró hoy: si procesa varias tablas secuencialmente como parte de un script, ¿itera las referencias de tablas hasta el infinito (dt1, dt2, dt3,...) o existe una solución más inteligente?
Antecedentes: con frecuencia manipulo tablas (uno, concateno, divido, etc.) y, a veces, tengo bastantes tablas que abro, proceso y cierro secuencialmente antes de pasar a la siguiente tabla en el mismo script hasta que tengo la tabla final que quiero. .
Re: Pregunta sobre las referencias de la mesa (de Russel)@Georg ¡gracias!
Re: Pregunta sobre las referencias de la mesa (de Russel)Hola @Ressel , no contiene información sobre cómo crear/escribir SQL, sino más sobre cómo implementar consultas en JMP mediante una consulta SQL o de diferentes maneras. Entonces, mi forma habitual es utilizar una herramienta diferente para escribir ese SQL simple (como "seleccionar nombre de big_class donde edad > 15") y simplemente implementar ese script en JMP. Pero verá varios ejemplos de cómo puede verse esto.
Re: Pregunta sobre las referencias de la mesa (de Russel)Hola, sí, se cambiaron muchas configuraciones aunque no recuerdo exactamente cuáles. Quiero decir, esto estuvo en manos del Soporte Técnico de SAS, nuestro soporte de TI y el mío. Se dedicó una cantidad considerable de tiempo a intentar solucionar este problema. De poco sirvió. (Y recientemente comencé a tener un poco de conocimiento de los datos).
Además, no tengo ningún problema con obtener los datos cargándolos a través de un script y manipulando la tabla, aunque realmente parece ineficiente, dado que cada vez cargo 100.000 filas, elimino la mayoría y repito un paso similar con la siguiente tabla. . Me imagino que el generador de consultas probablemente haría el mismo trabajo, pero en una interfaz diferente. Por el momento tengo acceso a los datos que necesito, pero; dependiendo de la carga de trabajo; Puedo considerar la posibilidad de importar SQL simple a JMP. (No sabía que era posible).
El siguiente enlace contiene información sobre cómo crear SQL para usar con/en JMP.
¡Gracias!
Re: Pregunta sobre las referencias de la mesa (de Russel)Por cierto, tal vez quieras echar un vistazo a esta presentación, se trata de obtener datos de la base de datos con JMP:
https://community.jmp.com/t5/Discovery-Summit-Europe-2021/Strategies-and-Examples-for-Data-Acquisition-From-Distributed/ta-p/349225
Re: Pregunta sobre las referencias de la mesa (de Russel)¿Intentó cambiar la configuración en Preferencias de Query Builder? Eso puede cambiar mucho; de forma predeterminada, se transfieren muchos datos para cada cambio (todos los niveles de la base de datos, vistas previas, etc.).
Además, una vez que haya realizado la consulta a través de la GUI, puede convertirla en SQL personalizado para crear SQL simple. Luego se procesará únicamente en la base de datos y es mucho más rápido.
Mi método más conocido es siempre hacer cosas pesadas en la base de datos, pero esto siempre depende del entorno. Existen otras herramientas que le permiten definir la consulta en la base de datos, que puede usar en JMP (por ejemplo, SQL Query Builder, dependiendo de su proveedor de base de datos).
También puede pedirle a su departamento de TI (por ejemplo, administrador de base de datos) que lo ayude con ciertas consultas que se necesitan regularmente e importar el SQL simple a JMP.
Obtener los datos de la base de datos en el formato correcto es crucial y finalmente vale la pena analizar el proceso completo.
Re: Pregunta sobre las referencias de la mesa (de Russel)Intenté usar el generador de consultas antes. Era increíblemente lento y fallaba constantemente. Entonces me comuniqué con el soporte técnico de SAS, pero no pudieron resolver el problema. Como resultado, me limité a manejar tablas individuales en un script, que; dado el pésimo desempeño del generador de consultas; Es mucho más conveniente y eficiente. Puede ser que esto se deba a que las tablas que estoy cargando tienen más de 100 000 filas; esa fue al menos la conclusión del soporte técnico. Por desgracia, prácticamente no tengo a dónde recurrir más que a estas mesas "enormes".
Además, creo que necesito familiarizarme urgentemente con la depuración. Si bien logro "discutir" algunas líneas de código útiles, no estoy considerando la arquitectura, la estética o; como una cuestión de hecho; cómo crear un script que pueda depurarse. Desafortunadamente, todavía es un concepto extraño para mí.
Re: Pregunta sobre las referencias de la mesa (de Russel)También existe la posibilidad de realizar la manipulación de tablas en la base de datos (definición de consultas, por ejemplo, mediante Query Builder o en SQL nativo). Esto es ventajoso para grandes conjuntos de datos, ya que evita el tráfico y sobrecarga el servidor. Entonces también necesitas manejar menos tablas en JMP.
Re: Pregunta sobre las referencias de la mesa (de Russel)Los nombres descriptivos de identificadores/referencias le ayudarán a usted (o a otra persona que tenga que modificar su código) en algún momento. Esto también facilita la impresión de depuración, cuando puede usar Show(dt_batchid_loc); por ejemplo para ver el nombre de las tablas creadas.
También puede resultar útil utilizar la tabla de salida ("nombre de la tabla") al crear tablas. Esto le ayudará si (cuando) tenga que depurar el código. Si no hace esto (tiendo a saltarme esto y de vez en cuando me persigue), es mucho más fácil ver qué tabla está abierta desde un nombre como "BatchID_with_Loc" en comparación con "Resumen 3041 sin título por control de calidad". , Loc" o algo así.
Re: Pregunta sobre las referencias de la mesa (de Russel)Gracias por las respuestas. Un poco más sobre los antecedentes de lo que estoy trabajando.
Cargo las tablas desde nuestra implementación de Google Cloud Platform a través de ODBC. Estas tablas se actualizan periódicamente con datos de fabricación recientes. Por ejemplo, la primera tabla que cargo (la hago referencia como dt ) tiene ID de lote, nombres de parámetros para diferentes parámetros de control de calidad, resultados de medición y unidades de medida en columnas separadas. Lo divido por el nombre del parámetro de control de calidad (y hago referencia a la salida como dt2 , clausura dt ). Luego, por ejemplo, cargo otra tabla que cruza los ID de lote con las ubicaciones de fabricación (a las que me refiero como dt3 ). Después de eso puedo unirme dt2 con dt3 , creando dt4 y así sucesivamente, hasta que tenga una tabla que tenga toda la información que creo que necesito antes de continuar con cualquier análisis. En algunos scripts estoy procesando cerca de 10 tablas, todas referenciadas como dt(n) . Esto es lo que permite mi nivel de habilidad actual.
Tengo un plan a mediano plazo para utilizar dicho script para gráficos de control. Por el momento, solo evalúo visualmente las tendencias y envío capturas de pantalla o gráficos exportados en HTML a diferentes partes interesadas.
Lo que me llevo de esta conversación es el uso de referencias de tablas más descriptivas. ¿Estos también son lo que se conoce como manijas?
Re: Pregunta sobre las referencias de la mesa (de Russel)estoy de acuerdo con @martindemel , depende de dónde existen los archivos, el orden en que los procesa y lo que desea hacer con ellos. JSL tiene muchas funciones integradas fuera del registro mejorado que pueden ayudar. Por ejemplo, Archivos en el directorio le proporciona una lista de todos los archivos en un directorio. Seleccionar archivo le permite seleccionar interactivamente uno o más archivos de un directorio. Si bien el registro mejorado hace un buen trabajo al capturar operaciones interactivas, aún desea reemplazar las referencias de nombres de tablas codificadas con referencias variables a las tablas. @martindemel Mostró algo de esto usando dt = Abierto(... En la mayoría de los casos, una operación JSL que abre un archivo devolverá un identificador a la tabla de datos que se crea. Los identificadores de tablas de datos también se crean cuando envía un mensaje a una tabla con una operación del Mesas menú. Por ejemplo, si está creando un subconjunto, la sintaxis
subsetDT = dt << Subset(...
le permitirá capturar la referencia a la tabla recién creada. Las otras operaciones de la tabla funcionan de manera similar.
Re: Pregunta sobre las referencias de la mesa (de Russel)Hola @Ressel ,
Realmente depende de lo que quieras hacer finalmente. Si tiene, digamos, 100 tablas de datos que desea procesar de la misma manera y cerrarlas después, es posible que un bucle (para abrir, procesar, cerrar cada tabla) funcione mejor que abrir las 100 tablas y luego procesarlas una tras otra. el otro. Una razón es que no crea tantos identificadores de Windows, lo que podría provocar otro problema en el sistema.
En general, sería un poco más descriptivo en el nombre de la variable de la tabla, para entender mejor qué es, si tiene sentido. "dt" es principalmente para el truco sucio;)
También puede obtener todas las tablas de datos abiertos y luego recorrerlas usando
Get Data Table List();
Probablemente esto sería una decisión inteligente.
¿Cómo se sienten los demás al respecto?