从 SQL 服务器增量导入时更改 Sqoop 的日期格式
Change Sqoop's Date Format in Incremental Import from SQL Server
TL;DR - 是否可以更改 Sqoop 使用的日期格式?
我正在使用 Sqoop(版本 1.4.6)从 SQL 服务器导入数据,并将日期时间列指定为我的 --check-column。
Sqoop 正在使用 yyyy-MM-ddd hh:mm:ss.SSS 格式的日期查询数据库。但是,由于 SQL 服务器配置为使用英国 dmy 日期格式,它违反直觉地将以年份开头的日期解释为第二个位置是日期而不是月份(wtf?!)。
例如 SELECT ... WHERE modified < '2017-01-31 00:00:00.000' 解释为选择修改时间小于 2017 年第 31 个月第 1 天的数据这显然会引发错误。
是否可以更改 Sqoop 使用的日期格式?
快速浏览 Sqoop 文档没有发现更改日期格式的方法。 Microsoft 支持文章 here 建议您可以通过发出
SET DATEFORMAT 'ymd'
在打开连接后立即声明,但似乎 Sqoop 只支持 Oracle (oraoop-site-template.xml) 的那种操作,而不支持其他 JDBC 驱动程序。
有一个 mssql-jdbc pull request,如果被接受,您可以将 ;connectionDateformat=ymd
添加到您的 Sqoop 连接 URL。同时,您可能只需要将 Sqoop 作业的 SQL 登录的默认语言从 "British English" 更改为 (US) "English":
TL;DR - 是否可以更改 Sqoop 使用的日期格式?
我正在使用 Sqoop(版本 1.4.6)从 SQL 服务器导入数据,并将日期时间列指定为我的 --check-column。
Sqoop 正在使用 yyyy-MM-ddd hh:mm:ss.SSS 格式的日期查询数据库。但是,由于 SQL 服务器配置为使用英国 dmy 日期格式,它违反直觉地将以年份开头的日期解释为第二个位置是日期而不是月份(wtf?!)。
例如 SELECT ... WHERE modified < '2017-01-31 00:00:00.000' 解释为选择修改时间小于 2017 年第 31 个月第 1 天的数据这显然会引发错误。
是否可以更改 Sqoop 使用的日期格式?
快速浏览 Sqoop 文档没有发现更改日期格式的方法。 Microsoft 支持文章 here 建议您可以通过发出
SET DATEFORMAT 'ymd'
在打开连接后立即声明,但似乎 Sqoop 只支持 Oracle (oraoop-site-template.xml) 的那种操作,而不支持其他 JDBC 驱动程序。
有一个 mssql-jdbc pull request,如果被接受,您可以将 ;connectionDateformat=ymd
添加到您的 Sqoop 连接 URL。同时,您可能只需要将 Sqoop 作业的 SQL 登录的默认语言从 "British English" 更改为 (US) "English":