Date 在';dd/MMM/yyyy';按订单格式和按问题分组
我已将日期存储为Date 在';dd/MMM/yyyy';按订单格式和按问题分组,date,datetime,hadoop,hive,Date,Datetime,Hadoop,Hive,我已将日期存储为[27/Feb/2016:00:24:31+0530]。 我想要日期格式为2016年2月27日,也要按日期下单。 我尝试过该解决方案,但它以2016-02-27的形式返回,并且订购正确 SELECT TO_DATE( FROM_UNIXTIME( UNIX_TIMESTAMP( SUBSTR( time, 2, 11), 'dd/MMM/yyyy' ))) AS real_date, url FROM cleanned_logs ORDER BY real_date ASC
[27/Feb/2016:00:24:31+0530]
。
我想要日期格式为2016年2月27日,也要按日期下单。
我尝试过该解决方案,但它以2016-02-27
的形式返回,并且订购正确
SELECT
TO_DATE( FROM_UNIXTIME( UNIX_TIMESTAMP( SUBSTR( time, 2, 11), 'dd/MMM/yyyy' ))) AS real_date,
url
FROM cleanned_logs
ORDER BY real_date ASC;
为了获得所需的格式,我尝试使用date\u format()
函数。它在1.2.1中不可用,所以我从1.0.1切换到它
SELECT
DATE_FORMAT( FROM_UNIXTIME( UNIX_TIMESTAMP( SUBSTR(time,2,11),'dd/MMM/yyyy')), 'dd/MMM/yyyy') AS real_date,
url
FROM cleanned_logs
ORDER BY real_date ASC;
它给了我想要的格式,但顺序不正确
SELECT
TO_DATE( FROM_UNIXTIME( UNIX_TIMESTAMP( SUBSTR( time, 2, 11), 'dd/MMM/yyyy' ))) AS real_date,
url
FROM cleanned_logs
ORDER BY real_date ASC;
更新:
SELECT display_date,COUNT(url) FROM
(
SELECT SUBSTR(time,2,11) as display_date,url,UNIX_TIMESTAMP(SUBSTR(time,2,11),'dd/MMM/yyyy') as real_date FROM cleanned_logs order by real_date ASC
)b group by real_date;
在分组中产生问题。在这里,hive期望select子句中出现
real\u date
我认为您将数据的格式或显示与底层数据本身混淆了。如果表将日期存储为以一种方式格式化的字符串,[27/Feb/2016:00:24:31+0530]
它仍然是一个字符串,并且字符串排序与实际日期、时间戳或数字不同
理想情况下,将日期存储为时间戳
数据类型。要显示它时,请使用DATE\u格式
;要对它进行排序时,请在基础数据字段上使用ORDER BY
。因此,如果您的字段类型为TIMESTAMP
,称为some\u time
,您可以按如下方式进行查询:
SELECT DATE_FORMAT(some_time, 'dd/MMM/yyyy')
FROM some_table
WHERE some_condition
ORDER BY some_time DESC
如果您被一个存储为有效时间戳值的字符串所困扰,那么您可能需要做更多的工作
SELECT SUBSTR(some_time, 2, 11)
FROM some_table
WHERE some_condition
ORDER BY unix_timestamp(SUBSTR(some_time,2,11), 'dd/MMM/yyyy'))
第二个选项显示所需的值,并按数字排序——unix时间戳只是一个数字,但它的顺序与日期相同,因此无需将其转换为实际日期。是的,我感到困惑,因为两个函数文档中都写入了字符串返回类型。我之前尝试过第二个选项,但hive希望在select子句中按字段分组。当select中有聚合函数时,需要使用
group by
——您添加了COUNT
,这就是您需要分组的依据。是的,但我还需要每个日期的计数值。