你好!
我有一个数据表,它是通过运行两个单独的查询(提供来自两个不同源的数据)的脚本生成的,然后将它们合并以形成数据表。 我的问题是关于每天更新此表的方式,不需要从一开始就重新运行脚本,并且可以保留任何清理/调整/新列。 我看到侧边栏上有“从数据库更新”和“从数据库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 查询脚本时,它都会从每个依赖表的数据源引入新数据。