"YYYY-MM-DD;HH:MM:SS"
(つまり2016-04-11;19:38:01
)の形式の日時を表すstring
を適切なtimestamp
に変換するにはどうすればよいですか?文字列をインパラのタイムスタンプに変換する
これはうまくいくと思っていましたが、そうではありません。
select
from_unixtime(unix_timestamp(`date`, "YYYY-MM-DD;HH:MM:SS"))
from t1
limit 100;
"YYYY-MM-DD;HH:MM:SS"
(つまり2016-04-11;19:38:01
)の形式の日時を表すstring
を適切なtimestamp
に変換するにはどうすればよいですか?文字列をインパラのタイムスタンプに変換する
これはうまくいくと思っていましたが、そうではありません。
select
from_unixtime(unix_timestamp(`date`, "YYYY-MM-DD;HH:MM:SS"))
from t1
limit 100;
私の質問に@jbappleが示唆しているように、問題は大文字になります。
現在インパラのドキュメントで述べたように、フォーマット文字列は、特に にヶ月分とMのためメートルを区別し、大文字と小文字が区別されます。インパラ1.3以降では、 要素の順序を変更し、代替セパレータ 文字を使用し、各ユニットに異なる数のプレースホルダを使用できます。 y、d、Hなどのインスタンスをさらに追加すると、出力文字列 が要求された文字数にゼロパディングされます。例外は月間M であり、Mは3などの浮き彫りのない値を生成し、MMは のように0を埋め込み、MMMは月などの短縮月名 を生成し、4以上のM許可されていません。すべてのフィールドを含む日付 文字列は、 "yyyy-MM-dd HH:mm:ss.SSSSS"、 "dd/MM/yyyy HH:mm:ss.SSSSS"、 "MMM dd、yyyy HH.mm.ss" (SSSSSS)」または 他のプレースホルダと区切り文字の組み合わせ。
それを書くの正しい方法は次のとおりです。
select
from_unixtime(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss"))
from t1
limit 100;
from_unixtime()
の戻り値の型は、「適切なtimestamp
」が、文字列ではありません。 (返品タイプはunix_timestamp()
ではなく、timestamp
ですが、bigint
です)。ここで
は、私がtimestamp
戻り値の型を取得するために何をすべきかです:ここでは、完全を期すために
select
cast(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss") as timestamp)
from t1
limit 100;
を、私はタイムゾーンを扱う方法ですローカルにフォーマットされた日付、およびUTCタイムスタンプとしてそれらを保存する:
select
to_utc_timestamp(cast(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss") as timestamp), "Europe/Paris")
from t1
limit 100;
これは、-use_local_tz_for_unix_timestamp_conversions
起動フラグがオフであることを前提としています(これがデフォルトです)。
「警告:日付/時刻変換の形式が正しくない:YYYY-MM-DD; HH:MM:SS」を返します。マニュアルを読むと、大文字と小文字が区別されます。ここは:http://www.cloudera.com/documentation/enterprise/latest/topics/impala_datetime_functions.htmlです。 from_unixtimeのセクションを探して、unix_timestampでフォーマットを使用する方法を説明しています。 – jbapple