gpt4 book ai didi

mysql - 将日期转换为配置单元中的时间戳

转载 作者:可可西里 更新时间:2023-11-01 15:05:08 25 4
gpt4 key购买 nike

我在 rdbms 中有一个表,其中日期格式为“1986-12-01”。我使用的是配置单元 .08 而不是 .12。

当我将数据导入配置单元时,时间戳为空,是否有任何选项可以直接从文件中填充表中的数据(数据非常大)。或者我必须使用带有字符串的阶段表,然后使用函数将数据转换为时间戳,如果是这样的话会是什么样?

谢谢!

最佳答案

我会根据 MySQL 来回答你,因为我在这篇文章中看到了一个带有那个 RDMS 名称的标签。那么,你有三个选择。

1。 Sqoop查询端过滤

我在这里假设您使用 Sqoop 导入数据。此工具有一个选项,允许您导出 SQL 查询的结果。在该查询中,您可以使用此 MySQL 方法 UNIX_TIMESTAMP(date, format),将日期转换为时间戳。 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\$CONDITIONS 是强制性的。此外,我在这里假设您的日期列是一个字符串。但如果是日期类型,则不需要str_to_date方法。

2。在 RDMS 端

在这一点上,我假设您有权在该数据库中创建 View

其他解决方案是创建一个 View ,其中包含转换为时间戳的字段日期。正如我们在下面看到的,该函数是 UNIX_TIMESTAMP(date, format)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

那么,有了这个 View ,您就可以毫无问题地将它与 sqoop 一起使用。

3。导入数据后

如果您使用其他类型的导入系统,但您已将数据存储在 HDFS 中。您可以创建另一个新表并转换该字段。为此,您可以使用这样的东西:

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

在这种情况下,您需要更多时间来处理。但它独立于您导入数据的方式,并且使用较少的 MySQL 服务器资源,因为您不必为每一行计算从日期到时间戳的转换。 您将其委托(delegate)给 Hadoop,其任务是处理大量数据。

关于mysql - 将日期转换为配置单元中的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com