用于 Impala 的 BigInt 的 Java 时间戳
Posted
技术标签:
【中文标题】用于 Impala 的 BigInt 的 Java 时间戳【英文标题】:Java Timestamp to BigInt for Impala 【发布时间】:2014-12-03 21:30:29 【问题描述】:我正在读取一个文本文件,该文件在 Timestamp 中有一个字段,格式为 "yyyy-MM-dd HH:mm:ss"
我希望能够在 Impala 中将其转换为 BigInt 字段,并且应该像 Java 中的 yyyMMddHHmmss
。
我正在将 Talend 用于 ETL,但我收到此错误“架构的 dbType 对于此组件不正确” 所以我想在我的 tImpalaOutput 组件中进行正确的转换
【问题讨论】:
【参考方案1】:一个明显的选择是将日期作为字符串读取,将其格式化为所需的输出,然后将其转换为 long,然后再发送到 Impala。
为此,您可以先使用 Talend 的 parseDate 函数,例如:
TalendDate.parseDate("yyyy-MM-dd HH:mm:ss",row1.date)
这会将日期字符串解析为日期类型对象。从这里你可以将它转换成你想要的字符串格式:
TalendDate.formatDate("yyyMMddHHmmss",row2.date)
或者,这可以一次性完成:
TalendDate.formatDate("yyyMMddHHmmss",TalendDate.parseDate("yyyy-MM-dd HH:mm:ss",row1.date))
在此之后,您应该拥有所需格式的日期字符串。然后,您可以使用 tConvertType 组件或以下 Java 代码将其转换为 Long:
Long.valueOf(row3.date)
或者,我们可以再次在一个班轮中完成所有事情:
Long.valueOf(TalendDate.formatDate("yyyMMddHHmmss",TalendDate.parseDate("yyyy-MM-dd HH:mm:ss",row1.date)))
从这里您应该能够将其作为 Java Long 发送到 Impala 到 Impala BIGINT 字段。
【讨论】:
谢谢,这很有帮助! :) 嗨@ydaetskcoR:我尝试使用Long。不幸的是,BIGINT 在 java 类型中被映射到 BIGDECIMAL。知道如何解决这个问题吗?以上是关于用于 Impala 的 BigInt 的 Java 时间戳的主要内容,如果未能解决你的问题,请参考以下文章