Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在';dd/MMM/yyyy';按订单格式和按问题分组_Date_Datetime_Hadoop_Hive - Fatal编程技术网

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
,这就是您需要分组的依据。是的,但我还需要每个日期的计数值。