如何在hive时间戳中存储日期值?

时间:2016-04-13 09:59:46

标签: hadoop hive hdfs hiveql

我正在尝试使用配置单元将日期和时间戳值存储在timestamp列中。源文件包含日期值或有时是时间戳。

是否可以通过在配置单元中使用timestamp数据类型来读取日期和时间戳。

输入:

2015-01-01  
2015-10-10 12:00:00.232
2016-02-01

我得到的输出:

  null
  2015-10-10 12:00:00.232
  null

是否可以使用时间戳数据类型读取这两个值。

DDL:

create external table mytime(id string ,t timestamp) ROW FORMAT DELIMITED
  FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'hdfs://xxx/data/dev/ind/'

2 个答案:

答案 0 :(得分:2)

我能想到一个解决方法。用一小组数据尝试了这个:

  1. 通过将列作为字符串数据类型,将具有不一致日期数据的数据加载到hive表中,例如table1。
  2. 现在创建另一个表table2,其数据类型为所需列的时间戳,并使用转换 createConfig(); //=> Works readConfig(); //=> Works MySQL.connect(); //System.out.println => message MySQL.createTable(); System.out.println("[MySQL] Plugin enabled!"); //=> no message 将数据从table1加载到table2 这应该以所需的格式加载数据。
    代码如下:
  3. `

    INSERT OVERWRITE TABLE table2 select id,if(length(tsstr) > 10, tsstr, concat(tsstr,' 00:00:00')) from table1;



    结果按预期显示:

    enter image description here

答案 1 :(得分:0)

Hive在数据类型映射方面与任何其他数据库类似,因此需要在特定数据类型下存储特定列的统一值。第二列文件中的数据包含非统一数据,有些是日期格式,有些则是时间戳格式。

为了不丢失日期,正如@Kishore所建议的那样,请确保文件中有统一的数据类型,并获取时间戳值为2016-01-01 00:00:000的文件,其中只有日期。