Qual è la differenza tra Open Database() e New SQL Query() quando si accede ai database?CIAO,
Sto cercando di estrarre una vista da un database Oracle.Il nome del database è ACTPROD.WORLD, lo schema è ABASE e la tabella è RPT_H25_3MONTHS_VIEW
Utilizzando Database -> Apri tabella, JMP ha creato il seguente 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\!""
)
Questo script apre una tabella di dati in meno di 5 minuti, ma vorremmo essere in grado di modificare la query utilizzando il Costruttore di query.
Utilizzando Database -> Generatore di query, JMP ha creato il seguente script.Questo script impiega più di 3 ore solo per caricare l'interfaccia utente di 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" ) ) )
)
)
) << ModifyChe cosa fanno in modo diverso gli script Open Database e New SQL Query che causano una tale discrepanza nel tempo di esecuzione?Esiste un modo per velocizzare l'esecuzione di Query Builder o incorporare l'interfaccia utente di Query Builder nello script Open Database?
Sono davvero nuovo nel lavorare con i database, sarebbe molto utile se potessi essere dettagliato nelle tue risposte in modo che io possa imparare.
Grazie!
Brian
Re: Qual è la differenza tra Open Database() e New SQL Query() quando si accede ai database?Ciao Brian,
Mi dispiace, ma Query Builder non accetta file *.Penso che probabilmente dovrai seguire il suggerimento di messa a punto di Peter o attenersi a Open Database o Execute SQL.
Brian
Re: Qual è la differenza tra Open Database() e New SQL Query() quando si accede ai database?Ciao Brian,
Ho provato a rimuovere la clausola WHERE e a utilizzare Esegui in background, ma il tempo di esecuzione è ancora di oltre 3 ore
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()
C'è un modo per utilizzare SELECT * con lo script New SQL Query() Ho provato quanto segue ma ricevo un errore di sintassi.
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()
Grazie!
Brian
Re: Qual è la differenza tra Open Database() e New SQL Query() quando si accede ai database?Potresti aver bisogno di uno o più indici sulla tua tabella per eseguire query più efficienti con una clausola WHERE.Suggerirei di ottimizzare la tua query in uno strumento Oracle interattivo come PL/SQL Developer, Toad, ecc. Usa EXPLAIN PLAN per vedere cosa ti costa di più nella tua query e per identificare dove un indice sarebbe utile.Una volta regolata la query, utilizzare OPEN DATABASE o EXECUTE SQL per eseguirla.
Re: Qual è la differenza tra Open Database() e New SQL Query() quando si accede ai database?Ciao Brian,
Nel tuo esempio, Open Database sta eseguendo un SELECT * e sta semplicemente prendendo tutti i dati.Questo sarà molto più veloce dell'esecuzione della clausola WHERE che hai nello script Query Builder.Inoltre, stai eseguendo una modifica sul generatore di query per visualizzare l'interfaccia utente.Potresti provare Run Background() lì invece di eseguire la query su un thread in background.Senza vedere tutti i dati, penso che la rimozione della clausola WHERE sullo script Query Builder e l'acquisizione di tutti i dati sarebbe probabilmente più veloce.
Brian Corcoran
Sviluppo JMP