在impala中将字符串转换为时间戳

yftpprvb  于 2021-06-26  发布在  Impala
关注(0)|答案(3)|浏览(4576)

我如何转换一个 string 表示格式为的日期时间 "YYYY-MM-DD;HH:MM:SS" (即。 2016-04-11;19:38:01 )到一个适当的地方 timestamp ?
我以为这样行得通,但行不通。

select 
  from_unixtime(unix_timestamp(`date`, "YYYY-MM-DD;HH:MM:SS"))
from t1
limit 100;
q43xntqr

q43xntqr1#

正如@jbapple在对我的问题的评论中所建议的那样,问题在于资本化。如 Impala 文献所述
目前,格式字符串是区分大小写的,特别是区分m(表示分钟)和m(表示月份)。在impala 1.3及更高版本中,可以切换元素的顺序,使用可选分隔符,并为每个单元使用不同数量的占位符。添加更多的y、d、h等示例将生成输出字符串,按请求的字符数进行零填充。例外情况是m for months,其中m产生非填充值(如3),mm产生零填充值(如03),mmm产生缩写月名(如mar),并且不允许4个或更多m的序列。包含所有字段的日期字符串可以是“yyyy-mm-dd hh:mm:ss.ssss”、“dd/mm/yyyy hh:mm:ss.ssss”、“mmm-dd,yyyy hh.mm.ss(ssssss)”或占位符和分隔符的其他组合。
正确的写作方式是:

select 
  from_unixtime(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss")) 
from t1 
limit 100;
pn9klfpd

pn9klfpd2#

的返回类型 from_unixtime() 是不是一个“合适的” timestamp “但是一根绳子(以及 unix_timestamp() 不是。。。一 timestamp ,但是 bigint ).
我要做的就是 timestamp 返回类型:

select
  cast(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss") as timestamp)
from t1
limit 100;

为了完整起见,以下是我如何处理时区、本地格式化的日期,并将它们存储为utc时间戳:

select
  to_utc_timestamp(cast(unix_timestamp(`date`, "yyyy-MM-dd;HH:mm:ss") as timestamp), "Europe/Paris")
from t1
limit 100;

这假设 -use_local_tz_for_unix_timestamp_conversions 启动标志为关闭(这是默认值)。

drkbr07n

drkbr07n3#

没有一个答案涉及 unix_timestamp 为我在ClouderaV5上运行 Impala 工作。但是一个简单的 select cast('1985-09-25 17:45:30.005' as timestamp); 作品。
看这个文件

相关问题