0

ハイブの2つのテーブルで左外部結合を行っています。

table 1 : name1
table 2 : name2 , class ( only two values Y or N)

table1 の名前は、table 2 のスーパーセットです。

最終的な結果テーブルには name1、class が必要です

私のクエリは

select table1.name1 , translate(table2.class,NULL,'N') 
from table1 left outer join table2 
on (name1= name2);

これはうまくいきますか?

私も reexp_replace を試しましたが、うまくいきません

select table1.name1, regexp_replace(table2.class,NULL,'N') from table1 left outside join table2 on (name1= name2);

4

1 に答える 1

1

Hive 変換 UDF を作成していたとき、PostGreSQL の変換 UDF と同じ動作を維持したいと考えました。PostGreSQL と同様に、変換 UDF への引数のいずれかが NULL の場合、結果は NULL になります。

これは、UDF の Hive ソースの次の行にも示されています。

if (arguments[0].get() == null || arguments[1].get() == null || arguments[2].get() == null) {
      return null;
    }

完全なソースはこちらから入手できます。

あなたの質問から私が理解していることから、名前がtable1に存在するがtable2には存在しない場合、「N」を出力したいと考えています。もし私がそれをしていたら、私は(未テスト)のようなことをします:

SELECT
   table1.name1,
   COALESCE(table2.name2, 'N') as name2
FROM
   table1
   LEFT OUTER JOIN
   table2
   ON (table1.name1 = table2.name2);

合体 UDF の詳細については、Hive UDF wiki ページを参照してください。

ご質問のおかげで、入力パラメーターの 1 つが NULL の場合を明確にするために、 Hive UDF wiki ページの翻訳 UDF の説明を更新しました。

于 2012-06-28T17:50:06.723 に答える