2017-07-21 7 views
2

これは面白いバグ/問題です。 CDH5.8(Cloudera Distribution for Hadoop)の下にあるImpalaとHUEを使用しています。以下のコードインパラでSTRINGをDATEにキャストしています。 (考えられるバグ)

select '1709.02.02' as DateString, CAST((from_unixtime(UNIX_TIMESTAMP('1709.02.02','yyyy.MM.dd'))) as TIMESTAMP) as DateTimestamp 

を実行する上で

(予想される)を以下のようにIが出力を得る

datestring datetimestamp 
1709.02.02 1709-02-02 00:00:00 

しかし

select '1009.02.02' as DateString, CAST((from_unixtime(UNIX_TIMESTAMP('1009.02.02','yyyy.MM.dd'))) as TIMESTAMP) as DateTimestamp 

以下のコードを実行することに表示出力します次のようになります(これは予期しません)。

datestring datetimestamp 
1009.02.02 NULL 

なぜこのようなことが起こっているのかを知ることができますか?

PS:上記のクエリがHiveで実行されているとうまくいくようです。しかし、ImpalaではNULL値を取得しています。

+0

私は、Impalaには年間の制限があると思います。 1400〜10000。 – philantrovert

答えて

5

Impalaは、1400年から9999年の間にのみTIMESTAMPをサポートしているため、これらの範囲外のTIMESTAMP値はNULLになります。

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_timestamp.html#timestamp

+0

@Mattにお返事ありがとうございます。あなたがApache Impalaで働いていることはとても涼しいです。 :)この問題に戻って、帰り道があるかどうか教えてください。また将来、日付範囲を拡張する計画はありますか? –

+1

こんにちは@ArshSheth - あなたの日付を文字列またはBIGINTとして保存することをお勧めします(たとえば、いくつかのエポックからの秒数)。残念ながら、両方には短所があります。この範囲外の日付をサポートするために直ちに作業することはありません。残念ながら、現在のTIMESTAMP型はImpalaが使用する基本的なブーストライブラリによって制限されています。 – Matt

+1

また、別のフィールドを書くことも考えられます。 INT年、TINYINT月、TINYINT日、... – Matt

関連する問題