JSLスクリプトで使用されるSQLにループを挿入するにはどうすればよいですか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />やあ、
多くの量産ウェーハの最終テスターからチップレベルのパラメトリック テスト データを収集する必要があります。
各ウェーハには約 3000 個のチップと数十のパラメータがあります。
この支援リクエストのために、ダミーの SQL を作成しました。
選択する
I.製品NR、
T.テストユニットNR、
T.測定点NR、
T.クリエーションタイム、
T.RESULT_PARAM1、
T.RESULT_PARAM2。
。
。
。
から
「アイテム」D、
「テスト結果」T、
「テストレストロウズ」TRR、
「テストロー」TR、
。
。
ここで、I.IDNR = T.IDNR
および T.TESTRESULTNR = TRR.TESTRESULTNR
かつ TRR.TESTROWIDNR = TR.TESTROWIDNR
かつ I.LOTIDNR = L.LOTIDNR
かつ T.VALIDITY = '1'
そしてD.WAFERNR IN
(
「WAF43K309A」、
「WAF43K310A」、
「WAF43K311A」、
「WAF43K312A」、
「WAF43K313A」、
「WAF43K314A」、
.、.、.、.、.、
「WAF43K315A」、
「WAF43K316A」、
「WAF43K317A」、
「WAF43K319A」、
「WAF43K320A」、
「WAF43K321A」
)
AND (T.TESTUNITNR LIKE ('HENE%')
AND TR.VARIABLENAME IN
(「アセナム」、
'OFFSET_X_DIFF',
'OFFSET_Y_DIFF',
……)
グループ化...
リストされている最初のウェーハ (WAF43K309A) のすべてのデータを収集すると、収集/取得時間は約 90 秒になります。
リストされている最初の 2 つのウェーハ (WAF43K309A、WAF43K310A) のすべてのデータを収集した場合、収集/フェッチ時間は約 4 分です
リストされている最初の 3 つのウェーハ (WAF43K309A、WAF43K310A、WAF43K311A) のデータをすべて収集した場合、収集/フェッチ時間は約 7 分です
問題はもうお分かりかと思いますが、ウェーハの数に応じて収集/フェッチ時間が指数関数的に増加します。
いつかは週末にこれをやらなければなりません!!
SQL の「Union All」演算子を使用し、一度に 1 枚のウェーハのデータを収集すると、各ウェーハでほぼ同じ時間をかけてデータを取得できます。
リストにウェーハが数枚しかない場合はこれで問題ありません。残念ながら、数十枚のウェーハ、場合によっては数百枚のウェーハからデータを収集する必要があることがよくあります。
内部選択を使用して、ウェーハのリストを作成できます。
例えば
……
そしてD.WAFERNR IN (
ITEMからWAFERNRを選択
WHERE テスト日付 > SYSDATE-5)
結果として得られるウェーハ リストは次のようになります。
WAF43K309A
WAF43K310A
WAF43K311A
WAF43K312A
WAF43K313A
WAF43K314A
WAF43K315A
WAF43K316A
WAF43K317A
WAF43K319A
WAF43K320A
WAF43K321A
JSL を使用して、リストをループして一度に 1 つのウェーハのデータを収集することによって、このリストを使用することは可能ですか?
コミュニティがどのような創造的なソリューションを提供できるか楽しみにしています
解決策は素晴らしいクリスマスプレゼントになるでしょう
よろしくお願いします、
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?こんにちは、ヨセフさん
ご意見ありがとうございます。
SQL スクリプトで使用するリストを作成した方法が気に入っており、必要なときにすぐに使用できると確信しています。
この特定のケースでは、一度に 1 枚ずつウェーハを取得するアプローチと比較してデータ取得が遅くなるため、SQL でのウェーハ リストの使用を避けるという考えがあります。
よろしくお願いします、
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?やあ
次のスクリプトを使用して、ロットリストを含む行を作成します
ロットリスト=桁( 1 ) <<値の取得;
リスト内= 「(」 ||連結アイテム( ロットリスト、 「」 ) || "")" ;
SQL_文字列= 「どこにたくさんあるの!」 の " ||リスト内;
// /文字列を見たい場合は/ / /
見せる( SQL_文字列) ;
*ロット番号のどこかにスペースがあり、「%lot Number」のようなものを検索する必要がある場合... SQL では機能しません。別のスクリプトを作成する必要があります
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?こんにちは、msharp さん
ご意見いただきありがとうございました。
スクリプトセクションのこの「垂直結合」セクションをメインスクリプトに結合しました。これはうまく機能します。
データ抽出に必要な時間は以前に比べて数分の一に短縮され、手順全体をスクリプト化して自動化できるため、サーバーの負荷が軽い夜間にデータ抽出を実行できるようになりました。
よろしくお願いします、
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?この最後の質問については、さまざまな方法があります。おそらく最も単純で簡単な解決策は、あまり直感的ではありません。ここで行うことは、テーブル リストを作成し、各データ テーブルをリストにプッシュすることです。 その後、リストを一度に連結できます。概要は次のとおりです。
myTables = {} ;
ために(私= 1...
dt = SQLを実行する( ... ) ;
挿入する( myTables 、 dt ) ;
) ;
dtすべて=新しいテーブル( "すべてのデータ" ) ;
dtすべて<<連結する(
評価( myTables ) 、
出力テーブル( "すべてのデータ" )
) ;
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?PMroz さん、こんにちは。
ご支援とご辛抱に心より感謝申し上げます。
あなたの入力と、エリックヒル、ロン・ホーンとムシャープこれで、ネストされた SQL クエリを希望どおりに設定できるようになりました。
この方法は、この投稿の冒頭で説明したより高度なデータ取得タスクに直接転送でき、サーバーからデータが返されるまでの何時間もの待ち時間を節約できます。
この演習で多くのことを学びました。皆さんの努力に感謝します。
最後にもう一つ質問を....
すべてのデータを個別のデータ テーブルに収集したので (データ取得を高速化するために行われました)、すべてのデータ テーブルを保存せずに、開いているすべてのテーブルで連結を実行して、より簡単にデータを実行できるようにする方法はありますか?分析?
すべてのデータテーブルを保存し、再度開くときに JSL を使用してそれらを連結することで、これをすでに行うことができますが、このようにしなければならないのはばかげているように思えます。
皆様も楽しいクリスマスをお過ごしください。
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?これでうまくいくと思います:
// テーブルの例 - テーブルがすでに存在する場合は、この手順を実行する必要はありません。 しかし、作成する必要があります
// それを指す変数。
ウェーハ_dt =新しいテーブル( 「ウェーハ番号」 、
行の追加( 9 ) 、
新しい列( 「ウエハ番号」 、
キャラクター、
公称、
設定値(
{ 「XC6A49L410.1」 、 「XC6A49L411.1」 、 「XC6A49L412.1」 、 「XC6A49L413.1」 、
「XC6A49L414.1」 、 「XC6A49L415.1」 、 「XC6A49L416.1」 、 「XC6A49L417.1」 、
「XC6A49L418.1」 }
)
)
) ;
// たとえば、テーブルが Wafer Numbers という名前の場合、このステートメントはそのテーブルに変数を割り当てます
// ウェーハ_dt = データテーブル("ウェーハ番号");
// ウェハ番号をリストに保存する
ウェーハリスト=桁(ウェーハ_dt 、 「ウエハ番号」 ) <<値を取得する;
dsn_string = 「DSN=MEASdata;UID=USER;PWD=PASSWORD;DBQ=MDMANU.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T ;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD =0;ODA=F;TSZ=8192;" ;
// ウェーハ番号をループ中に代入する変数とする SQL ステートメントを作成します
SQLステートメント=エヴァリンサート(
"\[ ウエハNR,WIPSTATUSを選択
「ディスクセット」より
WHERE WaferNR = '^one_wafer^']\" ) ;
// データベースへの接続を作成します
dbc =データベース接続を作成する( dsn_string ) ;
ために(私= 1 、私<=ナイアイテム(ウェーハリスト) 、私++、
1枚のウエハ=ウェーハリスト[私] ;
// テーブルにウェーハと同じ名前を付けます。ニーズに合わせて変更する
テーブル名= 1枚のウエハ;
// 1枚のウェーハのデータを取得します
dt = SQLを実行する( dbc 、 SQLステートメント、テーブル名) ;
) ;
// これで、すべてのウェーハを個別のテーブルに取得する作業が完了しました。
// データベースへの接続を閉じます
データベース接続を閉じる( dbc ) ;
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?あなたは明らかに私が言ったことのメッセージと意図を見逃しています。
とにかく、このフォーラムの投稿が Ron Horne の投稿よりも長くなる理由はありません。Ron Horne は、私がこの問題を段階的に解決したフォーラムにリンクしているからです。
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?私が直接支援を求めたことにより、何らかの形であなたを気分を害した場合は、MSHARP にお詫び申し上げます。
私自身すでに述べたように、残念ながら私は JSL の専門家ではありませんが、このコミュニティが提供するコンテンツに基づいてかなりのことを行うことができました。
実際、私は2日間のJMP JSLクラスに参加しましたが、残念ながら、非常に国際的なクラスを持つアメリカ人教師のためにヨーロッパの現地事務所が主催したものだったため、多くの技術的な問題があり、2日間で多くの時間が失われました。かなりの内容とトレーニングがカバーされていないままになっています。
これまでのところ、このコミュニティの他のメンバーから良いフィードバックを受けており、実際、私がより多くの知識と経験を持っている分野に基づいて、今後のチュートリアルで JMP と協力しています。
私は、メンバーが提供した支援を自分の仕事だと主張したことは一度もありません。 私は、支援がどこから来ているのか、他のコミュニティよりも早く、より遠くまで学習曲線を登ることができるこのような支援的なグループに所属することがどれほど素晴らしいことであるかを率直に述べてきました。
他の人たちが私の気持ちに共感し、能力の低い人たちをサポートし、教え続けてくれることを願うばかりです。
心から、
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?分かった、やってみろ。
あなたのアプローチは間違っていると思います。 jmp コミュニティが単純なケースのコードを手動で提供する必要がある場合、複雑なケースのコードを実装することはできません。 あなたは想像をはるかに超えたプロジェクトに取り組んでいるようですね。その場合は、スクリプト ガイドを読むか、クラスを受講することをお勧めします。
実際、コミュニティを最大限に活用するには、まず自分でコードを開発する必要があります。デバッグや最適化中に行き詰まった場合は、コミュニティがリファクタリングをより適切に支援します。このようにストレートにコードを要求するのは盗作とほとんど同じです。
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?こんにちは、エリック、ロン、PMroz、
ご意見ありがとうございました。
残念ながら、私の JSL 能力は、皆さんの意見をすべて取り入れて、機能するスクリプトを構築できるレベルにありません。
3 つの入力からロジックとシーケンスを確認できませんでした。 まだ混乱していますが、より高いレベルにあります
私の取り組みでは、「wafers.jmp」リストの最後のウェーハのデータのみが返されています。
少なくとも混乱しないように、もっと簡単な例を挙げてはどうでしょうか。
「wafers.jmp」という名前のファイルにウェーハのリストがあります。
XC6A49L410.1
XC6A49L411.1
XC6A49L412.1
XC6A49L413.1
XC6A49L414.1
XC6A49L415.1
XC6A49L416.1
XC6A49L417.1
XC6A49L418.1
適切な SQL を使用して、リストされたウェーハの WIPSTATUS を収集する必要があります。
ウエハーNR、WIPSTATUSを選択してください
「ディスクセット」より
WHERE WaferNR = (上記のリスト内のすべてのウェーハ)
これを行うには、接続文字列を設定する必要があります。
「DSN=MEASdata;UID=USER;PWD=PASSWORD;DBQ=MDMANU.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T ;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD =0;ODA=F;TSZ=8192;"
変数「wafer_id」「^WAFER_ID^」を設定する必要があります....
一度に 1 枚のウェハで必要なデータを収集する必要な SQL を構築するループを設定します。
データベース接続を開きます...
「書き換えられた」SQL を実行します。
すべてのデータを~に収集する1 つのデータテーブル。 ……
データベースから切断します ??
上記の簡単な例を使用して、私自身がより高度なケースに取り組むことができるように、テストできるスクリプトの構築を手伝っていただけますか。
よろしくお願いします、
フィリップ
PS これは、私がやりたいことの単純な例にすぎないことに注意してください。このデータ取得にはミリ秒かかりますが、高度なケースでは、「一度に 1 枚のウェーハ」のデータを取得する可能性がないため、現時点では数時間から場合によっては数日かかります。時間"。
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?ジェフ、良いアドバイスをありがとう。
この特定のデータ取得は確かに非常に困難であり、何TBものデータを含む多くのDBテーブルからデータが取得されるため、慎重な計画が必要です。
当社の DB 管理者 3 名と外部企業 2 社がその最適化に取り組みました。
それが、この「一度に 1 枚のウェハ」アプローチを求める理由です。
このアプローチは最近、Denodo による同じ SQL を使用して成功裡に実証されましたが、現時点では利用可能な Denodo ソフトウェアがまだありません。
よろしくお願いします、
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?ループ内で多数の SQL ステートメントを実行している場合は、別のアプローチを取る必要があります。
dbc =データベース接続を開く( "<接続文字列がここに入ります>" ) ;
各行ごとに(
SQL = ...
SQLを実行する( dbc 、 SQL ) ;
) ;
データベース接続を閉じる( dbc ) ;
この方法では、データベースに 1 回だけ接続するだけで済み、時間を少し節約できます。
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?また、敬意を表して、SQL が適切に最適化されていることを確認することをお勧めします。
としてエリックヒルJOIN を使用しないクエリは、通常、すべてのテーブルのすべての行と他のすべてのテーブルのすべての行を照合するデカルト積を生成することを示しています。 これには非常に時間とリソースがかかる可能性があります。 提供したサンプル コードには JOIN がありません。 それが実際のコードを代表するものである場合は、JSL だけでなく SQL も改善できるかどうかを調査する価値があるかもしれません。
-ジェフ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?こんにちは、エリックさん
元の SQL 用に変更しようとしたスクリプトをありがとうございます。
長い SQL 文字列は、wafers.jmp のウェーハ リストから作成されていますが、何らかの理由で 1 つのウェーハからしか結果が得られません。
1枚のウェーハIDを何度も複製しても、ウェーハ1枚分のテスト結果しか得られません。
私の理解が正しいことを願っています...
あなたの例に従って、最初にテンプレートを設定しました...
次に、「wafers.jmp」が保存されるデフォルトのディレクトリを設定します……
ループを開始します....
各行(
ウェーハID = :ウェーハID;
sql = Eval Insert( sqlTemplate );
Print( SQL );
);
データベースに接続して SQL を実行します。
データベースを開く(
"DSN=TESTING;UID=tepo;PWD=パスワード;DBQ=本番;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST =T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0 ;ODA=F;TSZ=8192;",
評価挿入(SQL)
);
;
この最後の部分は私にはよくわかりません。
アイデアや提案がありましたら。
かなり近づいてきたような気がします……。
よろしくお願いします、
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?ロンさん、リンクありがとうございます。
JMP とスクリプトの初心者として、私はロジックをまだ完全に理解していませんが、理解できるように努めます。
よろしくお願いします、
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?ロン、指摘してくれてありがとう、時間を節約できた。そこで、Ron が指摘した例を使用して、対象のウェーハ ID を、wafers.jmp という名前のデータ テーブルに入れて、次のスクリプトを書きました。
SQLテンプレート= 「\[
選択する
I.製品NR、
T.テストユニットNR、
T.測定点NR、
T.クリエーションタイム、
T.RESULT_PARAM1、
T.RESULT_PARAM2
から
「アイテム」D、
「テスト結果」T、
「テストレストロウズ」TRR、
「テストロー」TR、
ここで、I.IDNR = T.IDNR
および T.TESTRESULTNR = TRR.TESTRESULTNR
かつ TRR.TESTROWIDNR = TR.TESTROWIDNR
かつ I.LOTIDNR = L.LOTIDNR
かつ T.VALIDITY = '1'
AND D.WAFERNR = '^ウエハーID^'
AND (T.TESTUNITNR LIKE ('HENE%')
AND TR.VARIABLENAME IN
(「アセナム」、
'OFFSET_X_DIFF',
'OFFSET_Y_DIFF')
;
]\" ;
開ける( 「ウエハース.jmp」 ) ;
各行ごとに(
ウェーハID = :ウエハーID ;
SQL =評価インサート(SQLテンプレート) ;
印刷する(SQL) ;
) ;
もちろん、これは書き換えられた SQL を出力するだけです。コードを追加して SQL をデータベースに送信できます。
HTH、
エリック
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?やあ日本ポール、
おそらく、次の例が役に立つかもしれません。
https://community.jmp.com/message/223900#223900
ロン
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?やあ、フィリップ、
わかりました、申し訳ありませんが、確認したかっただけです。ループの例を考えてみましょう。
エリック
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?こんにちは、エリック。
ご心配いただきありがとうございます。
前述したように、これは元の SQL よりもはるかに短いダミー SQL です。
SQL ではなく JSL の観点からケースを提示したいと思っていました。
RGDS
フィリップ
Re: JSL スクリプトで使用される SQL にループを挿入するにはどうすればよいですか?やあ、フィリップ、
ループは確かに可能ですが、まず最初に: 書かれているように、SQL ステートメントはデカルト積を生成します。これにより、サイズが指数関数的に増加する可能性があります。それは必要ですか?
エリック