MySQL can automatically record created_at and updated_at timestamps. Hiveは同様のメカニズムを提供していますか?そうでない場合、この機能を実現するにはどうすればよいでしょうか?Hiveにcreated_atとupdated_atタイムスタンプを記録する方法は?
2
A
答えて
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
タイムスタンプは同じであるべき望ましい照会します。
もし 'unix_timestamp()'の代わりに 'current_timestamp()'を使うと、値はまだマッパー/レデューサごとに変わるのでしょうか? –
変更されません。ドキュメントによると、current_timestamp は、クエリ評価の開始時(Hive 1.2.0以降)に現在のタイムスタンプを返します。同じクエリ内のcurrent_timestampのすべての呼び出しは、同じ値を返します。この質問をありがとう。私はそれに応じて私の答えを変更します – leftjoin
私はすでに1.2.1バージョンに移行しているので、この機能を私のすべてのコードに適用します。この質問はもう一度ありがとう – leftjoin