こんにちは!
2 つの別々のクエリ (2 つの異なるソースからデータを提供する) を実行するスクリプトを介して生成されたデータ テーブルがあり、それらはマージされてデータ テーブルを形成します。 私の質問は、スクリプトを最初から再実行する必要がなく、クリーニング/調整/新しい列を保持できる方法でこのテーブルを毎日更新することに関するものです。 サイドバーに「データベースからの更新」と「データベース 2 からの更新」の両方があることがわかります。 そのうちの 1 つを実行できますが、そのソースに含まれていない列が削除されます (つまり、最初のクエリである「データベースから更新」を実行すると、TVC、VI、AC、DC の列が削除されます)クエリ 2 と他の計算/手動入力列を元のスクリプトにマージした後にテーブルに追加します)。
2 つの更新スクリプトを 1 つのスクリプトにコピーしようとしましたが (以下を参照)、最初の更新スクリプトを実行すると、2 番目の更新スクリプトを実行する前に列を削除しようとするという問題が発生しました。 最良のアプローチがテーブルを結合してから更新を試みることなのか、それとももっと簡単な方法があるのかどうかはわかりません(そのソースから来たものではないデータを削除せずに更新する方法かもしれません)。 以下のコードでは接続情報を削除し、名前を変更しましたが、これがアイデアの参考になれば幸いです。 誰かが以前に同様の問題に対処したことがありますか? ありがとう!
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() ) )
あなたが見ているのは、新しい SQL クエリから作成されたテーブルに列を追加すると、データベースから更新を実行すると新しいデータテーブルが取得されるということだと思います。 つまり、インポートされたテーブルは、メタデータを変更した (列を追加した) ため、再利用できません。
あなたができることは、ファイル->データベース->クエリビルダーを使用してデータベースから2つのテーブルをインポートすることだと思います(データテーブルを保存しないでください)次に、テーブル->JMPクエリビルダーを実行して2つのテーブルを結合します。 次のようになります:
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;
何が起こるかというと、JMP Query Builder が保存されていない各テーブルからソース スクリプトを取り出してスクリプトを構築します。 これは、新しい SQL クエリ スクリプトが実行されるたびに、各依存テーブルのデータ ソースから新しいデータが取り込まれることを意味します。