我正在尝试使用不同的时间戳对hive表进行分区。我有一个带有时间戳的表,但是当我执行hive分区查询时,它告诉我它不是有效的分区列。下面是表格:
+---+-----------------------+
|id |rc_timestamp |
+---+-----------------------+
|1 |2017-06-12 17:18:39.824|
|2 |2018-06-12 17:18:39.824|
|3 |2019-06-12 17:18:39.824|
+---+-----------------------+spark.sql("SET hive.exec.dynamic.partition.mode=nonrestrict")
val tempTable = spark.sql("SELECT * FROM partition_table")
val df = tempTable.select("rc_timestamp")
val a = x.toString().replaceAll("[\\[\\]]","")
df.collect().foreach(a => {
spark.sql(s"ALTER TABLE mydb.partition_table ADD IF NOT EXISTS PARTITION
(rc_timestamp = '$a')").show()
)}下面是我得到的错误:
org.apache.spark.sql.AnalysisException: rc_timestamp is not a valid partition column
in table mydb.partition_table.;发布于 2019-06-14 00:04:11
第一件事是使用这个InsertSuite test case特别是this检查语法
AFAIK您需要msck修复或刷新表
spark.sql(s"refresh table tableNameWhereYouAddedPartitions")它所做的是刷新现有的分区。
您可以使用spark.sql('MSCK REPAIR TABLE table_name')
有一种叫做recoverPartitions的东西(只适用于分区表,而不适用于视图)。这是msck repair table的别名版本。你可以继续尝试这个..
从文档上看,这个ddl.scala似乎等同于它。
示例用法:
spark.catalog.recoverPartitions(tableName) 注: RECOVER PARTITIONS子句自动识别这些新目录中存在的任何数据文件,这与REFRESH语句所做的相同。
发布于 2019-06-13 20:07:37
您不能更改Hive表的分区方案。这将不得不重写完整的数据集,因为分区映射到HDFS/S3/FileSystem中的文件夹。
如果想要更改分区方案,惟一的选择是创建一个新表,并在create table命令中提供分区信息。之后,您必须将旧表中的数据插入到新表中。您也可以使用CTAS命令来执行相同的操作。
ALTER TABLE mydb.partition_table ADD IF NOT EXISTS PARTITION <(rc_timestamp = '$a')> -命令仅在元存储中为现有分区配置单元表添加新分区。例如,假设您有一个在列year上分区的表T1。如果您想让metastore知道"year=2018",则使用此命令。
https://stackoverflow.com/questions/56571968
复制相似问题