sql - Hadoop-创建表时格式化日期

标签 sql date hadoop hive format

在创建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/

相关文章:

sql - 如何从 Access 2010 中的 SQL 存储过程返回多个记录集

java - 我可以使用 Swing TextField 在 Java 中进行日期数学运算吗?

date - 在精确范围内查询最大日期并获取结果中的选定字段

hadoop - Spark对象运行时错误

scala - 使用正则表达式时 Spark S3 访问被拒绝

mysql - 关于规划大型数据库的任何提示

mysql - Mysql减法的奇怪结果

php - 如何防止 PHP 中的 SQL 注入(inject)?

javascript - 将月份数字转换为名称

windows - Windows 7中的Hadoop安装