안녕 Anders,
응 그거
query_terms = dt3:organism id << get values;
기본적으로 모든 값을 얻는 데 사용하는 열쇠입니다.
그리고 당신이 맞습니다, 여기에 Sequoia에는 제한이 있습니다. 따라서 1000 <행으로 수행해야하는 경우 데이터 레이크에서 데이터를 쿼리하는 다른 솔루션을 사용할 것을 제안합니다.
Sequoia가 제공하는 응답은 웹보기와 비슷한 제한이 있으며 너무 많이 표시되며 결과의 다음 "페이지"를 쿼리해야합니다. 현재 해결 방법은 query_items 목록의 항목 수를 계산하는 코드를 더 추가 한 다음 쿼리를 반복하여 루프의 각 라운드에서 해당 데이터의 하위 집합을 검색하는 것입니다.
루프 라인을 따라 무언가 = N items (query_terms) / (number_of_max_results_from_Sequoia) 다음 루프 For i = 1, i
도움이 되길 바랍니다.
알렉스
감사합니다 Alexander,
더 작은 데이터 테이블로 작업하도록했지만 더 큰 목록 (> 1000 항목)을 사용할 때 응답이 없습니다. 이것이 세쿼이아의 한계일까요?
그렇지 않으면 스크립트가 데이터를 매우 빠르게 회수한다고 생각합니다.
다음은 데이터 테이블에서 ~ 10 개의 유기체 ID 항목을 호출하기 위해 수행 한 작은 수정입니다.
dt3 = Open("N:\Projects\High pH Amylase\ADW_GODperid\Summary data\Joined_data_Screening to FSW.xlsx",
0,
0,
0,
0);
Namespace("JSON") << show contents;
base_url = "http://nzdb.nzcorp.net/organism/all/large" || "?accept=application%2Fjson";
query_columns = {"identifier", "code", "synonym", "from"};
cols = "&cols=" || Concat Items(query_columns, "%2C" );
query_terms = dt3:organism id << get values;
query = "&q=" || Concat Items(query_terms, " OR " );;
url = base_url ||cols || query;
show(url);
dt = JSON:Make Table( open(url, HTML Table(2)) );
close (dt3, nosave);
안녕하세요,
가능하지만 미리 구성된 스크립트가 준비되어 있지 않으므로 직접 스크립트를 작성해야합니다. 그러나 나는 약간의 예를 모으기 위해 시간을 할애합니다. 이것을 사용하여 SEQUOIA에서 원하는 정보를 얻는 방법을 알아낼 수있을 것입니다. 다른 방법이 있지만 더 많은 사전 구성이 필요하기 때문에 이것이 매우 빠르게 실행될 것이라고 기대하지 마십시오 (요약 : JMP에서 데이터 레이크를 데이터 소스로 추가 한 다음 SQL 쿼리를 사용하여 원하는 정보를 얻습니다. 얻고 싶다).
내가 포함시킨 스크립트는 SEQUOIA에서 오는 JSON 형식의 응답을 구문 분석하는 큰 덩어리의 코드로 구성되어 있으므로 아무것도 할 필요가 없습니다. 그 아래에는 정보를 쿼리하고 JMP 테이블로 가져 오는 방법을 보여주는 몇 줄의 코드가 있습니다. 그런 다음 JMP에서 추가로 조작하여 데이터와 결합 할 수 있습니다.
변경해야합니다. 정제 된 샘플 SEQUOIA에서 검색하는 위치 / 내용에 따라.
다음은 관심있는 데이터를 JMP로 가져 오기 위해 조작해야하는 코드의 일부입니다.
base_url = "http://nzdb.nzcorp.net/purifiedsample/all/large" || "?accept=application%2Fjson";
query_columns = {"organism_code","identifier", "a280"};
cols = "&cols=" || Concat Items(query_columns, "%2C" );
query_terms = {"U6ESJ","U8GF4"};
query = "&q=" || Concat Items(query_terms, " OR " );;
url = base_url ||cols || query;
show(url);
dt = JSON:Make Table( open(url, HTML Table(2)) ); (위 코드는이 게시물에 첨부 된 jsl 스크립트에 포함 된 추가 기능이 필요합니다. * .jsl 파일을 다운로드하여 예제를 실행하십시오)
참고로 다음은 전체 스크립트입니다.
New Namespace("JSON",
{
Char Escape = Function({c},
Match(c,
"\!"", "\!"",
"b", "\!u0008",
"f", "\!u000C",
"n", "\!u000A",
"r", "\!u000D",
"t", "\!u0009",
c
)
);
,
Unicode Escape = Function( {u},
u = "\!"\!\!u" || u || "\!"";
Parse( u );
);
,
Pattern Name =
"\!"" // leading quotation mark
+ pattest( value = ""; 1) // init string accumulator
+ patrepeat(
(Pat break( "\!\\!"" ) >> temp + Pat Test( value ||= temp; 1; )) // run of characters that are not \ or "
|
("\u"+patlen(4)>>temp+pattest(value ||= JSON:Unicode Escape(temp);1)) // \uXXXX
|
("\"+patlen(1)>>temp+pattest(value ||= JSON:Char Escape(temp);1)) // \", for example...embedded quotation mark
)
+ "\!""; // trailing quotation mark
,
Pattern Number = patspan("0123456789-+eE.") >> temp + pattest(value=num(temp);1);
,
starttime=0;
,
progressTable=0;
,
progress = Function( {p},
If( Is Empty( JSON:progressTable ),
JSON:progressTable = New Table( "JSON Parsing Progress Log", New Column( "Time" ), New Column( "Percent" ) );
JSON:progressTable << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Time ), Y( :Percent ) ),
Elements(
Points( X, Y, Legend( 1 ), Jitter( 1 ) ),
Line Of Fit(
X,
Y,
Legend( 3 ),
Confidence of Fit( 1 ),
Confidence of Prediction( 0 ),
Degree( "Linear" ),
Equation( 0 ),
Root Mean Square Error( 0 ),
R²( 0 )
)
)
);
);
JSON:progressTable << addrows( 1 );
JSON:progressTable:time = Tick Seconds() - JSON:starttime;
JSON:progressTable:percent = 100 * p;
);
,
PatternParse = patpos(0) + patrepeat(patpos(/* remember how far we parsed for error message */)>>failpos
/* comment out this line for a little more speed */+pattest(if(tickseconds()-lasttime>1,JSON:progress(failpos/totalLen);lasttime=tickseconds();wait(0));1)
+patfence(/* fence off previously parsed text...ain't no going back */)
+( patregex("\s*") // ignore whitespace
| JSON:Pattern Name
| ( ":" + pattest(key=value;1) )
| JSON:Pattern Number
| ("true" + pattest(value = 1;1))
| ("false" + pattest(value = 0;1))
| ("null" + pattest(value = .;1))
| ("[" + pattest(Insert Into( stack, {{}}, 1 );value = Empty();1))
| ("{" + pattest(Insert Into( stack, Associative Array(), 1 );value = Empty();Insert Into( keys, key, 1 );1))
| ("]" + pattest(If( !Is Empty( value ),Insert Into( stack[1], value, 1 /*needs reverse later*/ ));value = stack[1];value=reverse(value);Remove From( stack, 1 );1))
| ("}" + pattest(If( !Is Empty( value ),stack[1][key] = value);value = stack[1];Remove From( stack, 1 );key = keys[1];Remove From( keys, 1 );1))
| ("," + pattest(If( Is List( stack[1] ),Insert Into( stack[1], value, 1 /*needs reverse later*/ ),stack[1][key] = value);value = Empty();1))
)) + patrpos(0);
,
Parse = Function( {json},
{stack = {}, keys = {}, key = "", value = Empty(), temp=0,totalLen = length(json),lasttime = tickseconds(),failpos=0},
JSON:starttime = tickseconds();
JSON:progressTable=empty();
if( !try(patmatch(json,JSON:PatternParse),0), Throw( "unrecognized JSON at " || Char( failpos ) ));
value;
);
,
Append Rows = Function( {dt, start, prefix, a},
{key, value, dc, c, nc, r, delta, added = 0},
If(
Is List( a ),
For( r = 1, r <= Length( a ), r++,
delta = JSON:Append Rows( dt, start + added, prefix, a[r] );
added += delta;
);
// fill empty cells
nc = N Col( dt );
For( c = 1, c <= nc, c++,
dc = Column( dt, c );
value = dc[start];
For( r = start + 1, r <= N Row( dt ), r++,
If( dc[r] == "",
dc[r] = value
)
);
);,
Is Associative Array( a ),
key = a << First;
While( !Is Empty( key ),
value = a[key];
delta = JSON:Append Rows( dt, start, If( prefix == "", key, prefix || "." || key ), value );
added = Max( added, delta );
key = a << Next( key );
);,
// else a literal
If( prefix == "",
prefix = "v"
); // can only happen in a top array of literals
dc = Try( Column( dt, prefix ), dt << New Column( prefix, "Character" ) );
added = 1; // don't count padding
If( N Rows( dt ) < start,
dt << Add Rows( start - N Rows( dt ) )
);
// fill to end in case a previous column was a JSON array
For( r = start, r <= N Rows( dt ), r++,
dc[r] = Char( a )
);
);
added;
);
,
Make Table = Function( {json},
{dt},
If( Is String( json ),
json = JSON:Parse( json )
);
dt = New Table();
dt << Begin Data Update();
JSON:Append Rows( dt, N Rows( dt ) + 1, "", json );
dt << End Data Update();
dt;
);
}); // end namespace
Delete Globals();
Namespace("JSON") << show contents;
base_url = "http://nzdb.nzcorp.net/purifiedsample/all/large" || "?accept=application%2Fjson";
query_columns = {"organism_code","identifier", "a280"};
cols = "&cols=" || Concat Items(query_columns, "%2C" );
query_terms = {"U6ESJ","U8GF4"};
query = "&q=" || Concat Items(query_terms, " OR " );;
url = base_url ||cols || query;
show(url);
dt = JSON:Make Table( open(url, HTML Table(2)) );