将数据从Hive表导出到本地计算机文件系统

时间:2014-03-09 07:03:56

标签: hadoop hive

使用以下命令:

insert overwrite local directory '/my/local/filesystem/directory/path'
select * from Emp;

使用Emp。

的数据覆盖/my/local/filesystem/directory/path中的所有现有数据

我想要的是 只需将 Emp的数据复制到/my/loca/filesystem/directory/path 不会覆盖 ,怎么做?

以下是我失败的试验:

hive> insert into local directory '/home/cloudera/Desktop/Sumit' select * from appdata;
  

失败:ParseException行1:12输入“本地”期望不匹配   在insert子句中的'into'附近的表

hive> insert local directory '/home/cloudera/Desktop/Sumit' select * from appdata; 
  

失败:ParseException行1:0无法识别'insert'附近的输入   insert子句中的'local''目录'

请你告诉我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:2)

要附加到配置单元表,您需要使用INSERT INTO

  

INSERT INTO将附加到保留现有的表或分区   机智的数据。 (注意:INSERT INTO语法仅在开始时可用   版本0.8)

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-InsertingdataintoHiveTablesfromqueries

但是你不能使用它来附加到现有的本地文件,所以另一个选择是使用bash命令。

如果你有一个名为'export.hql'的文件,那么你的代码就是:

select * from Emp;

然后你的bash命令可以是:

hive -f 'export.hql' >> localfile.txt

-f命令执行hive文件和>>追加将结果传递给文本文件。

修改

命令:

hive -f 'export.hql' > localfile.txt

将hive查询保存到新文件,而不是追加。

答案 1 :(得分:0)

https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-SQLOperations

使用' LOCAL',' OVERWRITE'你的hql也需要。

例如: INSERT OVERWRITE LOCAL DIRECTORY' / tmp / out' SELECT * FROM test