所以我输入的数据如下:
HEADER_A|HEADER_B|HEADER_C|HEADER_D
2018-09-28 22:12:09.0461760|first|last|123
2018-09-28 22:14:11.0123550|first|second|124
然后,我将其读取到数据框中,并将其保存为名为temp_view
的临时视图。一切都作为字符串读取。
然后我将查询此temp_view:
val df = sqlContext.sql("""
SELECT
from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss') as ETL_RunDate,
HEADER_A as timestamp,
HEADER_B as string,
HEADER_c as string,
HEADER_D as string
FROM temp_view
""")
然后将该数据帧写入文件。该文件的外观如下
2018-10-23 05:32:49|2018-09-28T22:12:09.046Z|first|last|123
2018-10-23 05:32:49|2018-09-28T22:14:11.123Z|first|second|124
如果我然后将此数据用作具有架构的配置单元表的数据:
CREATE EXTERNAL TABLE `testdb.testtable`(
`runts` timestamp COMMENT '',
`header_a` timestamp COMMENT '',
`header_b` string COMMENT '',
`header_c` string COMMENT '',
`header_d` string COMMENT '')
并查询此表-
select * from testdb.testtable;
header_a
在应该作为基础数据存在时应为null。
为什么会这样,我该如何解决?
答案 0 :(得分:1)
问题在于输出文件yyyy-MM-dd'T'HH:mm:ss.SSSX
中的时间戳格式与默认的Hive时间戳格式yyyy-mm-dd hh:mm:ss[.f...]
不同。
您有两个选择:
df.write.format("csv").option("dateFormat", "yyyy-MM-dd hh:mm:ss.SSSSSSS")
ALTER TABLE testtable SET SERDEPROPERTIES ("timestamp.formats"= "yyyy-MM-dd'T'HH:mm:ss.SSSX")