SAMPLE句の使用上のルールと制限
- fraction_descriptionの結果、行が返されない場合は、警告メッセージが生成されます。
- count_descriptionが完全に満たされない場合は、警告メッセージが生成され、標本サイズが残りの行数まで削減されます。
- 小数記述(fraction_description)またはカウント記述(count_description)ごとに要求できるのは、標本16個のみです。
- サンプリング リクエストは繰り返されません。同一のデータに対して同一のサンプリングの問合わせが2回実行されると、結果に異なった行をレポートします。
- サンプリングは、派生テーブル、ビューおよびINSERT ... SELECT内で使用されて、行数を削減し、さらに計算を行ないます。
- SAMPLE句を指定したINSERT ... SELECT文が、行のセットを選択するソースがMULTISETテーブルであるが、それらを挿入するターゲットがSETテーブルの場合、サンプル行セットに重複が含まれていると、ターゲットのSETテーブルに挿入される行数は、SAMPLE句で要求される数よりも少なくなる場合があります。
この条件は、SETテーブルが重複行の挿入を拒否するために生じます。この結果として、INSERT ... SELECT文のINSERT部分では、固有の行だけがSETターゲット テーブルに挿入されます。結果として、ターゲット テーブルに挿入された行の数は、SAMPLE句に指定された数よりも少なくなる場合があります。
例えば、INSERT ... SELECT文のSAMPLE句が10行のサンプル サイズを要求し、収集されたサンプル内にMULTISETソース テーブルからの重複行がある場合、システムは、サンプリングされた行をSETテーブルに挿入するときに重複インスタンスを拒否し、サンプル セットから固有の行だけを挿入します。言い換えれば、10行のサンプルを要求できるとしても、ターゲット テーブルに挿入される実際の行数は、サンプリングされた行セット内に重複行がある場合は10に満たない場合があるということです。
この条件が発生しても、システムは警告または情報メッセージは戻しません。
- WHERE、HAVING、QUALIFY、またはON句のサブクエリーでは、SAMPLE句は指定できません。
- 集合演算子UNION、INTERSECT、またはMINUSを使用するSELECT文の中でSAMPLE句を指定することはできません。
- search_conditionが式で呼び出されて値式を返す場合は、スカラーUDFのみを指定できます。
- GROUP BY句に加えて、以下の拡張グループ化オプションのいずれかを指定する問合わせの中では、SAMPLE句を指定できません。
- CUBE
- ROLLUP
- GROUPING SETS
例外が1つあります。それは、GROUP BY句と拡張グループ化オプションが派生テーブルまたはビューの中で指定されていて、SAMPLE句が外問合わせの中で指定されている問合わせの場合です。
- TOP n演算子を含むSELECT文に、SAMPLE句を指定することはできません。
SAMPLEについて
- SAMPLEは、評価されたテーブル式の出力に対して操作を実行します。WHERE句、GROUP BY句、HAVING句またはQUALIFY句を含めることができ、ユーザー指定に従って結果をサンプリングします。
- サンプリングの指定時に置換えを指定してもしなくてもかまいません。
- 標本の割当て方式としてランダムか比例を指定できます。
- SAMPLEID式を使用して、その行が属する標本を識別できます。SAMPLEID式を参照してください。
単純ランダム サンプリング
単純ランダム サンプリングは、要求されたサイズのすべての集合が選択される可能性を等しくするためのプロシージャです。
層化ランダム サンプリング
層状ランダム サンプリングは、比例または割当てランダム サンプリングともいいますが、異種の関心のある母集団を、同種のサブグループ(または層)に分割してから、個々のサブグループからランダムに標本を取るサンプリング方式です。
母集団を同種の層に分割した結果として、層状ランダム サンプリングは母集団全体だけではなく主要サブグループを代表するものともなります。たとえば、小売りアプリケーションが顧客の母集団を、購入時の支払いに現金、小切手、およびクレジット カードを使用する顧客から成るサブグループに分割できます。
サンプリング時の置換えの有無
WITH REPLACEMENTオプションは、置換えを伴うサンプリングが行なわれるよう指定します。デフォルトは、置換えなしサンプリングです。WITH REPLACEMENTを明示的に指定しないと、置換えなしのサンプリングが暗黙に想定されます。
置換えを伴うサンプリングの場合、行がサンプリングされると、そのサンプリングされた行は、サンプリング プールに返されます。結果として、1つの行が複数回サンプリングされることもあります。したがって、入力データ中の行数より多くの行がサンプリングされる可能性があります。複数の標本が要求された場合、すべての標本が母集団全体から取られるので、相互に排他的にはなりません。
置換えなしのサンプリングは、サンプリングされる行が固有であり、サンプリングされた行がサンプリング プールに返されない点で、SETテーブルから行を選択することに似ています。したがって、テーブルの要素数より多くの例を要求すると、エラーまたは警告が返されます。複数の標本が要求された場合、必ず相互排他的になります。
これらの2つの方式によって得られる結果の差の大きさは、母集団と比較した標本のサイズに応じて変わります。母集団に比べて標本が小さいほど、サンプリング時の置換えの有無の結果の差は小さくなります。
ランダムおよび比例形式の行割当て
ランダム形式の割当てとは、要求された行がランダム サンプリングをシミュレートしてAMP間に割り当てられることを意味します。これは、標本のサイズが大きい場合は特に低速のプロセスではありますが、システム全体に対する単純ランダム標本を提供するものとなります。
デフォルトの行割当て方式は比例です。比例方式とは、要求された行が個々のAMP上の行数との相関関係としてAMP間に割り当てられることを意味します。特に標本のサイズが大きい場合は、この方式の方がランダム形式の割当てより高速です。比例割当てには考えられるすべての標本の集合が含まれるわけではないので、結果の標本は単純ランダム標本ではありませんが、ほとんどのアプリケーションの必要に合ったランダム性は十分備えています。
単純ランダム サンプリングとは、母集団中の個々の構成要素がサンプリングされる可能性が等しくて独立していることを意味しますが、指定されている割当て方式に関係なくシステム中のAMPごとに使用されることに注意してください。
アプリケーションにとって適切な割当て方式を決定する方法の1つは、相応のパフォーマンスを獲得するためにAMP間のサンプリング入力を層化してもかまわないか、それともテーブル全体を考慮する必要があるか判別することです。
SAMPLEID値は、層化するかどうかにかかわらず、指定された標本がn個の場合、単純に1, 2, 3, ... nです。したがって、以下のSAMPLE句の場合、
SAMPLE WHEN state = 'CA' THEN |
0.3, |
0.2 |
ELSE |
0.5, |
0.2 |
|
対応するSAMPLEIDは以下のとおりです。 | 1 | 2 | 3 | 4 |