hadoop-创建表时格式化日期

kd3sttzy  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(305)

如何在创建配置单元表的过程中格式化日期?
我目前正在将一些数据转储到工作中的发现环境中,并将日期存储为字符串,因为如果将它们格式化为日期或时间戳,则值为空。
原始数据如下:

12/07/2016 05:07:28 PM

我的理解是hive接受这种格式的日期

yyyy-mm-dd hh:mm:ss

我可以使用select语句格式化这些内容:

select id, receipt_dt, from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as app_dt from MySchema.MyTable where app_num='123456'

我怎样才能在陈述中加上

from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd')

如何将其添加到下面的泛型create external语句中,以便不再将日期存储为字符串,或使用alter table语句更改格式?

CREATE EXTERNAL TABLE IF NOT EXISTS MySchema.My_New_Table 
( Field1 Format, 
Field2 Format, 
Field 3 Format, 
) 
.......
gojuced7

gojuced71#

使用 MyTable 作为包含原始数据的暂存表,并创建最终/目标表 my_new_table 通过变换,即, date 格式…这将是一种edw的过程。。。
例子:

CREATE EXTERNAL TABLE IF NOT EXISTS MySchema.My_New_Table 
( Field1 int, 
Field2 string, 
Field3 date
) 
... more definitions....
AS
select id, receipt_dt, 
cast(from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as date) as app_dt 
from MySchema.MyTable ;

注意:这不是测试语句。你可能需要尝试,编辑,尝试…但你有这个想法。。。
然后插入delta应该是类似的过程。。。

INSERT INTO TABLE MySchema.My_New_Table
AS
select id, receipt_dt, 
cast(from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as date) as app_dt 
from MySchema.MyTable  where <<conditions>>;

相关问题