24

タイムスタンプ列を含むログ ファイルがあります。タイムスタンプは UNIX エポック時間形式です。

年、月、日のパーティションを持つタイムスタンプに基づいてパーティションを作成したいと考えています。

これまでのところ、これを行っていますが、エラーがスローされています。

PARSE ERROR cannot recognize input '(' in column type

これが私のコードです。

from (
      from raw_data
            MAP  ${PREFIX}raw_data.line
            USING 's3://scripts/clean.py'
            AS (timestamp STRING, name STRING)
      ) map_out
INSERT OVERWRITE TABLE date_base_data_temp PARTITION(year(timestamp), month(timestamp)), day(timestamp))) 
    select map_out.name;
4

5 に答える 5

56

おっと、それは醜く見えます。Hive でこの関数を使用してみてください。

SELECT from_unixtime(unix_timestamp) as new_timestamp from raw_data ...

または、タイムスタンプがms秒の代わりにある場合:

SELECT from_unixtime(unix_timestamp DIV 1000) as new_timestamp from raw_data ...

UNIX タイムスタンプを YYYY-MM-DD HH:MM:SS 形式に変換すると、次の関数を使用して年、月、日を取得できます。

SELECT year(new_timestamp) as year, month(new_timestamp) as month, day(new_timestamp) as day ...
于 2011-09-23T16:01:12.553 に答える
12

Hive と SparkSQL の最近のリリースでは、日付のデータ型と型キャスト オプションを使用できます。以下は、Spark SQL だけでなく Hive でも機能するはずです。

SELECT cast(from_unixtime(epoch_datetime) as date) from myHiveTable
于 2016-06-14T22:07:35.270 に答える