SASと一緒にSQLパススルー機能を使用する利点はありますか?SASでのSQl PAssthrough
答えて
この質問は過度に広がっていますが、私は過度に広い回答を提供することができます。
SASのパススルーSQLを使用すると、データベースと直接通信できます。これは、データベース固有の機能を使用する場合に非常に有利になります。たとえば、Oracleの統計関数がその例です。 SASがコーディングをどのように処理するか、SQLをどのように翻訳するか心配する必要はありません。
また、パススルーSQLはSAS側で処理する必要がほとんどありません。 SASボックスが非常に混雑している場合は、処理ロジックを直接データベースに送信することができます。これはパススルーSQLを使用せずに可能ですが、使用する際にはより高度な制御が可能です。
これは決して網羅的なメリットのリストではなく、パススルーSQLを使用するためのいくつかの高いレベルの特典です。より具体的なユースケースがある場合は、コーディングテクニックの具体的な相違点について説明します。
パススルーを使用しない場合は、データベースからsasにすべてのレコード(処理に必要なレコード)をインポートする必要があります。パススルーを使用すると、データベース側で処理を実行し、結果のレコードのみをsasに引き渡すことができます。 (処理時間とネットワーク使用量の点で)違いは、あなたが何をするかによって、非常に小さなものから大きなものまでになります。
PROC SQLはできるだけ多くのロジックをデータベースに渡しますが、それはできないさまざまな時間があります。データベース(またはデータベースのSAS/ACCESSエンジン)と同等の機能を使用しないSAS関数を使用すると、クエリ全体がデータベースに渡されなくなります。クエリがデータベースに完全に渡されないと、データはSASにプルされ、そこで処理されます。 SQLの複雑さが増すほど、SASで処理される可能性が高くなります。あなたが実現するよりも大きな違いを生むケースがあります。
libname db <database> path=dbserver user=... password=...;
proc sql;
create table db.new as
select * from db.largedata where flag=1;
quit;
これは実際に(少なくともSAS 9.1.3スルー)SASへダウンフラグ= 1と一致するすべてのデータをプルし、再びデータベースにロードします。これは本当に減速する数百万行です。
この場合、明示的なパススルーがはるかに高速になります。
proc sql;
connect dbase (server=dbserver user=... password=...);
execute (create table db.new as
select * from db.largedata where flag=1) as dbase;
disconnect dbase;
quit;
私は最近、Oracleを使用例と、約250,000行を持つテーブルをしました。最初の方法は20秒、2番目の方法は2秒でした。
パススルーを使用する利点はありますが、達成しようとしていることによって異なります。一般に、私はクエリを実行するときにパススルーなしで標準のproc sqlを使用します。しかし、最近、私はいくつかのストアドプロシージャを生成するために使用しました。
proc sql;
connect to mysql(user = 'xxxxx' pass = 'xxxxx' server = 'localhost');
execute(set @id = &id.) by mysql;
execute(select (@lit:=image_text) from quality.links_image_text where image_id = @id) by mysql;
execute(set @lidx = locate('ninja',@lit)) by mysql;
execute(set @lidx2 = locate(' ',@lit,@lidx)) by mysql;
execute(set @lidxd = @lidx2 - @lidx) by mysql;
execute(set @lf = substr(@lit,@lidx,@lidxd)) by mysql;
create table asdf as
select &id. as id, a as ws from connection to mysql
(select @lf as a)
;
disconnect from mysql;
quit;
明らかに、これはパススルー外で行うことはできません(少なくとも私が知っているものではない)。ですから、それはあなたが何を達成しようとしているかによって異なります。
+1興味深い使い方は... –
簡単に言えば、SQLパススルー文を使用すると、データベースに送信される内容をより詳細に制御できます。
- 1. SAS PROC SQL TRIM STATEMENT
- 2. SASパススルーSQL - 複数のデータベース
- 3. 実際のXHRデータ/ passThrough()でAngularJS/Karmaユニットテスト
- 4. SAS Proc SQLデータベーステーブル挿入
- 5. sas/sqlロジックが必要です
- 6. SAS/IMLでSAS/IML
- 7. sas proc sqlのconcat 2の数値
- 8. minifilterドライバ(passThrough)を使用したUSBブロッキング
- 9. SASは、パススルーSQLマクロ変数に文字
- 10. SAS暗黙のSqlパスでTeradata UDFを使用する
- 11. SAS Proc SQL文でPerl正規表現を使用する
- 12. SASマクロ:proc sqlでマクロを使用する
- 13. SASはodbcなしでSQLサーバーに接続しますか?
- 14. SASプログラムで同等のR
- 15. SASのハッシュマージエラー
- 16. SAS 9.2のスコアリング
- 17. その後、SAS
- 18. SAS PROC SQLは - 分の日付を取得し、追加1年
- 19. 複数のSASからSQLサーバに欠落しているタイプ
- 20. SAS proc SQL文からのエラーメッセージを抑制する方法
- 21. は、SAS
- 22. SAS autoexec(Base SAS)経由でアプリケーションツールバーにアイコンを作成する
- 23. SAS言語用に最適な非SAS IDEは何ですか?
- 24. $ httpBackend.whenGET()passThrough()が定義されていません
- 25. SASの日付エラー
- 26. SASのファンクションポイント分析
- 27. BigIntのTeradataとSAS
- 28. マクロ内のSAS libname
- 29. SASでテーブルをドロップする
- 30. パンダでSASファイルを読む
回答には十分な情報がありません –