我们希望将配置单元查询的结果放入CSV文件.我认为命令应该是这样的:

insert overwrite directory '/home/output.csv' select books from table;

当我运行它时,它显示它已成功完成,但我始终找不到该文件.我如何找到此文件,或者我应该以不同的方式提取数据?

推荐答案

虽然可以使用INSERT OVERWRITE将数据从配置单元中取出,但对于您的特定情况,这可能不是最好的方法.首先让我解释一下INSERT OVERWRITE的作用,然后我将描述我用来从配置单元表格中获取TSV文件的方法.

根据the manual,您的查询将把数据存储在HDFS中的一个目录中.格式将不是CSV.

写入文件系统的数据被序列化为文本,列之间用^A分隔,行之间用换行符分隔.如果任何列不是基元类型,那么这些列将被序列化为JSON格式.

稍加修改(添加关键字LOCAL)就会将数据存储在本地目录中.

INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;

当我运行一个类似的查询时,输出是这样的.

[lvermeer@hadoop temp]$ ll
total 4
-rwxr-xr-x 1 lvermeer users 811 Aug  9 09:21 000000_0
[lvermeer@hadoop temp]$ head 000000_0 
"row1""col1"1234"col3"1234FALSE
"row2""col1"5678"col3"5678TRUE

就我个人而言,我通常通过命令行上的配置单元直接运行我的查询,并将其导入本地文件,如下所示:

hive -e 'select books from table' > /home/lvermeer/temp.tsv

这给了我一个标签分隔的文件,我可以使用.希望这对你也有用.

基于this patch-3682,我怀疑在使用蜂巢0.11时有更好的解决方案,但我无法亲自测试这一点.新语法应该允许以下内容.

INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
select books from table;

希望有帮助.

Database相关问答推荐

将数据拆分为月份(以Postgres为单位

重新运行后未找到 Taipy 场景

Metasploit 数据库警告

什么时候需要手动重新分析 PostgreSQL 中的表?

获取总和列的比率

如何使用 SQL Server 中的round方法将浮点数转换为 int?

在保持抽象的同时将格式化文本存储在数据库中

如何以编程方式将产品添加到 Opencart 数据库

在 bindParam 中使用 LIKE 进行 MySQL PDO 查询

为什么面向对象的数据库还没有成功?

数据库模式 - location

Objective-C中是否有类似于LINQ的东西?

按纬度/经度进行半径搜索

将整数作为字符串存储在数据库中的缺点

SqlAlchemy 中的动态表创建和 ORM 映射

postgresql 在 where 子句中使用 json 子元素

如何使用 MySQL Workbench 更改字段的值?

此平台不支持 LocalDB

如何使用 django 判断 postgresql 数据库中是否存在某些内容?

为什么 DBMS 不支持 ASSERTION