在Spark中,CREATE TABLE命令是否创建外部表?

时间:2016-04-28 18:34:06

标签: jdbc apache-spark hive external-tables

基于GitHub中的以下线程(https://github.com/databricks/spark-csv/issues/45)我明白CREATE TABLE + Options(如JDBC)会创建一个Hive外部表吗?这些类型的表不会实现自身,因此当表被删除样式SQL或从Databricks表UI中删除时,不会丢失任何数据。

2 个答案:

答案 0 :(得分:2)

您可以在spark中创建EXTERNAL表,但是您必须使用HiveContext代替SqlContext

scala> import org.apache.spark.sql.hive._
import org.apache.spark.sql.hive._

scala> val hc = new HiveContext(sc)
hc: org.apache.spark.sql.hive.HiveContext = org.apache.spark.sql.hive.HiveContext@385ff04e

scala> hc.sql("create external table blah ( name string ) location 'hdfs:///tmp/blah'")
res0: org.apache.spark.sql.DataFrame = [result: string]

答案 1 :(得分:0)

从Spark 2.0文档:https://spark.apache.org/docs/2.3.1/sql-programming-guide.html#hive-tables

在Spark SQL中: CREATE TABLE ... LOCATION等效于CREATE EXTERNAL TABLE ... LOCATION,以防止意外删除现有数据在用户提供的位置。这意味着,在Spark SQL中创建且用户指定位置的Hive表始终是Hive外部表。删除外部表不会删除数据。不允许用户为Hive托管表指定位置。请注意,这与Hive行为不同。