8

我在嵌入式模式下使用钻,除了复制和粘贴之外,我不知道如何保存查询输出。

4

5 回答 5

10

如果您使用的是 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 中。

于 2015-06-29T17:35:44.007 回答
3

您可以指定!record <file_path>将所有输出保存到特定文件。 钻取文档

于 2016-03-28T10:46:03.627 回答
2

如果您使用 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 或其他工具读取。

于 2016-05-26T22:38:02.167 回答
2

更新:将 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 或一些其他的可视化工具进行进一步分析。

于 2018-03-02T23:56:45.500 回答
0

要在钻孔嵌入中设置查询的输出,您需要首先在 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`;
于 2020-09-03T09:51:05.163 回答