我想使用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'|'”命令创建一个表结构,然后加载数据。
但是还有其他方法可以将两者组合成一个查询,从而使我能够创建一个具有来自另一个表的过滤数据以及一个字段分隔符的表?
答案 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