2014年2月19日水曜日

SQLでMONOTONIC関数を使用することについて。




この関数について、すこし紹介(こちら)したことがありますが、
色々調べて注意点をまとめました。




  • まずMONOTONIC関数はSASのリファレンスに載っていない、いわゆる「Undocumented SAS function

  • データステップで使う分にはあまり問題となる事はないですが、SQLプロシジャで使用する際は要注意
    どういう事かというと、、
    データステップだとレコードが並んでる順にデータ処理が行われるけど、

    SQLプロシジャだと再マージやGROUP処理など複雑な処理では、レコードが並んでいる順に処理を行っているわけでは無さそう(内部的な話なので、どのような順で処理を行うのかも分からない)

  • MONOTONIC関数は処理順に連番をふるので、SQLプロシジャで使用すると上記で説明したとおり、意図したものと違う、おかしな順番で番号がふられてしまいます。




MONOTONIC関数の結果値を見ることでSQLプロシジャでの内部処理順を探るヒントになりそうで、それはそれで面白いけど、注意点としておさえておく必要があります。


SASYAMAさんの記事で更なる注意点が見つかりました。
monotonic関数でアイタタタ(データステップ100万回)


2 件のコメント:

  1. こんにちわ!
    そうですか、びっくりです。難しいですね、、。
    SQLで、面白いことするために生まれた関数だと思ったのに。。

    僕のブログのmonotonicの記事のところに、注意書きとして追記で、こちらの記事にリンクさせていただきました。

    返信削除
    返信
    1. こんにちは。
      そうなんですよー、色々面白いことできそうなんですが。
      連番をふる関数ってoracleとかにもあると思うんですが、同じ問題を抱えてるんでしょうかね。
      内部処理がどうなってるのかSQLプロシジャ作った人に聞いてみたいです。

      削除