datax之oraclereader读取时间类型字段问题学习
创始人
2025-05-31 15:13:49
0

众所周知 hive是字段类型不敏感的,比如date 2022-01-01 和string 2022-01-01 在大多数情况下都是可以呼唤的。我们这边为了方便经常将oracle的date字段 在hive中直接用string字段去替代,最近发现了一个问题。

表中字段如下 字段类型是date。 注意这个date 不是datetime。

 

date类型只保留年月日 不保留时分秒 

所以我们一般来说看到这个date 数值就是年月日,但是因为工具看到的也不同 我用dbeaver看到的如上,同事用的哪个工具忘了如下

当然 我猜测底层存储的肯定是1469635200000 这种,时分秒的单位都归0了

这时候我们要明确一个问题,前端需要看到的到底是什么? 如果你想看到年月日时分秒,那么datax就是这么做的。

但是如果你想看到的只是年月日,那么就需要自己去改了。当然你在hive用date类型接受也没有问题。

学习一下源码。

CommonRdbmsReader.java

// for mysql bug, see http://bugs.mysql.com/bug.php?id=35115
--你看这里还有bug。。 这里才是 年月日 没有时分秒
case Types.DATE:if (metaData.getColumnTypeName(i).equalsIgnoreCase("year")) {record.addColumn(new LongColumn(rs.getInt(i)));} else {record.addColumn(new DateColumn(rs.getDate(i)));}break;case Types.TIMESTAMP:record.addColumn(new DateColumn(rs.getTimestamp(i)));break;

注意 oracle的date类型属于这里的 Types.TIMESTAMP 

 DateColumn.java

/*** 构建值为ts(java.sql.Timestamp)的DateColumn,使用Date子类型为DATETIME* */
public DateColumn(final java.sql.Timestamp ts) {this(ts == null ? null : ts.getTime());this.setSubType(DateType.DATETIME);
}

设置datecolumn的类型为datetime, 并且把值ts 传进去了。

然后我们看取出来是怎么取的

@Override
public String asString() {try {return ColumnCast.date2String(this);} catch (Exception e) {throw DataXException.asDataXException(CommonErrorCode.CONVERT_NOT_SUPPORT,String.format("Date[%s]类型不能转为String .", this.toString()));}
}@Override
public Date asDate() {if (null == this.getRawData()) {return null;}return new Date((Long)this.getRawData());
}
---这里就是as string的后续方法
static String asString(final DateColumn column) {if (null == column.asDate()) {return null;}switch (column.getSubType()) {case DATE:return DateFormatUtils.format(column.asDate(), DateCast.dateFormat,DateCast.timeZoner); --yyyy-MM-ddcase TIME:return DateFormatUtils.format(column.asDate(), DateCast.timeFormat,DateCast.timeZoner);case DATETIME:return DateFormatUtils.format(column.asDate(),DateCast.datetimeFormat, DateCast.timeZoner);--yyyy-MM-dd HH:mm:ssdefault:throw DataXException.asDataXException(CommonErrorCode.CONVERT_NOT_SUPPORT,"时间类型出现不支持类型,目前仅支持DATE/TIME/DATETIME。该类型属于编程错误,请反馈给DataX开发团队 .");}
}

所以问题很清楚了,

就是oracle对于date类型数据 在java的types里对应的是timestamp

对于mysql的date类型来说对应的就是date 只保留年月日。

这里有点不是特别理解,oracle的date和mysql的date哪里不一样?

CREATE TABLE test.cc_test_time(
t1 DATE,
t2 timestamp
)

String querySql = "SELECT * from test.cc_test_time "; rs = demo.execQuery(querySql); ResultSetMetaData metaData = rs.getMetaData(); for (int i = 1; i <= metaData.getColumnCount(); i++) { System.out.println("columntype="+metaData.getColumnType(i)); }

INSERT INTO test.cc_test_time VALUES (sysdate,sysdate)

columntype=93
columntype=93

 

而且经过我的测试 oracle的date 和timestamp类型 对应的都是 93也就是timestamp,所以datax在对oracle取数的时候,这两个类型是区分不了的。。

具体我就不尝试了。比如timestamp精确到毫秒 ,我猜测datax也忽略了毫秒,反正统一都是年于日时分秒。 

相关内容

热门资讯

端午“轻度假”人均消费增长8.... 转自:中国经营报中经记者  李立 上海报道在暑假之前,刚刚结束的端午节成为一个难得的“不贵不挤”的小...
邀请消防专家 抓好安全培训 转自:中国国防报新疆军区某边防团邀请消防专家 抓好安全培训本报讯 杨满库、张乂心报道:前不久,新疆军...
今年前5个月胖东来销售额超10... 格隆汇6月3日|据胖东来官网销售数据,截至5月31日,2025年胖东来合计销售额超100亿元,超市销...
情暖校园 心怀感恩 与爱同行—... 爱心校服捐赠活动细雨润校园,爱意暖融心房。日前,寻甸县红十字会带着拳拳爱心走进塘子街道办事处易隆小学...
氧丽可丝惊艳亮相2025上海美... 转自:衡水日报上海,2025年5月12日——第29届CBE中国美容博览会(上海美博会)在上海新国际博...
银行股和黄金概念股两大赛道集体...   今天(6月3日)上午A股市场整体走强,主要指数不同程度上涨。  行业板块方面,银行股集体走强,沪...
思考一个问题如何才可想得深入,... 思考一个问题如何才可想得深入, 透彻, 有条理.其实我认为如果要认真思考一个问题,最紧要的,应该是你...
青岛发文:不断加强普惠性、基础... 青岛日报社/观海新闻6月3日讯 日前,青岛市政府办公厅制印发《青岛民政事业高质量发展实施方案(202...
折翼天使舞六一 特教园丁筑梦园... 六一游园会为庆祝“六一”国际儿童节,丰富特殊儿童的校园生活,5月29日,寻甸县特殊教育学校于举办了“...
内蒙古鄂托克前旗市场监管局监督... 中国质量新闻网讯 为进一步加强麻醉药品和精神药品(以下简称麻精药品)的安全管理,严防过期麻精药品流入...
《爱情买卖》为什么是神曲? 《爱情买卖》为什么是神曲?凤姐为什么称为神女你知道吗?
瞒报违规吃喝是严肃的政治问题 转自:半月谈 【#瞒报违规吃喝是严肃的政治问题#】节日期...
多家机构集体调研汉嘉设计 力争... 近日,汉嘉设计(股票代码:300746)的投资者交流活动备受机构瞩目,吸引了万家基金、鹏华基金、国泰...
人可得永生否 人可得永生否如果信轮回的话,不叫永生,叫再生。一心念佛超脱轮回往生极乐可得永生人的真性本来就永生不灭...
湖北电信总经理张敏不再任职 ... 运营商财经网 朱欣雨/文近期,湖北电信完成一把手更换,至于公司原总经理张敏,据悉已不再任职。值得一提...
做主播哪个平台最好 做主播哪个平台最好做主播哪个平台最好做主播,我觉得情感主播平台最好的啦!它能够告诉人们在情感方面怎样...
坚决抵制价格战!全国工商联汽车...   来源:全联汽车经销商商会  6月3日上午,全联汽车经销商商会发布《关于反对“内卷式”竞争 促进汽...
天翼物联5G确定网络成果亮相2...   本报讯(记者 李静)在近期召开的2025工业互联网大会上,天翼物联基于5G-A技术打造的5G确定...
1月7日魔女的考验演的是什么? 1月7日魔女的考验演的是什么?应该是巧克莉把香草的心拿出来,皮耶尔把他们放走了………………