0

IN クエリを半左結合に置き換える必要があることは知っていますが (例: Hive does not support in, exists. How do I write the following query? )、それを WHERE 句と組み合わせる方法がわかりません。 :

SELECT * 
          from foo 
          WHERE userId IN 
             (SELECT distinct(userId) FROM foo WHERE x=true ORDER BY RAND() LIMIT 100);

ありがとう。

編集:クエリを変更しました。目的は、エントリのランダム サンプルを作成することです (統計的に)。

4

2 に答える 2

2

(完全を期すために別のアプローチを投稿しています。)

テーブルから一連のレコードをサンプリングするには、Hive のTABLESAMPLE構文を使用できます。たとえば、使用する 100 個の個別の userId のランダム サンプルを選択します。

SELECT userId 
FROM (SELECT DISTINCT(userId) as userId FROM foo) f
TABLESAMPLE(100 ROWS); 

この構文を使用すると、さまざまな方法でサンプル サイズを指定できます。以下も有効です。

SELECT userId 
FROM (SELECT DISTINCT(userId) as userId FROM foo) f
TABLESAMPLE(1 PERCENT); 

詳細については、このトピックのマニュアル ページを参照してください

userId のサンプルを取得したら、Manuel Aldana の以前の回答を使用して、元のテーブルから対応するレコードを選択できます。

于 2013-07-24T10:58:15.990 に答える