在创建Hive表的过程中如何格式化日期?
目前,我一直在工作时将一些数据转储到发现环境中,并将日期存储为字符串,因为如果将其格式化为DATE或TIMESTAMP,则值将为null。
原始数据如下所示:
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 STATEMENT中,这样我就不必再将日期存储为字符串,也不必使用ALTER TABLE语句来更改格式了?
CREATE EXTERNAL TABLE IF NOT EXISTS MySchema.My_New_Table
( Field1 Format,
Field2 Format,
Field 3 Format,
)
.......
最佳答案
将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 ;
注意:这是未经测试的语句。您可能需要尝试编辑和尝试...但是您有了主意...
然后插入增量应该是类似的过程...
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>>;
关于sql - Hadoop-创建表时格式化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400094/