HIVE表上的TIMESTAMP

问题描述:

我试图从Oracle加载数据到Hive作为实木复合地板。每次我加载一个包含日期/时间戳列的表格来配置单元时,它都会自动将这些列转换为BIGINT。是可以加载时间戳/日期格式配置单元使用sqoop和作为parquet文件?HIVE表上的TIMESTAMP

已经尝试在配置单元中首先创建表,然后使用impala来LOAD DATA INPATH实木复合地板文件。
还是失败,错误

“文件XX没有列XX列不兼容的架构实木复合地板: TIMESTAMP”

顺便说一句,我使用Cloudera的快速启动虚拟机。由于

的配置从Cloudera documentation:

,小心从DATE,DATETIME,或TIMESTAMP列解释由此产生的任何值。基础值表示为Parquet INT64类型,在Impala表中表示为BIGINT。 Parquet值表示以毫秒为单位的时间,而Impala将BIGINT解释为以秒为单位的时间。因此,如果在从Sqoop以这种方式导入的Parquet表中有BIGINT列,请在解释为TIMESTAMP类型时将值除以1000。

或者,您也可以使用您的Hive查询来获得所需的TIMESTAMP格式的结果。

FROM_UNIXTIME(CAST(SUBSTR(timestamp_column, 1,10) AS INT)) AS timestamp_column; 
+0

谢谢,似乎没有办法,我可以导入日期/时间戳格式从实木复合地板。 – askdk

+0

此问题与现在的镶木地板文件有关。您可以使用ORC格式导入带有选项'--map-column-hive = TIMESTAMP'的时间戳。 ORC文件格式有更好的表现然后实木复合地板。 –

+0

@SandeepSingh是否直接导入ORC格式的sqoop导入?我认为我们必须首先导入文本,然后创建蜂巢表以ORC格式存储? –

尝试,如果你使用Sqoop到RDBMS的数据转换为实木复合地板使用sqoop

--map-column-hive 
<cols_name>=TIMESTAMP 
+0

已经尝试过,但似乎一旦我们使用sqoop忽略配置--as-parquetfile选项 – askdk

+0

我找不到任何选项为“--as-parquetfile” 只有3个类型: ' - -as-avrodatafile \t进口数据阿夫罗数据文件 --as-sequencefile \t进口数据SequenceFiles --as-文本文件\t进口数据为纯文本(默认)' https://sqoop.apache.org/ docs/1.4.1-incubating/SqoopUserGuide.html –

+0

试试这个:https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_microsoft_sql_connector – askdk