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