TIMESTAMP 列问题 CDH5 与镶木地板表中的 CDH6
Posted
技术标签:
【中文标题】TIMESTAMP 列问题 CDH5 与镶木地板表中的 CDH6【英文标题】:TIMESTAMP column issue CDH5 vs CDH6 in parquet table 【发布时间】:2020-08-21 00:18:41 【问题描述】:我们最近将服务器从 CDH 5 升级到了 CDH 6 。在 parquet 表中使用 SPARK 将数据插入 TIMESTAMP 列时,插入数据的方式有所不同。
CDH 5:
蜂巢:
如果我们在 parquet 表的 TIMESTAMP 列中插入2019-01-30
并从 Hive 中选择数据值为'2019-01-30 00:00:00 0'
CDH 6:
蜂巢:
如果我们将2019-01-30
插入parquet表的TIMESTAMP列并从HIVE值中选择数据为'2019-01-30 04:00:00'
黑斑羚:
如果我们在 parquet 表的 TIMESTAMP 列中插入2019-01-30
并从 IMPALA 值中选择数据为 '2019-01-30 04:00:00'
如果有任何我们可以使用的火花属性,请告诉我。我的主要目标是匹配 CDH5 和 CDH6 中的 HIVE 值,如果可能的话,当我们从 IMPALA 中选择时,如果应该是 2019-01-30 00:00:00'
【问题讨论】:
您能说出您当时使用的 Spark 版本和现在使用的 Spark 版本吗?此外,据我所知,parquet 以 UTC 存储时间戳,因此可能是表示层调整。 我们使用的是 Spark 2.3 版本 也许您会发现此信息很有用docs.cloudera.com/runtime/7.2.1/developing-spark-applications/…。顺便说一句,我相信CDH6中默认的Spark版本是2.4。 感谢您发送链接。那是或黑斑羚。我的主要问题是 HIVE 中的日期不匹配,不确定比较 CDH5 和 CDH6 时是否有任何设置 【参考方案1】:要跳过 Spark 和 Hive 之间的数据类型问题,Spark 用于写入 Parquet 数据的约定是可配置的。
这由属性spark.sql.parquet.writeLegacyFormat
确定。默认值为false
。如果设置为 true
,Spark 将使用与 Hive 相同的约定来写入 Parquet 数据。
val spark = SparkSession
.builder()
.appName("MyApp")
.master("local[*]")
.config("spark.sql.shuffle.partitions","200") //Change to a more reasonable default number of partitions for our data
.config("spark.sql.parquet.writeLegacyFormat", true)
【讨论】:
以上是关于TIMESTAMP 列问题 CDH5 与镶木地板表中的 CDH6的主要内容,如果未能解决你的问题,请参考以下文章
#1293 - 表定义不正确;在 DEFAULT 或 ON UPDATE 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列