안녕하세요!
두 개의 별도 쿼리(두 개의 서로 다른 소스에서 데이터를 제공)를 실행하는 스크립트를 통해 생성된 데이터 테이블이 있는데, 이 쿼리는 병합되어 데이터 테이블을 형성합니다. 내 질문은 스크립트를 처음부터 다시 실행할 필요가 없고 정리/조정/새 열을 유지할 수 있는 방식으로 이 테이블을 매일 업데이트하는 것과 관련이 있습니다. 사이드 바에 "데이터베이스에서 업데이트"와 "데이터베이스 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 쿼리 스크립트가 실행될 때마다 각 종속 테이블의 데이터 원본에서 새 데이터를 가져옵니다.