我在嵌入模式下使用钻取,除了复制和粘贴之外,我无法弄清楚如何保存查询输出。
答案 0 :(得分:9)
如果您正在使用sqlline,则可以按以下方式将新表格创建为CSV:
use dfs.tmp;
alter session set `store.format`='csv';
create table dfs.tmp.my_output as select * from cp.`employee.json`;
您的CSV文件将显示在/ tmp / my_output。
中答案 1 :(得分:3)
您可以指定!record <file_path>
将所有输出保存到特定文件。
Drill docs
答案 2 :(得分:2)
如果您正在使用SQLLINE使用!记录。
如果您使用的是一组查询,则需要指定要使用的确切模式。这可以使用schema schema命令完成。不幸的是,您还必须不使用根模式。确保您已在文件系统上创建了正确的目录,并使用proper storage configuration。示例配置如下。在此之后,您可以创建csv via java using the SQL driver,或者在Pentaho等工具中生成CSV。使用正确的规范,也可以在localhost:8047 / query中使用REST查询工具。在配置示例之后,生成csv at / out / data / csv的查询在下面。
存储配置
{
"type": "file",
"enabled": true,
"connection": "file:///",
"config": null,
"workspaces": {
"root": {
"location": "/out",
"writable": false,
"defaultInputFormat": null
},
"jsonOut": {
"location": "/out/data/json",
"writable": true,
"defaultInputFormat": "json"
},
"csvOut": {
"location": "/out/data/csv",
"writable": true,
"defaultInputFormat": "csv"
}
},
"formats": {
"json": {
"type": "json",
"extensions": [
"json"
]
},
"csv": {
"type": "text",
"extensions": [
"csv"
],
"delimiter": ","
}
}
}
<强>查询强>
USE fs.csvOut;
ALTER SESSION SET `store.format`='csv';
CREATE TABLE fs.csvOut.mycsv_out
AS SELECT * FROM fs.`my_records_in.json`;
这将在/ out / data / csv / mycsv_out中生成至少一个CSV和可能多个具有不同标头规范的CSV。
每个文件应遵循以下格式:
\d+_\d+_\d+.csv
注意:虽然查询结果可以作为单个CSV读取,但生成的CSV(如果有多个)不能,因为标题数量会有所不同。将文件作为Json文件删除并使用代码或稍后使用Drill或其他工具读取(如果是这种情况)。
答案 3 :(得分:0)
要设置钻入嵌入式查询的输出,您需要首先在tmp模式中创建一个表。假设您要在您的主文件夹中提取实木复合地板文件input_file.parquet
的前5行,并将输出设置为output_file.parquet
CREATE TABLE dfs.tmp.`output_file.parquet`
AS
(
SELECT *
FROM dfs.`/Users/your_user_name/input_file.parquet`
LIMIT 5
);
文件将另存为/tmp/output_file.parquet
。
您可以使用来查看钻探中的结果
SELECT *
FROM dfs.tmp.`output_file.parquet`;
答案 4 :(得分:-2)
更新:将APACHE钻孔外壳输出重定向为CSV文件
现在它已经到了2018年初,对于你们中的一些人(特别是MAPR中的Apache Drill),上面的命令不会起作用。如果是这种情况,请尝试以下方法。截至2018 03 02,这部分工作在MapR 5.2和Mapr 6上:-)
注意:我正在使用&#34; //&#34;用实际命令表示评论......
注意:我使用&#34; =&gt;&#34;表示shell对命令的响应...
//来自钻井内壳(即&#34; SQLLINE&#34;)...
//首先设置&#34; outputformat&#34; session(shell)变量......
!set outputformat 'csv'
=&GT;你看到shell的一些输出回显了新值......
//接下来开始&#34;录制&#34;任何输出到文件......
!record '/user/user01/query_output.csv'
=&GT;再一次,你看到shell的一些输出回应了#34;录音&#34;是开......
//接下来实际提交(说)一个SELECT查询,其输出现在是CSV(甚至是屏幕),而不是&#34; TABLE&#34;格式...
SELECT * FROM hive.orders;
=&GT;输出(格式化为CSV)将开始流式传输到屏幕和您指定的文件...
//最后关闭&#34;录制&#34;,以便csv文件关闭......
!record
那就是 - 你完成了! :-) 现在,您可以处理它位于CLUSTER存储中的CSV,或者 - 如果您有需要 - 将文件传输到集群中,然后传输到(例如)具有Tableau,Kabana,PowerBI Desktop或其他可视化的其他服务器进一步分析的工具。