简体   繁体   English

Hive 如何在使用插入覆盖目录时创建表?

[英]Hive How to create a table when using insert overwrite directory?

I am wondering if it's possible to create(insert overwrite) a table when you are doing insert overwrite directory?我想知道在您执行插入覆盖目录时是否可以创建(插入覆盖)表? The table should have the same data as stored in the directory.该表应具有与存储在目录中相同的数据。 Right now I have something like:现在我有类似的东西:

INSERT OVERWRITE DIRECTORY somepath
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
SELECT * FROM Table LIMIT 5;

I would like to have something like:我想要一些类似的东西:

INSERT OVERWRITE DIRECTORY somepath AND Table sometable
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
SELECT * FROM SOMETABLE LIMIT 5;

Can someone suggest if it's possible.如果可能的话,有人可以建议。 Thanks!谢谢!

You can do this using multi-table insert .您可以使用多表插入来做到这一点。 Hive can insert into multiple tables and directories in single run. Hive 可以在一次运行中插入到多个表和目录中。 Multi Table Inserts minimize the number of data scans required.多表插入最大限度地减少了所需的数据扫描次数。 Hive can insert data into multiple tables/directories by scanning the input data just once (and applying different query operators) to the input data.通过对输入数据仅扫描一次(并应用不同的查询运算符),Hive 可以将数据插入到多个表/目录中。

For example the statement below writes into table and into directory in a single statement (tested):例如,下面的语句在单个语句中写入表和目录(已测试):

from 
(select 1 id, 'Santhosh' value union all
select 2 id, 'Rajesh' value union all
select 3 id, 'Valeriy' value )s

insert overwrite table test_1 select s.id, s.value

insert overwrite directory  'hdfs://your_dir/test_2' 
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
select s.id, s.value;

You can also specify individual WHERE in each select.您还可以在每个选择中指定单独的 WHERE。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM