¿Cuál es la diferencia entre Open Database() y New SQL Query() al acceder a las bases de datos?Hola,
Estoy tratando de desplegar una vista desde una base de datos Oracle.El nombre de la base de datos es ACTPROD.WORLD, el esquema es ABASE y la tabla es RPT_H25_3MONTHS_VIEW
Utilizando Base de datos -> Abrir tabla, JMP creó el siguiente script:
Open Database(
"DSN=ACTPROD.WORLD;UID=;PWD=;DBQ=ACTPROD.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;",
"SELECT * FROM \!"ABASE\!".\!"RPT_H25_3MONTHS_VIEW\!""
)
Esta secuencia de comandos abre una tabla de datos en <5 minutos, pero nos gustaría poder modificar la consulta mediante el Generador de consultas.
Utilizando Base de datos -> Generador de consultas, JMP creó el siguiente script.Esta secuencia de comandos tarda más de 3 horas en cargar la interfaz de usuario de Query Builder.
New SQL Query(
Version( 130 ),
Connection(
"ODBC:DSN=ACTPROD.WORLD;UID=;PWD;DBQ=ACTPROD.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;"
),
QueryName( "RPT_H25_3MONTHS_VIEW" ),
Select(
Column( "TEST_ID", "t1" ),
Column( "OBJECT", "t1" ),
Column( "BATCH", "t1" ),
Column( "WELL", "t1" ),
Column( "PLATE", "t1" ),
Column( "SEQUENCE", "t1" ),
Column( "%C(%)", "t1" ),
Column( "RATE", "t1" ),
Column( "RATE_UNIT", "t1" ),
Column( "REPLICATE", "t1" ),
Column( "SOIL", "t1" ),
Column( "SPECIES_ABBR", "t1" ),
Column(
"CREATED_DATE",
"t1",
Numeric Format( "m/d/y h:m:s", "0", "NO", "" )
)
),
From( Table( "RPT_H25_3MONTHS_VIEW", Schema( "ABASE" ), Alias( "t1" ) ) ),
Where(
In List(
Column( "TEST_ID", "t1" ),
{"H2.5-20190618", "H2.5-20190723", "H2.5-20190806"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
) & Is Not Null(
Column( "%C(%)", "t1" ),
UI( NullTest( Base( "Continuous" ) ) )
)
)
) << Modify¿Qué hacen de manera diferente los scripts Open Database y New SQL Query que causan tal discrepancia en el tiempo de ejecución?¿Hay alguna manera de acelerar la ejecución de Query Builder o de incorporar la interfaz de usuario de Query Builder en el script de Open Database?
Soy realmente nuevo en el trabajo con bases de datos, sería muy útil si pudiera ser detallado en sus respuestas para que pueda aprender.
¡Gracias!
Brian
Re: ¿Cuál es la diferencia entre Open Database() y New SQL Query() al acceder a las bases de datos?Hola Brian,
Lo siento, pero Query Builder no acepta archivos *.Creo que probablemente deba seguir la sugerencia de ajuste de Peter, o quedarse con Open Database o Execute SQL.
Brian
Re: ¿Cuál es la diferencia entre Open Database() y New SQL Query() al acceder a las bases de datos?Hola Brian,
Intenté eliminar la cláusula WHERE y usar Ejecutar fondo, pero el tiempo de ejecución sigue siendo de más de 3 horas.
New SQL Query(
Version( 130 ),
Connection(
"ODBC:DSN=ACTPROD.WORLD;UID=;PWD=;DBQ=ACTPROD.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;"
),
QueryName( "RPT_H25_3MONTHS_VIEW" ),
Select(
Column( "TEST_ID", "t1" ),
Column( "OBJECT", "t1" ),
Column( "BATCH", "t1" ),
Column( "WELL", "t1" ),
Column( "PLATE", "t1" ),
Column( "SEQUENCE", "t1" ),
Column( "%C(%)", "t1" ),
Column( "RATE", "t1" ),
Column( "RATE_UNIT", "t1" ),
Column( "REPLICATE", "t1" ),
Column( "SOIL", "t1" ),
Column( "SPECIES_ABBR", "t1" ),
Column( "CREATED_DATE", "t1", Numeric Format( "m/d/y h:m:s", "0", "NO", "" ) )
),
From( Table( "RPT_H25_3MONTHS_VIEW", Schema( "ABASE" ), Alias( "t1" ) ) )
) << Run Background()
¿Hay alguna manera de usar SELECT * con el script New SQL Query() Intenté lo siguiente pero obtengo un error de sintaxis.
New SQL Query(
Version( 130 ),
Connection(
"ODBC:DSN=ACTPROD.WORLD;UID=;PWD=;DBQ=ACTPROD.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;"
),
QueryName( "RPT_H25_3MONTHS_VIEW" ),
Select("*"),
From( Table( "RPT_H25_3MONTHS_VIEW", Schema( "ABASE" ), Alias( "t1" ) ) )
) << Run Background()
¡Gracias!
Brian
Re: ¿Cuál es la diferencia entre Open Database() y New SQL Query() al acceder a las bases de datos?Es posible que necesite uno o más índices en su tabla para consultas más eficientes con una cláusula WHERE.Sugeriría ajustar su consulta en una herramienta interactiva de Oracle como PL/SQL Developer, Toad, etc. Use EXPLAIN PLAN para ver qué le está costando más en su consulta e identificar dónde sería útil un índice.Una vez que su consulta esté ajustada, use OPEN DATABASE o EXECUTE SQL para ejecutarla.
Re: ¿Cuál es la diferencia entre Open Database() y New SQL Query() al acceder a las bases de datos?Hola Brian,
En su ejemplo, Open Database está haciendo un SELECCIONAR * y simplemente tomando todos los datos.Esto será mucho más rápido que ejecutar la cláusula WHERE que tiene en el script Query Builder.Además, está realizando una Modificación en el Generador de consultas para que aparezca la interfaz de usuario.Es posible que desee probar Run Background() allí en su lugar para ejecutar la consulta en un subproceso de fondo.Sin ver todos los datos, creo que eliminar la cláusula WHERE en la secuencia de comandos Query Builder y obtener todos los datos probablemente sería más rápido.
Brian Corcorán
Desarrollo JMP