使用以下命令:
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''目录'
请你告诉我怎样才能解决这个问题?
答案 0 :(得分:2)
要附加到配置单元表,您需要使用INSERT INTO
:
INSERT INTO将附加到保留现有的表或分区 机智的数据。 (注意:INSERT INTO语法仅在开始时可用 版本0.8)
但是你不能使用它来附加到现有的本地文件,所以另一个选择是使用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