2017-01-10 4 views
0

複数の数値の列名を取り、その数値に数値があるかどうかを調べるハイブクエリを生成しようとしています。カラムが数値を持っている場合、出力はフィールドがNULLまたはいくつかの文字列値を持つ場合、出力は(偽、列名)である必要がありそうでない(真の列名)である必要がありハイブ - 数値の列に数値/小数があるかどうかを確認する方法は?

SELECT distinct (test_nr1,test_nr2) FROM test.abc WHERE (test_nr1,test_nr2) not like '%[^0-9]%'; 

SELECT distinct test_nr1,test_nr2 from test.abc limit 2; 
test_nr1 test_nr2 
NULL 81432269 
NULL 88868060 

the desired output should be : 
test_nr1 false 
test_nr2 true 

test_nr1は10進数フィールドであるので、 NULL値を持つ場合、falseを出力する必要があります。

貴重なご意見をお待ちしています。

+0

あなたの質問を編集して、サンプル・データと望ましい結果を表示してください。 –

答えて

0

ここで文字クラスパターン一致構文を使用しようとしていますが、すべてのSQL実装IIRCでは動作しませんが、regexp一致はほとんどのSQL実装で機能します。あなたはハイブを使用している、これはそれを行う必要があります考慮

SELECT ('test_nr1', test_nr1 RLIKE '\d'), ('test_nr2', test_nr2 RLIKE '\d') FROM test.abc; 

正規表現マッチングはしかし、SQLで非常に遅いことを覚えておいてください。

1

キャスト機能を使用できます。 NULLを返した場合、値は数値ではありません。例えば

select case when cast('23ccc' as double) is null then false else true end as IsNumber; 
関連する問題