以下命令已成功将外部表转换为中的托管表Spark 2.0.0:
ALTER TABLE {table_name} SET TBLPROPERTIES(EXTERNAL=FLASE);
Run Code Online (Sandbox Code Playgroud)
但是,上面的命令失败Spark 2.2.0并显示以下错误:
查询错误:无法设置或更改保留的属性键:'EXTERNAL';
正如 @AndyBrown 在评论中指出的那样,您可以选择转到控制台并在那里调用 Hive 语句。在 Scala 中,这对我有用:
import sys.process._
val exitCode = Seq("hive", "-e", "ALTER TABLE {table_name} SET TBLPROPERTIES(\"EXTERNAL\"=\"FALSE\")").!
Run Code Online (Sandbox Code Playgroud)
我使用 Spark 2.1.1 遇到了这个问题,其中 @Joha 的答案不起作用,因为由于被声明为惰性而无法访问 Spark.sessionState 。
在 Spark 2.2.0 中,您可以执行以下操作:
import org.apache.spark.sql.catalyst.TableIdentifier
import org.apache.spark.sql.catalyst.catalog.CatalogTable
import org.apache.spark.sql.catalyst.catalog.CatalogTableType
val identifier = TableIdentifier("table", Some("database"))
val oldTable = spark.sessionState.catalog.getTableMetadata(identifier)
val newTableType = CatalogTableType.MANAGED
val alteredTable = oldTable.copy(tableType = newTableType)
spark.sessionState.catalog.alterTable(alteredTable)
Run Code Online (Sandbox Code Playgroud)
小智 1
该问题是 Spark-2.1 及更高版本上的大小写敏感问题。
请尝试将 TBLPROPERTIES 设置为小写 -
ALTER TABLE <TABLE NAME> SET TBLPROPERTIES('external'='false')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1345 次 |
| 最近记录: |