将钻取查询输出写入csv(或其他一些格式)

时间:2015-06-23 23:01:14

标签: apache-drill

我在嵌入模式下使用钻取,除了复制和粘贴之外,我无法弄清楚如何保存查询输出。

5 个答案:

答案 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或其他可视化的其他服务器进一步分析的工具。