我试图使用SparkSQL(HiveContext)做一些ETL,我注意到时间戳有些不一致。
假设我们有一个存储为镶木地板的表格,有两列:时间戳,事件。 如果我使用Hue的Hive编辑器查询此表,一切正常。
SELECT * FROM mytable ORDER BY timestamp
使用hiveContext.sql(查询)执行完全相同的查询将得到与Hue一样的结果,但是(时间戳 - 4小时)。
另一个例子,假设我们有这个表:
Timestamp | event
--------------------------------------------------
'year-month-day 00:00:00' | "evt0"
'year-month-day 01:00:00' | "evt1"
'year-month-day 02:00:00' | "evt2"
'year-month-day 03:00:00' | "evt3"
'year-month-day 04:00:00' | "evt4"
'year-month-day 05:00:00' | "evt5"
'year-month-day 06:00:00' | "evt6"
'year-month-day 07:00:00' | "evt7"
'year-month-day 08:00:00' | "evt8"
我们使用Spark和HiveContext运行以下查询:
SELECT * FROM mytable
WHERE timestamp BETWEEN 'year-month-day 00:00:00' AND 'year-month-day 08:00:00'
ORDER BY timestamp
结果:
Timestamp | event
--------------------------------------------------
'year-month-day 00:00:00' | "evt4"
'year-month-day 01:00:00' | "evt5"
'year-month-day 02:00:00' | "evt6"
'year-month-day 03:00:00' | "evt7"
'year-month-day 04:00:00' | "evt8"
答案 0 :(得分:2)
当Hive将时间戳值存储为Parquet格式时,它会将本地时间转换为UTC时间,当它读取数据时,它会转换回本地时间。看起来你当地的时间是ET,因此4小时的差异。使用Hive和Parque组合,您可能需要根据所需的时区修改时间更改。我不太确定,Hue如何回归同一时间。