Quelle est la différence entre Open Database() et New SQL Query() lors de l’accès aux bases de données ?Salut,
J'essaie d'extraire une vue d'une base de données Oracle.Le nom de la base de données est ACTPROD.WORLD, le schéma est ABASE et la table est RPT_H25_3MONTHS_VIEW.
À l'aide de Database -> Open Table, JMP a créé le script suivant :
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\!""
)
Ce script ouvre une table de données en <5min, mais nous aimerions pouvoir modifier la requête à l'aide du Query Builder.
À l'aide de Database -> Query Builder, JMP a créé le script suivant.Ce script prend plus de 3 heures juste pour charger l'interface utilisateur 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" ) ) )
)
)
) << ModifyQu'est-ce que les scripts Open Database et New SQL Query font différemment, ce qui provoque un tel écart dans le temps d'exécution ?Existe-t-il un moyen d'accélérer l'exécution de Query Builder ou d'incorporer l'interface utilisateur de Query Builder dans le script Open Database ?
Je suis vraiment nouveau dans le travail avec des bases de données, il serait très utile que vous puissiez être détaillé dans vos réponses afin que je puisse apprendre.
Merci!
Brian
Re : Quelle est la différence entre Open Database() et New SQL Query() lors de l'accès aux bases de données ?Salut Brian,
Je suis désolé, mais Query Builder n'accepte pas les fichiers *.Je pense que vous devrez probablement suivre la suggestion de réglage de Peter ou vous en tenir à Open Database ou Execute SQL.
Brian
Re : Quelle est la différence entre Open Database() et New SQL Query() lors de l'accès aux bases de données ?Salut Brian,
J'ai essayé de supprimer la clause WHERE et d'utiliser Run Background, mais le temps d'exécution est toujours de plus de 3 heures.
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()
Existe-t-il un moyen d'utiliser SELECT * avec le script New SQL Query(). J'ai essayé ce qui suit mais j'obtiens une erreur de syntaxe.
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()
Merci!
Brian
Re : Quelle est la différence entre Open Database() et New SQL Query() lors de l'accès aux bases de données ?Vous aurez peut-être besoin d'un ou plusieurs index sur votre table pour une requête plus efficace avec une clause WHERE.Je suggérerais de régler votre requête dans un outil Oracle interactif tel que PL/SQL Developer, Toad, etc. Utilisez EXPLAIN PLAN pour voir ce qui vous coûte le plus dans votre requête et pour identifier où un index serait utile.Une fois votre requête réglée, utilisez OPEN DATABASE ou EXECUTE SQL pour l'exécuter.
Re : Quelle est la différence entre Open Database() et New SQL Query() lors de l'accès aux bases de données ?Salut Brian,
Dans votre exemple, la base de données ouverte effectue un SELECT * et récupère simplement toutes les données.Cela sera beaucoup plus rapide que d'exécuter la clause WHERE que vous avez dans le script Query Builder.En outre, vous effectuez une modification sur le générateur de requêtes pour afficher l'interface utilisateur.Vous voudrez peut-être essayer Run Background() à la place pour exécuter la requête sur un thread en arrière-plan.Sans voir toutes les données, je pense que supprimer la clause WHERE du script Query Builder et récupérer toutes les données serait probablement plus rapide.
Brian Corcoran
Développement JMP