当前位置: 首页 > 知识库问答 >
问题:

配置单元表上的时间戳

卜盛
2023-03-14

我正试图将数据从Oracle加载到Hive作为parquet。每次我将带有日期/时间戳列的表加载到hive时,它都会自动将这些列转换为BIGINT。可以使用sqoop将时间戳/日期格式加载到hive中,并作为一个parquet文件吗?

已经尝试过首先在hive中创建表,然后使用impala将数据加载到parquet文件中。< br >仍然失败,出现错误

"文件XX的第XX列有不兼容的拼花模式:时间戳"

顺带一提,我用的是cloudera quickstart vm。谢谢

共有2个答案

宦源
2023-03-14

尝试使用 sqoop 的配置

--map-column-hive
<cols_name>=TIMESTAMP
花玄裳
2023-03-14

来自Cloudera留档:

如果您使用Sqoop将RDBMS数据转换为Parket,请注意解释来自DATE、DATETIME或TIMESTAMP列的任何结果值。基础值表示为Parque INT64类型,在Impala表中表示为BIGINT。Parque值表示以毫秒为单位的时间,而Impala将BIGINT解释为以秒为单位的时间。因此,如果您的Parket表中有一个以这种方式从Sqoop导入的BIGINT列,请在解释为TIMESTAMP类型时将值除以1000。

或者,您也可以像这样使用Hive查询来获得所需时间戳格式的结果。

FROM_UNIXTIME(CAST(SUBSTR(timestamp_column, 1,10) AS INT)) AS timestamp_column;
 类似资料:
  • 我在java中开发了一个工作正常的配置单元udf,我的函数返回输入与配置单元表中列之间的最佳匹配,因此它有以下简化的伪代码: 我的问题是,如果这个函数是由Hive调用的,为什么我需要在代码中连接到Hive?我可以使用使用我的功能的用户所连接的当前连接吗?

  • 嗨,我是Hive的新手,我想把当前的时间戳和一行数据一起插入到我的表中。 我得到的错误是: 如果有人能帮忙,那就太好了,非常感谢frostie

  • 更新:恰恰相反。实际上,我们的表非常大,就像3个TB有2000个分区。3TB/256MB实际上会达到11720,但我们的分区数量与表的物理分区数量完全相同。我只想了解任务是如何在数据量上生成的。

  • 我使用Hortonworks Hadoop HDP-2.3.2.0-2950 Hive over Tez引擎 下面2个查询来自Java代码。 ——运行良好 ——失败并出现错误 我的代码:

  • 我正在使用Spark SQL读取一个配置单元表,并将其分配给一个scala val 有什么方法可以绕过这个错误吗?我需要将记录插入到同一个表中。 嗨,我试着按建议做,但仍然得到同样的错误。