テーブル参照に関する質問 (ラッセルより)
この質問は「」に関するスレッドで出てきました。 Re: 2022Q1 実践セッション - 初心者向け」 - 他の人にもディスカッションに参加してもらいたいため、ディスカッション フォーラムに投稿しました。
今日示したテーブル参照に関する質問: スクリプトの一部として複数のテーブルを順番に処理する場合、テーブル参照を無限に繰り返しますか (dt1、dt2、dt3、...) それとも、よりスマートな解決策はありますか?
背景: 私は頻繁にテーブルを操作 (結合、連結、分割など) するため、必要な最終テーブルが得られるまで、同じスクリプトで次のテーブルに進む前に、かなりの数のテーブルを順番に開き、処理し、閉じます。 。
Re: テーブル参照に関する質問 (Russel より)@ゲオルグありがとう!
Re: テーブル参照に関する質問 (Russel より)こんにちは@レッセルSQL の作成/書き込みに関する情報は含まれていませんが、SQL クエリまたはさまざまな方法による JMP でのクエリのデプロイに関する詳細が含まれています。 したがって、私の通常の方法は、別のツールを使用してその単純な SQL (「select name from big_class where age > 15」など) を作成し、そのスクリプトを JMP にデプロイするだけです。 しかし、これがどのように見えるか、いくつかの例を見てみましょう。
Re: テーブル参照に関する質問 (Russel より)こんにちは。はい、多くの設定が変更されましたが、どの設定が変更されたのか正確には思い出せません。 つまり、これはSAS Tech Support、私たちのITサポート、そして私の手中にありました。 これを修正するのにかなりの時間がかかりました。 ほとんど役に立ちませんでした。 (そして私は最近、データリテラシーが少しずつ高まり始めています。)
また、スクリプトを介してデータをロードしてテーブルを操作することでデータを取得することに問題はありませんが、毎回 100,000 行をロードし、大部分を削除し、次のテーブルで同様の手順を繰り返すことを考えると、本当に効率が悪いように見えます。 。 クエリ ビルダーはおそらく同じ仕事を、別のインターフェイスで実行すると思いますが? 現時点では必要なデータにアクセスできますが、作業負荷に応じて。プレーン SQL を JMP にインポートすることを検討するかもしれません。 (そんなことが可能だとは知りませんでした。)
以下のリンクには、JMP で使用する SQL の作成に関する情報が含まれています。
ありがとう!
Re: テーブル参照に関する質問 (Russel より)ところで、おそらくこのプレゼンテーションを見てみたいと思います。これはすべて、JMP を使用してデータベースからデータを取得する方法に関するものです。
https://community.jmp.com/t5/Discovery-Summit-Europe-2021/Strategies-and-Examples-for-Data-Acquisition-From-Distributed/ta-p/349225
Re: テーブル参照に関する質問 (Russel より)クエリビルダーの環境設定で設定を変更しようとしましたか? デフォルトでは、変更ごとに大量のデータ (データベース、プレビューなどのすべてのレベル) が転送されるため、大幅に変更される可能性があります。
さらに、GUI でクエリを作成したら、それをカスタム SQL に変換してプレーン SQL を作成できます。 これはデータベースのみで処理されるため、はるかに高速になります。
私の最もよく知られている方法は、常にデータベース上で重い処理を実行することですが、これは常に環境に依存します。 データベースでクエリを定義できるツールは他にもあり、JMP で使用できます (データベース ベンダーによっては SQL クエリ ビルダーなど)。
また、IT (データベース管理者など) に定期的に必要な特定のクエリを手伝ってもらい、プレーンな SQL を JMP にインポートすることもできます。
データベースからデータを正しい形式で取得することは非常に重要であり、最後にプロセス全体を確認する価値があります。
Re: テーブル参照に関する質問 (Russel より)以前にクエリビルダーを使用してみました。 信じられないほど遅く、頻繁にクラッシュし続けました。 そこでSASテクニカルサポートに連絡しましたが、問題を解決できませんでした。 その結果、私はスクリプト内で個々のテーブルを処理することにこだわりました。クエリ ビルダーの悲惨なパフォーマンスを考慮すると、はるかに便利で効率的です。 これは、私がロードしているテーブルに 100,000 以上の行があることが原因である可能性があります。これが、少なくともテクニカル サポートの結論でした。 残念ながら、これらの「巨大な」テーブル以外に頼る場所はほとんどありません。
あと、デバッグにも早急に慣れる必要があると思います。 有用なコード行をなんとか「ラングリング」することはできましたが、アーキテクチャや美学などは考慮していません。実際のところ;デバッグ可能なスクリプトを構築する方法。 残念ながら、それは私にとって今のところまだ馴染みのない概念です。
Re: テーブル参照に関する質問 (Russel より)データベース内でテーブル操作を行うこともできます (クエリ ビルダーやネイティブ SQL などによるクエリ定義)。 これは、トラフィックを回避し、サーバーに大きな負荷をかけることができるため、大規模なデータ セットの場合に有利です。 そうすれば、JMP で処理するテーブルも少なくなります。
Re: テーブル参照に関する質問 (Russel より)わかりやすいハンドル/参照名は、ある時点であなた (またはコードを変更する必要がある他の人) に役立ちます。 これにより、Show(dt_batchid_loc); を使用できるようになり、デバッグ出力も簡単になります。たとえば、作成されたテーブル名を確認します。
また、テーブルを作成するときに Output table("name of table") を使用すると便利な場合があります。 これは、コードをデバッグする必要がある場合に役立ちます。 これを行わない場合 (私はこれをスキップする傾向があり、時々悩まされるようになります)、「QC による無題の 3041 の概要」と比較して、「BatchID_with_Loc」のような名前からどのテーブルが開いているかを確認するのがはるかに簡単です。 、ロク」とか。
Re: テーブル参照に関する質問 (Russel より)ご返信ありがとうございます。 私が取り組んでいることの背景についてもう少し詳しく説明します。
ODBC 経由で Google Cloud Platform 実装からテーブルをロードします。 このテーブルは、最新の製造データで定期的に更新されます。 たとえば、ロードする最初のテーブル (次のように参照します) dt ) には、バッチ ID、さまざまな QC パラメーターのパラメーター名、測定結果、および測定単位が別の列にあります。 これを QC パラメータ名で分割し、出力を次のように参照します。 dt2 、 閉鎖dt )。 次に、たとえば、バッチ ID と製造場所を相互参照する別のテーブルをロードします (これを次のように参照します)。 dt3 )。 その後は参加するかもしれませんdt2とdt3 、 作成dt4などなど、分析を進める前に必要と思われるすべての情報を含む表が完成するまで続けます。 いくつかのスクリプトでは、10 近くのテーブルを処理しており、すべてが次のように参照されています。 dt(n) 。 私の現在のスキルレベルではこれが許容範囲です。
私は、このようなスクリプトを管理図作成に使用する中期計画を立てています。 現時点では、傾向を視覚的に評価するだけで、スクリーンショットまたは HTML でエクスポートしたグラフをさまざまな関係者に送信します。
この会話から得られることは、より説明的なテーブル参照を使用することです。 これらもハンドルと呼ばれるものでしょうか?
Re: テーブル参照に関する質問 (Russel より)同意する@マーティンデメル、それは、ファイルが存在する場所、ファイルを処理する順序、ファイルをどのように処理するかによって異なります。 JSL には、拡張ログ以外にも役立つ組み込み関数が多数あります。 例えば、ディレクトリ内のファイルディレクトリ内のすべてのファイルのリストが表示されます。 ファイルの選択ディレクトリから 1 つ以上のファイルを対話的に選択できます。 拡張ログは対話型操作を適切にキャプチャしますが、ハードコードされたテーブル名の参照をテーブルへの変数参照に置き換える必要があります。 @マーティンデメルこれの一部を使用して示しましたdt = オープン(... ほとんどの場合、ファイルを開く JSL 操作は、作成されたデータ テーブルへのハンドルを返します。 データ テーブル ハンドルは、テーブルに操作をメッセージで送信したときにも作成されます。テーブルメニュー。 たとえば、サブセットを作成している場合、構文は次のようになります。
subsetDT = dt << Subset(...
新しく作成されたテーブルへの参照をキャプチャできるようになります。 他のテーブル操作も同様に機能します。
Re: テーブル参照に関する質問 (Russel より)こんにちは@レッセル、
それは最終的に何をしたいかによって決まります。 たとえば、同じ方法で処理し、後で閉じたいデータ テーブルが 100 個ある場合、100 個のテーブルをすべて開いて 1 つずつ処理するよりも、ループ (各テーブルを開いて、処理し、閉じる) の方がうまく機能する可能性があります。もう一方。 理由の 1 つは、システム側で別の問題を引き起こす可能性のある多数のウィンドウ ハンドルを作成しないことです。
一般に、テーブル変数名をもう少し説明的にすると、それが意味がある場合には、それが何であるかをよりよく理解できるようになります。 「dt」は主に汚いハック用です 
開いているすべてのデータ テーブルを取得し、次を使用してそれらをループすることもできます。
Get Data Table List();
これはおそらく賢明な選択でしょう。
他の人はこれについてどう感じていますか?