Hive 配置单元3.1无法创建从内部/托管表复制架构的外部表

Hive 配置单元3.1无法创建从内部/托管表复制架构的外部表,hive,external-tables,hdp,internal-tables,Hive,External Tables,Hdp,Internal Tables,我们尝试创建一个外部配置单元表,其模式与现有的内部/托管表相似,下一步将插入ecternal的数据 下面是使用托管表的复制架构创建外部表的代码 CREATE EXTERNAL TABLE IF NOT EXISTS sls_test_ext like sls_test ROW FORMAT DELIMITED FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" LOCATION "/bla/bla

我们尝试创建一个外部配置单元表,其模式与现有的内部/托管表相似,下一步将插入ecternal的数据

下面是使用托管表的复制架构创建外部表的代码

CREATE EXTERNAL TABLE IF NOT EXISTS sls_test_ext like sls_test
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ","
LINES TERMINATED BY "\n"
LOCATION "/bla/bla/";
但是当它被执行时,它返回如下

ERROR : FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:sp2020.sls_test_ext cannot be declared transactional because it's an external table)
INFO  : Completed executing command(queryId=hive_20201111233927_593d38ff-39ed-412e-b128-41d949a3a476); Time taken: 0.017 seconds
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:sp2020.sls_test_ext cannot be declared transactional because it's an external table) (state=08S01,code=1)
然后我们尝试修改上面的代码,如下所示

CREATE EXTERNAL TABLE IF NOT EXISTS sls_test_ext like sls_test
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ","
LINES TERMINATED BY "\n"
LOCATION "/bla/bla/"
TBLPROPERTIES ("transactional"="false");
它将返回相同的错误。 是否缺少任何代码或需要更改某些配置单元配置

注意:托管表是使用sqoop导入配置单元表自动创建的

您可以尝试以下解决方案:

托管表:

CREATE TABLE sls_test(<columns>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
CREATE EXTERNAL TABLE IF NOT EXISTS sls_test_ext
LIKE sls_test
LOCATION '/bla/bla/';

如果托管表是由sqoop导入配置单元表创建的呢?我很抱歉以前提到过它,我有疑问地更新了它,这不是一个问题。唯一需要研究的是-托管表使用的分隔符必须与存储在HDFS位置的文件中使用的分隔符匹配。