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