用于 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 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

怎么把impala表导入kudu

将 Slick 与 Kudu/Impala 一起使用

用于 ETL 的 Spark SQL 与 Impala

从放弃到入门27之大数据Cloudera Impala

Impala 不适用于 Hbase 表

GraphQL 错误:Int 类型的变量 junctionId!用于期望 bigint 的位置