如何在hive中将unix纪元时间转换为日期字符串

时间:2011-08-26 22:40:43

标签: function hive database-partitioning

我有一个包含时间戳列的日志文件。时间戳采用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;

5 个答案:

答案 0 :(得分:37)

Oof,看起来很难看。尝试在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 ...

答案 1 :(得分:7)

随着最新版本的Hive和SparkSQL,可以使用日期和类型转换选项的数据类型。以下应该在Hive以及Spark SQL

中工作
SELECT cast(from_unixtime(epoch_datetime) as date) from myHiveTable

答案 2 :(得分:5)

如果您需要以自定义格式转换日期,请使用:

select date_format(from_unixtime(epoch_datetime),'yyyMM') as formatted_date from myHiveTable;


这将返回作为yearMonth的日期,例如201708

答案 3 :(得分:2)

将此查询添加到需要将时间戳转换为字符串分区的日期字符串yyyy-MM-dd的列表中:

return Single.create( e -> {
            ArrayList<SomeModel> arrayList = new ArrayList<>();
            realm.where(SomeModel.class)
                    .findAllSortedAsync("createdOn", Sort.DESCENDING)
                    .asObservable()
                    .filter(RealmResults::isLoaded)
                    .subscribe(someModelsAsRealmResult -> {
                        arrayList.addAll(someModelsAsRealmResult);
                        e.onSuccess(arrayList);
                    });
        });

答案 4 :(得分:-1)

select order_id, date_format(from_unixtime(order_date/1000),'yyy-MM-dd') as order_date ,order_customer_id,order_status
from orders

或者如果您看到相同的任何错误,请尝试使用 选择order_id,date_format(from_unixtime(order_date DIV 1000),'yyy-MM-dd')作为order_date,order_customer_id,order_status     来自订单