¡Hola!
Tengo una tabla de datos que se produjo mediante un script que ejecuta dos consultas separadas (que proporcionan datos de dos fuentes diferentes) que luego se combinan para formar una tabla de datos. Mi pregunta es con respecto a la actualización diaria de esta tabla de manera que no sea necesario volver a ejecutar el script desde el principio y se puedan conservar las limpiezas/ajustes/nuevas columnas. Veo que en la barra lateral hay "actualización desde la base de datos" y "actualización desde la base de datos2". Puedo ejecutar uno de ellos, pero eliminará las columnas que no están incluidas en esa fuente (es decir, si ejecuto "actualizar desde la base de datos", que es para la primera consulta, eliminará las columnas TVC, VI, AC y DC de la consulta 2 junto con otras columnas de cálculo/entrada manual que agrego a la tabla después de fusionarlas en el script original).
Intenté copiar los dos scripts de actualización juntos en un script (ver más abajo) pero tengo el problema de que cuando ejecuta el primero, intenta eliminar las columnas antes de ejecutar el segundo. No estoy seguro de si el mejor enfoque sería combinar las tablas y luego intentar actualizarlas o si hay algo más simple (tal vez una forma de actualizarlo sin eliminar datos que no provienen de esa fuente). Eliminé la información de conexión y cambié los nombres en el código siguiente, pero espero que esto ayude a dar una idea. ¿Alguien ha tenido que lidiar con un problema similar antes? ¡Gracias!
New SQL Query(
Version( 130 ),
Connection(
""
),
QueryName( "query1" ),
Select(
Column( "Assay", "t1" ),
Column( "Experiment", "t1" ),
Column( "Date", "t1", Numeric Format( "m/d/y h:m:s", "0", "NO", "" ) ),
Column( "G", "t1" ),
Column( "L", "t1" ),
Column( "N", "t1" ),
Column( "K", "t1" ),
Column( "C", "t1" ),
Column( "H", "t1" ),
Column( "O", "t1" ),
Column( "C", "t1" ),
),
From( Table( "Runs", Schema( "schema1" ), Alias( "t1" ) ) ),
Where(
Contains(
Column( "Experiment", "t1" ),
"E001",
UI(
Contains(
Base(
"Categorical",
Prompt(
"Experiment ID:",
Character,
PromptName( "t1.Experiment_1" )
)
)
)
)
) & Does Not Contain(
Column( "Assay, "t1" ),
"xxx",
UI(
Contains(
Base(
"Categorical",
Prompt(
"Add a filter for names (optional) or put xxx:",
Character,
PromptName( "t1.AssayId_1" )
)
)
)
)
) & GE(
Column(
"Date",
"t1",
Numeric Format( "m/d/y h:m:s", "0", "NO", "" )
),
0,
UI(
Comparison(
Base(
"Continuous",
Prompt(
"Date range:",
Character,
PromptName( "t1.RunDate_1" )
)
)
)
)
)
)
) << Run Foreground( UpdateTable( Current Data Table() ) );
New SQL Query(
Version( 130 ),
Connection(
""
),
QueryName( "query2" ),
Select(
Column( "Assay", "t2" ),
Column( "Experiment", "t2" ),
Column( "Date", "t2", Numeric Format( "m/d/y h:m:s", "0", "NO", "" ) ),
Column( "TVC", "t2" ),
Column( "VI", "t2" ),
Column( "AC", "t2" ),
Column( "AD", "t2" )
),
From( Table( "Runs", Schema( "schema2" ), Alias( "t2" ) ) ),
Where(
Contains(
Column( "Experiment", "t2" ),
"E001",
UI(
Contains(
Base(
"Categorical",
Prompt(
"Experiment ID:",
Character,
PromptName( "t2.Experiment_1" )
)
)
)
)
) & Does Not Contain(
Column( "Assay", "t2" ),
"xxx",
UI(
Contains(
Base(
"Categorical",
Prompt(
"Add a filter (optional) or put xxx:",
Character,
PromptName( "t2.AssayId_1" )
)
)
)
)
) & GE(
Column(
"Date",
"t2",
Numeric Format( "m/d/y h:m:s", "0", "NO", "" )
),
0,
UI(
Comparison(
Base(
"Continuous",
Prompt(
"Date range:",
Character,
PromptName( "t2.RunDate_1" )
)
)
)
)
)
)
) << Run Foreground( UpdateTable( Current Data Table() ) )
Estoy bastante seguro de que lo que está viendo es que si agrega columnas a una tabla que se creó a partir de una nueva consulta SQL, obtendrá una nueva tabla de datos cuando realice una actualización desde la base de datos. Es decir, no puede reutilizar la tabla importada ya que le cambió los metadatos (columnas agregadas).
Creo que lo que puedes hacer es importar tus 2 tablas desde las bases de datos usando Archivo->Base de datos->Creador de consultas (no guardes las tablas de datos). Luego ejecuta Tablas->JMP Query Builder para combinar las 2 tablas. . Se verá algo así como:
New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables(
["Big Class Families" =>
"Source(New SQL Query(
Connection(
""
),
QueryName( \!"Big Class Families\!" ),
Select,
From( Table( \!"Big Class Families\!", Schema( \!"SQBTest\!" ), Alias( \!"t1\!" ) ) )
) << Run Foreground)",
"g4_bigclass" =>
"Source(New SQL Query(
Connection(""),
QueryName( \!"g4_bigclass\!" ),
Select,
From( Table( \!"g4_bigclass\!", Schema( \!"SQBTest\!" ), Alias( \!"t1\!" ) ) )
) << Run Foreground)"
]
),
QueryName( "SQLQuery3" ),
Select(
Column( "picture", "t1" ),
Column( "name", "t1" ),
Column( "age", "t1" ),
Column( "sex", "t1" ),
Column( "height", "t1" ),
Column( "weight", "t1" ),
Column( "sibling ages", "t1" ),
Column( "sports", "t1" ),
Column( "countries visited", "t1" ),
Column( "family cars", "t1" ),
Column( "reported illnesses", "t1" ),
Column( "age vector", "t1" ),
Column( "pet", "t1" ),
Column( "name", "t2", Alias( "name 2" ) ),
Column( "age", "t2", Alias( "age 2" ) ),
Column( "sex", "t2", Alias( "sex 2" ) ),
Column( "height", "t2", Alias( "height 2" ) ),
Column( "weight", "t2", Alias( "weight 2" ) )
),
From(
Table( "Big Class Families", Alias( "t1" ) ),
Table(
"g4_bigclass",
Alias( "t2" ),
Join(
Type( Left Outer ),
EQ( Column( "name", "t2" ), Column( "name", "t1" ) ) &
EQ( Column( "age", "t2" ), Column( "age", "t1" ) ) &
EQ( Column( "sex", "t2" ), Column( "sex", "t1" ) ) &
EQ( Column( "height", "t2" ), Column( "height", "t1" ) ) &
EQ( Column( "weight", "t2" ), Column( "weight", "t1" ) )
)
)
)
) << Run;
Lo que sucede es que JMP Query Builder extrae el script fuente de cada tabla no guardada para crear su script. Lo que eso significa es que cada vez que se ejecuta el script Nueva consulta SQL, traerá nuevos datos de las fuentes de datos en cada una de las tablas dependientes.