你好!
我有一個資料表,它是透過執行兩個單獨的查詢(提供來自兩個不同來源的資料)的腳本來產生的,然後將它們合併以形成資料表。 我的問題是關於每天更新此表的方式,不需要從一開始就重新運行腳本,並且可以保留任何清理/調整/新列。 我看到側邊欄上有“從資料庫更新”和“從資料庫2更新”。 我可以運行其中一個,但它將刪除該來源中未包含的列(即,如果我運行“從資料庫更新”,這是第一個查詢,它將刪除列 TVC、VI、AC 和 DC來自查詢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 查詢產生器從每個未儲存的表中提取來源腳本來建立其腳本。 這意味著每次執行新的 SQL 查詢腳本時,它都會從每個依賴表的資料來源引入新資料。