2016-12-13 12 views

答えて

2

ハイブはこのようなメカニズムを提供していません。あなたの選択でUDFを使用してこれを達成することができます:from_unixtime(unix_timestamp()) as created_at。これは各マッパーまたはレデューサーで実行され、異なる値を返すことに注意してください。あなたは(1.2.0以前ハイブのバージョンのための)すべてのデータセットに対して同じ値が必要な場合は、スクリプトに変数を渡しとして内部にそれを使用する:'${hiveconf:created_at}' as created_at

更新:の開始時に現在のタイムスタンプを返しますcurrent_timestampクエリ評価(ハイブ1.2.0)。同じクエリ内のcurrent_timestampのすべての呼び出しは、同じ値を返します。 unix_timestamp()現在のUnixタイムスタンプを秒単位で取得します。この関数は非決定論的であり、クエリの適切な最適化を妨げます。これはCURRENT_TIMESTAMP定数のために2.0以降推奨されていません。だから、それは関数ではなく、定数です! このドキュメントを参照してください:ハイブのhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

はCURRENT_TIMESTAMPは、すべてのファイル(複数可)とにかく書き換えられているので、あなたが、レコードではなく、テーブルまたはパーティションを書き換えるかに挿入すると、そのためcreated_atタイムスタンプは同じであるべき望ましい照会します。

+1

もし 'unix_timestamp()'の代わりに 'current_timestamp()'を使うと、値はまだマッパー/レデューサごとに変わるのでしょうか? –

+0

変更されません。ドキュメントによると、current_timestamp は、クエリ評価の開始時(Hive 1.2.0以降)に現在のタイムスタンプを返します。同じクエリ内のcurrent_timestampのすべての呼び出しは、同じ値を返します。この質問をありがとう。私はそれに応じて私の答えを変更します – leftjoin

+0

私はすでに1.2.1バージョンに移行しているので、この機能を私のすべてのコードに適用します。この質問はもう一度ありがとう – leftjoin