我在嵌入式模式下使用钻,除了复制和粘贴之外,我不知道如何保存查询输出。
5 回答
如果您使用的是 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 中。
您可以指定!record <file_path>
将所有输出保存到特定文件。
钻取文档
如果您使用 SQLLINE,请使用 !record 。
如果您使用一组查询,则需要指定要使用的确切架构。这可以使用使用模式命令来完成。不幸的是,您也不能使用您的根模式。确保您已在文件系统上创建正确的目录并使用正确的存储配置。下面是一个示例配置。之后,您可以使用 SQL 驱动程序通过 java创建 csv ,或者在 Pentaho 等工具中生成 CSV。通过适当的规范,也可以在 localhost:8047/query 使用 REST 查询工具。在 /out/data/csv 生成 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 或其他工具读取。
更新:将 APACHE DRILL SHELL 输出重定向到 CSV 文件
现在是 2018 年初,对于你们中的一些人(尤其是 MAPR 中的 Apache Drill),上述命令不起作用。如果是这种情况,请尝试以下操作。截至 2018 年 3 月 2 日,这确实适用于 MapR 5.2 和 Mapr 6 :-)
注意:我使用“//”来表示实际命令旁边的注释...
注意:我使用“=>”来表示 shell 对命令的响应...
//FROM INSIDE A DRILL SHELL(即“SQLLINE”)...
//首先设置“outputformat”会话(shell)变量...
!set outputformat 'csv'
=> 你会看到一些来自 shell 的输出回显了新值......
//下一步开始“记录”任何输出到文件...
!record '/user/user01/query_output.csv'
=> 你再次看到来自 shell 的一些输出回显“正在录制”...
//下一个实际提交(比如说)一个 SELECT 查询,其输出现在将是 CSV(甚至到屏幕),而不是“TABLE”格式...
SELECT * FROM hive.orders;
=> 输出(格式为 CSV)将开始流式传输到屏幕和您指定的文件...
//最后你关闭“录制”,所以csv文件关闭......
!record
就是这样 - 你完成了!:-) 现在您可以在 CSV 位于 CLUSTER 存储中的位置处理它,或者 - 如果您有需要 - 将该文件从集群中传输到(例如)具有 Tableau、Kabana、PowerBI Desktop 或一些其他的可视化工具进行进一步分析。
要在钻孔嵌入中设置查询的输出,您需要首先在 tmp 模式中创建一个表。假设您要提取input_file.parquet
主文件夹中 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`;