我在使用sqoop-import从oracle数据库到HDFS parquet文件中将日期列转换为字符串时遇到了问题。我使用的是下面的方法。
sqoop-import -Doraoop.oracle.session.initialization.statements="alter session set nls_date_format='YYYYMMDD'"
我的理解是,在开始传输数据之前,应该执行上面的语句。我还尝试了
-Duser.nls_date_format="YYYYMMDD"
但这也不行,产生的parquet文件仍然包含表格中列出的原始日期格式。如果有关系的话,我在bash脚本中运行这些,并且也在使用 --map-column-java "MY_DATE_COL_NAME=String"
我到底做错了什么?
非常感谢。
来源:SqoopUserGuide SqoopUserGuide
Oracle JDBC 将 DATE 和 TIME SQL 类型表示为 TIMESTAMP 值。Oracle数据库中的任何DATE列都会在Sqoop中被导入为TIMESTAMP,Sqoop生成的代码会将这些值存储在java.sql.Timestamp字段中。
你可以尝试在查询内导入时将日期转为String。
例如
sqoop import -- query 'select col1, col2, ..., TO_CHAR(MY_DATE_COL_NAME, 'YYYY-MM-DD') FROM TableName WHERE $CONDITIONS'