对于上下文-数据驻留在S3上,写为Hive表。我正在本地计算机上运行一些Jupyter笔记本,这些笔记本应该指向作为Hive表的S3数据,而metdata存储在Spark集群的某些关系数据库中。
当我在本地计算机上运行一些本地脚本/ Jupyter笔记本来创建和加载一些表时,就是说尽管没有将它们创建为外部表,但我还是创建了一些外部表。
当我运行spark.sql("show tables in target_db").show(20, False)
时,我什么也看不到。然后,创建不带external
选项的表,然后再次运行show命令,输出:
+----------+-------------------+-----------+
|database |tableName |isTemporary|
+----------+-------------------+-----------+
|target_db |mytable |false |
+----------+-------------------+-----------+
并运行我的脚本,该脚本出错,并说: org.apache.spark.sql.AnalysisException: Operation not allowed: TRUNCATE TABLE on external tables: ``target_db``.``mytable``;
我将表放到了群集本身上,所以我认为这没有问题。 Spark如何认为我的表是外部表?我需要更改表的创建方式吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
使用CREATE EXTERNAL TABLE ...
语句创建的表是外部的。
用CREATE TABLE
创建的表不是。
您可以使用SHOW CREATE TABLE table_name
检查哪个
或使用DESCRIBE FORMATTED table_name
,称为Type
的字段可以是MANAGED
或EXTERNAL
。