Hive-使用“选择查询”和“字段终止于”命令创建表语句

时间:2018-07-02 06:54:54

标签: hive hiveql

我想使用select语句在Hive中创建一个表,该语句从另一个表中获取数据的子集。我使用以下查询来做到这一点:

create table sample_db.out_table as 
select * from sample_db.in_table where country = 'Canada';

当我查看此表的HDFS位置时,没有字段分隔符。

但是我需要创建一个表,其中包含来自另一个表的过滤数据以及字段分隔符。例如,我正在尝试做类似的事情:

create table sample_db.out_table as 
select * from sample_db.in_table where country = 'Canada'
ROW FORMAT SERDE 
  FIELDS TERMINATED BY '|';

这不起作用。我知道另一种方法是用字段名和“ FIELDS TERMINATED BY'|'”命令创建一个表结构,然后加载数据。

但是还有其他方法可以将两者组合成一个查询,从而使我能够创建一个具有来自另一个表的过滤数据以及一个字段分隔符的表?

2 个答案:

答案 0 :(得分:1)

正如您在the documentation中所看到的那样,当使用CTAS(创建表作为选择)语句时,ROW FORMAT语句(实际上,所有与新表)放在SELECT语句之前。

答案 1 :(得分:1)

row format delimited ..放在AS select前面

这样做    将查询更改为您的

hive> CREATE TABLE ttt  row format delimited fields terminated by '|' AS select *,count(1) from t1 group by id ,name  ;
Query ID = root_20180702153737_37802c0e-525a-4b00-b8ec-9fac4a6d895b

这是结果

[root@hadoop1 ~]# hadoop fs -cat /user/hive/warehouse/ttt/**
2|\N|1
3|\N|1
4|\N|1