Hive 使用第一个unix\u时间戳将列中的每一行转换为最新

Hive 使用第一个unix\u时间戳将列中的每一行转换为最新,hive,timestamp,unix-timestamp,Hive,Timestamp,Unix Timestamp,我有以下格式的行,我想转换成有效的配置单元时间戳。“我的数据”中的格式: 28/04/2017 00:00:00|20550|22/05/2017 00:00:00| 我只对第一列和第三列感兴趣,用|分隔,在我的例子中,格式是,然后: dd/MM/yy HH:mm:ss 我发现这不能在蜂箱中用作时间戳 我发现自己无法使用类似以下查询将所有第一列和第三列转换为正确的格式: select from_unixtime(unix_timestamp('28/04/2017','dd/MM/yy HH

我有以下格式的行,我想转换成有效的配置单元时间戳。“我的数据”中的格式:

28/04/2017 00:00:00|20550|22/05/2017 00:00:00|
我只对第一列和第三列感兴趣,用|分隔,在我的例子中,格式是,然后:

dd/MM/yy HH:mm:ss
我发现这不能在蜂箱中用作时间戳

我发现自己无法使用类似以下查询将所有第一列和第三列转换为正确的格式:

select from_unixtime(unix_timestamp('28/04/2017','dd/MM/yy HH:mm:ss'),'yyyy-MM-dd') from `20170428_f_pers_pers`
我正在尝试该查询的不同实例,但由于我无法访问文档(internet在工作时被限制),我看不到如何正确使用这两个函数,
from\u unixtime
unix\u timestamp

我做了以下假设:

  • 我可以重新安排日子和年份。如果这不是真的,我不知道如何将原始数据转换为适当的配置单元格式
  • 当我进行此选择时,它会影响整个列。此外,在成功完成此操作后,我应该能够将整个列的格式从字符串更改为时间戳(可能我必须为此创建一个新列,不确定)
  • 我不在乎同时做两个列,但现在当我首先做查询时,我得到的空值和我的表中的数据一样多,我不确定我的假设是否部分正确,因为我遇到的每个例子都比较简单(例如,它们不会改变前后的天数和年份)

    我想知道如何将查询应用于特定的列,因为我还没有从到目前为止所研究的示例中了解如何做到这一点。我没有看到他们为此使用任何类型的列ID,这对我来说很奇怪,使用列中的数据来更改列本身

    提前谢谢

    编辑:我现在正在尝试类似的东西

    select from_unixtime(unix_timestamp(f_Date, 'dd/MM/yyyy HH:mm:ss')) from `myTable`
    
    但我从HUE得到以下错误:

    Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
    

    输入字符串应完全覆盖格式。
    换句话说-
    格式的长度可以等于输入字符串的长度,也可以更短,但不能更长

    28/04/2017 00:00:00
    |||||||||||||||||||
    dd/MM/yyyy HH:mm:ss
    

    2017-04-28 00:00:00



    2017-04-28 00:00:00


    使用
    cast

    select cast (from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy HH:mm:ss')) as timestamp)
    

    我懂了。。。是否可以将该查询应用于列中的所有数据?最终的想法是将数据作为时间戳,这可能吗?也许这就是为什么这个查询总是失败的原因。这对我来说真的很有帮助,因为我也在寻找投球的方法。但是,如果不是只有一行,而是有2000行,是否可以将该操作应用于整个列?例如,如果“2017年4月28日00:00:00”在“日期”列中,您如何将您向我展示的操作应用于该列中的每一行?可能吗?当然可能。标量函数适用于表达式。为什么硬编码表达式和列名之间会有任何区别?为什么查询一个2000行的表和查询一个单行的“表”会有什么区别呢?因为当我用一个列名和一个表切换您的工作示例时,查询失败了:S我正在使用这个,稍微改编自您的示例:select cast(从unixtime(到unix)timestamp(f_date,'dd/MM/yyyy HH:MM:ss'))作为时间戳)从
    表中
    如果出现故障,则很可能与您的帖子/我的答案无关。如果我的示例“按原样”适用于您,那么为您打开一个新问题,并包含完整的堆栈跟踪
    28/04/2017 00:00:00
    ||||||||||
    dd/MM/yyyy
    
    select  from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy')) 
    
    select cast (from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy HH:mm:ss')) as timestamp)