【发布时间】:2019-09-09 18:07:48
【问题描述】:
我正在存储在 hdfs 中的 orc 文件之上创建一个外部表。我在数据文件中有 process_timestamp 列和时间戳。
创建表后,我执行MSCK REPAIR TABLE <TABLE-NAME>。但是,查询表时间戳列时返回空值而不是实际时间戳
from datetime import date
from pyspark.sql.functions import lit, to_date, from_unixtime, unix_timestamp
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("test_conn") \
.getOrCreate()
df = spark.createDataFrame([('Alice', 1)])
timestamp = today.strftime("%Y-%m-%d %H:%M:%S")
df = df.withColumn('process_timestamp', unix_timestamp(lit(timestamp), 'yyyy-MM-dd HH:mm:ss').cast('timestamp'))
process_timestamp 在 orc 文件中看起来像这样 '2019-09-09 00:00:00'
Schema 看起来也不错:
--process_timestamp: timestamp (nullable = true)
但是在查询时,会返回空值process_timestamp - NULL
我尝试如下设置 serde 属性,但没有用。
ALTER TABLE <table_name> SET SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd'T'HH:mm:ss");
请帮我解决这个问题。查询时如何从外部表返回实际时间戳值?任何帮助将不胜感激。
【问题讨论】:
-
您可以使用 ORC 工具查看 ORC 文件。 orc.apache.org/docs/java-tools.html 它将帮助您确定问题是在数据中还是在元数据中。您还可以将该字段添加为字符串并查看返回的内容。时间戳类型更敏感。
标签: hadoop hive pyspark orc external-tables