转换日期戳在蜂房

问题描述 投票:1回答:1

我在RDBMS,其中的日期格式为“1986年12月1日”的表。我使用的蜂巢0.08不是0.12。

而我将数据导入到蜂巢我得到空的时间戳,没有任何选项,直接从文件中填充表中的数据(该数据是相当大的)。或者我必须使用过程中的阶段表字符串,然后使用功能,将数据转换成timetamp,如果是的话这将是什么样的?

谢谢 !

mysql date hadoop hive timestamp
1个回答
3
投票

我将你基于MySQL的回答,因为我看到一个标签,在这个职位,关系数据库管理系统的名字。那么,你有三种选择。

1.过滤上Sqoop查询侧

我这里假设你使用Sqoop导入数据。这个工具有一个选项,允许您导出一个SQL查询的结果。在该查询你可以使用这个MySQL方法,UNIX_TIMESTAMP(日期格式),即变换日期时间戳。该Sqoop指令将是这样的:

sqoop import --connect jdbc:mysql://mysqlhost/mysqldb \
    --username user \
    --password passwd \
    --query "SELECT col_1, ..., UNIX_TIMESTAMP(STR_TO_DATE(date_col, '%Y-%m-%d')) FROM table1 WHERE \$CONDITIONS" \
    -m 1 \
    --target-dir hive_table1_data`

请注意,WHERE \ $条件是强制性的。此外,我已经在这里假设你的日期列是一个字符串。但是,如果它是一个日期类型,则不需要方法STR_TO_DATE。

2.在RDMS侧

在这一点上,我会假设你有权限创建该数据库视图。

其他的解决方案是创建一个包含转化为时间戳字段日期视图。正如我们看到了以下功能是UNIX_TIMESTAMP(日期格式)。 Here你有更多的细节。在你的情况,你应该写这样的事情:

CREATE VIEW view_to_export AS 
  SELECT 
      fields1,
      ...,
      UNIX_TIMESTAMP(STR_TO_DATE(field_date, '%Y-%m-%d'));

假设你的日期字段是一个字符串数据类型,如果它是一个日期数据类型,不需要方法STR_TO_DATE。该sqoop指令将是这样的:

sqoop import --connect jdbc:mysql://mysqlhost/mysqldb \
    --username user \
    --password passwd \
    --table mysql_table_name \
    -m 1 \
    --target-dir hive_table1_data

那么,这一观点,你可以用sqoop使用它没有问题。

3.导入数据后

如果您在使用其他种类的进口系统的,但你必须存入您的HDFS的数据。您可以创建与转化领域的又一新表。要做到这一点,你可以使用这样的事情:

INSERT INTO TABLE my_table
SELECT
   col_1,
   ...,
   unix_timestamp(date_col, 'yyyy-MM-dd')
)
FROM exported_table;

在这种情况下,你需要更多的时间来处理。但它是独立于您导入数据,并使用更少的资源,从MySQL服务器的方式,因为你不必从日期计算改造时间戳每一行。您委派到Hadoop的哪个任务是处理大量的数据。

© www.soinside.com 2019 - 2024. All rights reserved.