Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Hive 用毫秒连接列的配置单元_Hive_Hiveql_Unix Timestamp_Epoch_Top N - Fatal编程技术网

Hive 用毫秒连接列的配置单元

Hive 用毫秒连接列的配置单元,hive,hiveql,unix-timestamp,epoch,top-n,Hive,Hiveql,Unix Timestamp,Epoch,Top N,我有一个表,其中包含id、create\u time和code列。 create_time列的类型为字符串,其时间戳值的格式为yyyy MM dd HH:MM:ss.SSSS 现在,我的要求是为每个id查找最新的代码最近的创建时间。如果创建时间列没有毫秒部分,我可以这样做 select id,create_time,code from( select id,max(unix_timestamp(create_time,"yyyy-MM-dd HH:mm:ss")) over (partition

我有一个表,其中包含id、create\u time和code列。 create_time列的类型为字符串,其时间戳值的格式为yyyy MM dd HH:MM:ss.SSSS 现在,我的要求是为每个id查找最新的代码最近的创建时间。如果创建时间列没有毫秒部分,我可以这样做

select id,create_time,code from(
select id,max(unix_timestamp(create_time,"yyyy-MM-dd HH:mm:ss")) over (partition by id) as latest_time from table)a
join table b on a.latest_time=b.create_time

作为UNIX时间函数只考虑秒不毫秒,不能继续进行。


请帮助

为什么要尝试转换?由于您只是在查找最新的时间戳,因此我只需执行以下操作:

select id,create_time,code from(
select id,max(create_time) over (partition by id) as latest_time from table)a
join table b on a.latest_time=b.create_time

没有毫秒的将被处理,因为它们将有000000。

您为什么要尝试转换?由于您只是在查找最新的时间戳,因此我只需执行以下操作:

select id,create_time,code from(
select id,max(create_time) over (partition by id) as latest_time from table)a
join table b on a.latest_time=b.create_time

没有毫秒的将被处理,因为它们将有000000。

您不需要加入

如果需要使用maxcreate\u time的所有记录,请使用rank或dense\u rank。如果有许多记录同时存在,则排名将为所有具有最新创建时间的记录分配1

如果每个id只需要一条记录,即使存在许多create_time=maxcreate_time的记录,请使用row_number而不是rank:


您不需要为此加入

如果需要使用maxcreate\u time的所有记录,请使用rank或dense\u rank。如果有许多记录同时存在,则排名将为所有具有最新创建时间的记录分配1

如果每个id只需要一条记录,即使存在许多create_time=maxcreate_time的记录,请使用row_number而不是rank:


创建时间列为字符串类型。你确定maxcreate\u time会给我最新的时间戳吗?是的,hive支持字符串的max。Max~从这个意义上讲,第一条记录是按降序排列的。当我使用GROUPBY和join而不是使用Max over partition做同样的事情时,我会得到不同的结果。我使用的查询是select id、create_time、code from select id、maxcreate_time as latest_time from group by ida join table b on a.latest_time=b.create_time我认为您得到的行数较少,因为您按id进行聚合,而使用窗口功能-您可能会复制很多行。因此,在第一个示例中,使用窗口功能的嵌套查询将生成id,maxcreate_time,与您拥有的相同id的行数相同,这反过来将在常规查询中产生重复,但这可能是您想要获得的。因此,第二个查询直观上会更好,即没有窗口功能的示例在您提到的查询中,我还添加了id上的连接条件。否则,如果多个id具有相同的创建时间,则会失败。其他一切都很好。谢谢!!!创建时间列为字符串类型。你确定maxcreate\u time会给我最新的时间戳吗?是的,hive支持字符串的max。Max~从这个意义上讲,第一条记录是按降序排列的。当我使用GROUPBY和join而不是使用Max over partition做同样的事情时,我会得到不同的结果。我使用的查询是select id、create_time、code from select id、maxcreate_time as latest_time from group by ida join table b on a.latest_time=b.create_time我认为您得到的行数较少,因为您按id进行聚合,而使用窗口功能-您可能会复制很多行。因此,在第一个示例中,使用窗口功能的嵌套查询将生成id,maxcreate_time,与您拥有的相同id的行数相同,这反过来将在常规查询中产生重复,但这可能是您想要获得的。因此,第二个查询直观上会更好,即没有窗口功能的示例在您提到的查询中,我还添加了id上的连接条件。否则,如果多个id具有相同的创建时间,则会失败。其他一切都很好。谢谢!!!我的问题是创建时间列的毫秒部分。@Vanajayaraman我明白了。我只是提供了用maxcreate\u time获取img记录的最佳方法。这对毫秒很好,因为您的时间戳是可排序的格式,这意味着您可以不经转换直接使用它们。我的问题是create_time列的毫秒部分。@Vanajayaraman我明白了。我只是提供了用maxcreate\u time获取img记录的最佳方法。这对于毫秒来说很好,因为时间戳是可排序的格式,这意味着您可以直接使用它们而无需转换。