ToDate() を使用して文字列を日時オブジェクトに変換しようとする Pig スクリプトを使用しています。これが私が扱っているサンプル文字列ですFri Nov 01 12:30:19 EDT 2013
ToDate(userstring, format)を使用して日時オブジェクトに変換しようとすると、無効な形式を使用していると言われます...
B = FOREACH A GENERATE ToDate(date,'EEE MMM dd HH:mm:ss z yyyy') AS datetime;
ERROR org.apache.pig.tools.grunt.GruntParser - ERROR 2999: Unexpected internal error. Invalid format: "Fri Nov 01 12:30:19 EDT 2013" is malformed at "EDT 2013"
その理由は、Pig が Joda Time を使用しており、EDT が有効な Joda Time タイム ゾーンではないためだと強く考えています。問題ありません。ドキュメントによると、Pig は Simple Date Format を使用しており、文字列をエスケープできます (最初の例を参照)。それができないように見えることを除いて...
ToDate(date,"EEE MMM dd HH:mm:ss 'EDT' yyyy") <-- unexpected character '"'
ToDate(date,'"EEE MMM dd HH:mm:ss 'EDT' yyyy"') <-- expecting semicolon error
ToDate(date,'EEE MMM dd HH:mm:ss 'EDT' yyyy') <-- expecting semicolon
ToDate(date,'EEE MMM dd HH:mm:ss \'EDT\' yyyy') <-- malformed at " EDT 2013"
ToDate(date,'EEE MMM dd HH:mm:ss "EDT" yyyy') <-- Illegal pattern component: T
等々。ピッグに「EDT」文字を無視させようとして、引用符とエスケープ文字のすべての組み合わせを試したと確信していますが、何もうまくいかないようです(上記のほとんどは暗闇で撮影しただけです)。
バグレポートまたはこれに関する何かを開く前に、2 つの質問があります。1) EDT がサポートされているタイムゾーンではないため、これが失敗しているのは正しいですか? それとも私のパターンがどこか間違っていますか?2) EDT が原因で失敗している場合、それらの文字をエスケープする方法はありますか、またはこのステップで何か間違ったことをしていますか?