0

日付、時刻、ログ レベル、コンポーネント、メッセージの形式のログ ファイルがあります。スペースで区切られたすべてのフィールド。例えば:

21/06/13 14:42:58.874 FLW CPTView::CPTView サービスとして実行

私はテーブルを作成しています:
CREATE EXTERNAL TABLE IF NOT EXISTS log_messages_temp (date STRING,time STRING,severity STRING,component STRING,message STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\040' LOCATION '/examples/hive/tmp';

クエリを実行しているとき
SELECT message FROM log_messages_temp WHERE time = '14:42:58.874' LIMIT 50; I receive single word "Run" instead of "Run as a service"

すべての残りの文字列 (スペース解析なし) を取得し、最後のメッセージ列に配置するように Hive パーサーに設定を定義する方法は?

ありがとう。

4

1 に答える 1

0

最初にデータを単一列の一時テーブルにロードすると思います。

例: 単一列テーブルは次のようになります:-

一時テーブルが temp_table(dummy string) だとします

つまり、ダミーには文字列全体が含まれます。つまり、「21/06/13 14:42:58.874 FLW CPTView::CPTView Run as a service」

これで、temp_table の各エントリを解析する UDF を作成できます。解析すると、各レコードがスペースで分割されます。ここで、最初の 4 つのフィールド (日付、時刻、重大度、コンポーネント) には、最後のフィールド (メッセージ) としてスペースが含まれていないと想定しています。ここで最初の 4 つのスピットを取り、そのままパスします。残りの分割については、このようにRun_as_a_serviceのように引用符を使用してそれらをまとめることができます。

この UDF を使用して、最終的なテーブルに最後に読み込みます。

これがあなたの原因に役立つことを願っています。

于 2013-07-04T10:00:06.137 に答える