hive的craete table as

Create Table As Select (CTAS)

hive中还可以通过一个 create-table-as-select (CTAS) 语句中的查询结果来创建和填充表。 CTAS 创建的表是原子的,这意味着在填充所有查询结果之前,其他用户看不到该表。 因此,其他用户要么看到包含完整查询结果的表,要么根本看不到该表。

CTAS 中有两个部分,SELECT 部分可以是 HiveQL 支持的任何 SELECT 语句。 CTAS 的 CREATE 部分从 SELECT 部分获取结果模式,并使用其他表属性(例如 SerDe 和存储格式)创建目标表。

CREATE TABLE new_key_value_store
   ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe"
   STORED AS RCFile
   AS
SELECT (key % 1024) new_key, concat(key, value) key_value_pair
FROM key_value_store
SORT BY new_key, key_value_pair;

上面的 CTAS 语句使用从 SELECT 语句的这些字段及字段类型的结果数据 (new_key DOUBLE, key_value_pair STRING) 创建目标表 new_key_value_store。 如果 SELECT 语句没有指定列别名,则列名将自动分配给 _col0、_col1 和 _col2 等。另外,新的目标表是使用特定的 SerDe 和独立于源表中的源表的存储格式创建的。

Hive 0.13.0 开始,SELECT 语句可以包含一个或多个公用表表达式 (CTE),如 SELECT 语法中所示。 有关示例,请参阅公用表表达式

create table s2 as
with q1 as ( select key from src where key = '4')
select * from q1;

能够从一个表中选择数据到另一个表是 Hive 最强大的功能之一。 Hive 在执行查询时处理数据从源格式到目标格式的转换。

注意: CTAS语法默认是textfile,所以要注意了假如as select的是其他格式的比如parquet,则可能会导致一行变多行的情况(因为parquet格式的可能字段包含换行符等),所以必须要加上
create table xxx stored as parquet as select...
所以使用这种方式建表注意加上指定的存储格式。踩过坑。。。。。。。。

从 Hive 3.2.0 开始,CTAS 语句可以为目标表定义分区规范 (HIVE-20241)

待下载查证如何使用

CREATE TABLE partition_ctas_1 PARTITIONED BY (key) AS
SELECT value, key FROM src where key > 200 and key < 300;

CTAS 有以下限制:

  • 目标表不能是外部表。
  • 目标表不能是分桶表。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值