是否有一种方法可以在时代毫秒内获得日期,或者在蜂巢中得到日期呢?有些函数像"unix_timestamp()“和"from_unixtime()”,但是它们只工作秒。
P.S :我的用例限制我将秒转换为毫秒(秒*1000 =millis)
背景->,我想写一个查询,它应该在hive和雪花中运行,而不改变语法,但是HIVE中列的数据类型是BIGINT,而雪花中的数据类型是时间戳。unix_timestamp('20220714','yyyyMMdd')*1000 > SomeColumn
我在雪花中为unix_timestamp创建了函数,如下所示,它的工作方式与hive函数相同,即它将给定的字符串转换为纪元秒:
CREATE OR REPLACE FUNCTION UNIX_TIMESTAMP(DATE_INPUT String, FORMAT STRING)
RETURNS BIGINT
LANGUAGE SQL
AS $$
DATE_PART(EPOCH_SECOND,TO_TIMESTAMP(DATE_INPUT,FORMAT))
$$;但是雪花中的问题是"<“操作符的左边值是整数,而右边的列是时间戳,这会导致雪花中的错误。
发布于 2022-07-14 11:08:06
我认为最好的解决方案是在蜂箱和雪花上创建一个功能:
CREATE FUNCTION unix_timestamp_ms(date_input STRING, format STRING)
RETURNS BIGINT
BEGIN
RETURN unix_timestamp(date_input,format)*1000
END;请注意,我不能检查上面的函数,我只是假设它将基于HPL/SQL文档工作。http://www.hplsql.org/about
因此,在创建该函数之后,您的查询将类似于:
WHERE unix_timestamp_ms('20220714','yyyyMMdd') > SomeColumn在雪花中,您将创建这样的函数(不需要转换为纪元):
CREATE OR REPLACE FUNCTION unix_timestamp_ms(DATE_INPUT String, FORMAT STRING)
RETURNS TIMESTAMP
LANGUAGE SQL
AS $$
TO_TIMESTAMP(DATE_INPUT,FORMAT)
$$;因此,您可以对蜂箱和雪花使用相同的查询。
https://stackoverflow.com/questions/72979187
复制相似问题