hive将时间字符串转换为timestamp的几种写法

2024-05-06 15:36

本文主要是介绍hive将时间字符串转换为timestamp的几种写法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写法一

select from_utc_timestamp(from_unixtime(unix_timestamp('2023-8-7 9:38:10 UTC+08:00', 'yyyy-MM-dd HH:mm:ss')), 'UTC');

写法二

select cast(unix_timestamp('2023-8-7 9:38:10 UTC+08:00', 'yyyy-MM-dd HH:mm:ss') as timestamp);

写法三

select cast(trim(split(upper('2023-10-31 4:46:40 UTC+0800')'UTC')[0]) as timestamp); 

这种方式我觉得过于复杂了。

使用到的函数

unix_timestamp

  • 函数签名
bigint unix_timestamp(string datetime, string format)
  • 函数返回值
    bigint类型的时间戳整数

  • 函数入参
    第一个参数是string类型的时间,比如’2024-01-10 20:44:00’。
    第二个参数是string类型的时间格式化的格式,比如’yyyy-MM-dd HH:mm:ss’。

  • 函数使用

-- 将给定时间字符串转换为指定格式的时间戳数字
select unix_timestamp('2023-12-4 4:45:12 UTC+08:00', 'yyyy-MM-dd HH:mm:ss');
-- 输出为1701619200
-- 获取当前时间戳
select unix_timestamp();
  • 注意点
    方法的返回值在spark中可以直接强转为timestamp。
    在hive中不能直接转为timestamp,强转会转为很奇怪的时间。
    如果要在hive中将此函数返回值转为timestamp,则需要使用cast函数转为timestamp。

from_unixtime

  • 函数签名
string from_unixtime(bigint time, string fromat)
  • 函数返回值

  • 函数参数
    bigint类型的时间戳。
    string类型的格式,用于指定函数返回值的格式,可以省略,如果省略,则默认为’yyyy-MM-dd HH:mm:ss’

  • 函数使用

select from_unixtime(1701619200, 'yyyy-MM-dd HH:mm:ss');
-- 省略format
select from_unixtime(1701619200);

测试

可以使用以下字符串作为输入进行测试。
以下各市的字符串经过在beeline客户端进行测试,均能转换为timestamp,且时间精度不会丢失

2023-8-31 15:40:56-- 能够将带有UTC格式的字符串转换为时间戳,然后再转换为timestamp。
-- 但是会有8个小时的误差,上述的方法貌似是直接把UTC字符串给去掉了。                                                                                                                                                          
2023-12-4 4:45:12 UTC+08002023-10-17 3:38:1 UTC+08002023-5-3 13:7:02024-01-10 20:44:00.048

参考

unix_timestamp 时间戳函数用法(hive)

这篇关于hive将时间字符串转换为timestamp的几种写法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964725

相关文章

2024华为OD机试真题-分割均衡字符串-C++(C卷D卷)

题目描述 均衡串定义: 字符串只包含两种字符,且两种字符的个数相同。 给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。 约定字符串中只包含大写的X和Y两种字符。 输入描述 均衡串: XXYYXY 字符串的长度[2,100001]。给定的字符串均为均衡串 输出描述 可分割为两个子串: XXYY XY 备注 分割后的子串,是原字符串的连续子串。 用例1 输入 XXYYXY 输出 2

linux下Spark SQL与hive hbase mysql集成

虚拟机环境:centos6 下述软件版本依自己本机版本相应修改 一、Spark SQL 与Hive集成(spark-shell) 1.需要配置的项目     1)将hive的配置文件hive-site.xml拷贝到spark conf目录,同时添加metastore的url配置。         执行操作: vi hive-site.xml,添加如下内容: <property><n

字符串操作java

题目: 描述 给定长度为n的只有小写字母的字符串s,进行m次操作,每次将[l,r]范围内所有c1字符改成c2,输出操作完的字符串 输入描述: 第一行两个数n,m 第二行一个字符串s 之后m行,每行两个数l 、r两个字符c1、 c2 输出描述: 输出一行一个字符串 示例1 解题代码: import java.util.Scanner;public class Main {pub

LeetCode 算法:找到字符串中所有字母异位词c++

原题链接🔗:找到字符串中所有字母异位词 难度:中等⭐️⭐️ 题目 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1: 输入: s = “cbaebabacd”, p = “abc” 输出: [0,6] 解释: 起始索引等于 0 的子串是 “cba”,

Python字符串数据类型之字符串

四、Python数据类型 4.1、Python内置数据类型 整型:int浮点型:float布尔类型:bool字符串:str二进制类型:bytes、bytearray复数:complex列表:list元组:tuple字典:dict a = 100 # 整型print(type(a))a = 100.0 # 浮点型print(type(a))a = True # 布尔类型print

Leetcode:字符串转换整数 (atoi)

题目链接:8. 字符串转换整数 (atoi) - 力扣(LeetCode) 普通版本(条件限制) class Solution {public:int myAtoi(string s) {int res = 0;int i = 0;int flag = 1;//假设整数为正while(s[i] == ' ')//跳过空格{i++;}if(s[i] == '-')//如果空格后的符号为-则将f

php使用curl的post方法字符串和数组传值的区别

最近在工作中需要请求第三方的一个java版的接口,起初是使用数组进行传参,代码写完之后发现接口死活调试不通,总是提示传参为空,纠结了很久之后,决定尝试使用字符串传参的方式来请求接口,没想到这次居然调试成功了,这让我有了研究这两者究竟有何区别的兴趣。 本地的测试代码如下: curl.php <?phpfunction curl_post($url, $data){$ch = curl_ini

代码随想录算法训练营Day55 | 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇

代码随想录算法训练营Day55 | 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇 LeetCode 583. 两个字符串的删除操作 题目链接:LeetCode 583. 两个字符串的删除操作 思路: 分别删除 class Solution {public:int minDistance(string word1, string word2) {int m = word

hive输出格式转化,本例以json为例

hive默认是以tab为分隔符,分隔各个输出字段,如   hive> select get_json_object(json.value,'$.hour'),get_json_object(json.value,"$.channel") from json limit 10; Total MapReduce jobs = 1 Launching Job 1 out of 1 Nu

hive输出json字符串

目前没发现有什么方便的函数可以直接使用,只能使用concat来手工拼接。 注意将null的字段值转为空,使用nvl函数 如果将hql语句写在script.q文件里面如下:   select concat('{"data_dt":"',a.data_dt,'","user":"',NVL(a.`user`, ''),'","click":"',NVL(a.click, ''),'"}') as