syslog メッセージがタイムスタンプ、ホスト、プログラム名 + pid、およびメッセージの 4 つの列に分割されるように、Hive 外部テーブルを作成しようとしています。テーブルをImpalaでも使用できるようにしたいので(Regex Serdeをサポートしていません)、Regex serdeに頼らずにこれを行いたいと思います。
問題は、4 つのフィールドを持つスキーマを定義し、フィールド セパレータとして "\040" を指定すると、メッセージの最初の文字列だけになってしまうことです。たとえば、このログ行:
2014-01-01T04:00:00 myhost sshd[9008]: joe logged in from 192.168.1.1 with password ....
次のようにマッピングされます。
timestamp: 2014-01-01T04:00:00
host: myhost
prog: sshd[9008]:
msg: joe
「...からログインしました」は切り捨てられます。
列が 4 つある場合、残りのフィールドを除外するのではなく、最後の列に配置するように Hive に指示する方法はありますか? 貪欲なオプション?
ありがとう