Is it possible to do a
create table <mytable> as select <query statement>
using
row format delimited fields terminated by '|'; or to do a
create table <mytable> like <other_table> row format delimited fields terminated by '|';
The Language Manual seems to indicate not.. but something tickles me I had achieved this in the past.
3 Answers
Create Table as select (CTAS) is possible in Hive.
You can try out below command:
CREATE TABLE new_test row format delimited fields terminated by '|' STORED AS RCFile AS select * from source where col=1 - Target cannot be partitioned table.
- Target cannot be external table.
- It copies the structure as well as the data
Create table like is also possible in Hive.
- It just copies the source table definition.
Let's say we have an external table called employee
hive> SHOW CREATE TABLE employee; OK CREATE EXTERNAL TABLE employee( id string, fname string, lname string, salary double) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'colelction.delim'=':', 'field.delim'=',', 'line.delim'='\n', 'serialization.format'=',') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 'maprfs:/user/hadoop/data/employee' TBLPROPERTIES ( 'COLUMN_STATS_ACCURATE'='false', 'numFiles'='0', 'numRows'='-1', 'rawDataSize'='-1', 'totalSize'='0', 'transient_lastDdlTime'='1487884795') To create a
persontable likeemployeeCREATE TABLE person LIKE employee;To create a
personexternal table likeemployeeCREATE TABLE person LIKE employee LOCATION 'maprfs:/user/hadoop/data/person';then use
DESC person;to see the newly created table schema.
Both the answers provided above work fine.
- CREATE TABLE person AS select * from employee;
- CREATE TABLE person LIKE employee;