HiveQL/SQL:CREATE TABLE AS SELECT (CTAS) 和 CREATE EXTERNAL TABLE + INSERT INTO 有啥区别?

Posted

技术标签:

【中文标题】HiveQL/SQL:CREATE TABLE AS SELECT (CTAS) 和 CREATE EXTERNAL TABLE + INSERT INTO 有啥区别?【英文标题】:HiveQL/SQL: What is the difference between CREATE TABLE AS SELECT (CTAS) and CREATE EXTERNAL TABLE + INSERT INTO?HiveQL/SQL:CREATE TABLE AS SELECT (CTAS) 和 CREATE EXTERNAL TABLE + INSERT INTO 有什么区别? 【发布时间】:2020-02-05 20:06:57 【问题描述】:

我知道创建似乎产生相同结果的表格的两种方法:表格。这两种方法有什么区别,哪种方法在最佳实践方面是最佳的?两种方法如下所示:

方法一:

CREATE TABLE db.tablename1 STORED AS ORC AS
SELECT *
FROM db.tablename2;

方法二:

CREATE EXTERNAL TABLE IF NOT EXISTS db.tablename1
    id STRING,
    var2 STRING
)
STORED AS ORC
LOCATION '/dir/';

INSERT OVERWRITE TABLE db.tablename1
SELECT * FROM db.tablename2;

方法 2 需要更多代码并达到相同的结果。为什么有人会使用方法2?就上下文而言,我公司的一些数据科学家选择使用方法 2 创建表。

【问题讨论】:

【参考方案1】:

第一种方法更像是“又快又脏”的方法。它不提供对表结构的太多控制,例如:

数据类型 默认值 其他(未设置)列 分区 集群键 约束

请注意,CTAS(第一个解决方案)可能支持其中的一些,但通常重点是查询的 select 部分而不是表。

先创建表再插入,表示可以完全定义表。

【讨论】:

以上是关于HiveQL/SQL:CREATE TABLE AS SELECT (CTAS) 和 CREATE EXTERNAL TABLE + INSERT INTO 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

查询用户出现在表中后的前 48 小时活动 (HiveQL / SQL)

insert table 和create table as 区别

SqlServerempty table and delete table and create table

MySQL中表复制:create table like 与 create table as select

ios 官网文档翻译—Create a Table View(swift)

慎用create table as select,一定要注意默认值的问题