【问题标题】:How to save the results of an impala query如何保存 impala 查询的结果
【发布时间】:2015-10-09 02:43:30
【问题描述】:

我已经将大量数据从 S3 加载到 hdfs 中,然后将数据插入到 impala 中的一个表中。

然后我针对这些数据运行查询,并希望将这些结果返回到 S3。

我正在使用 Amazon EMR 和 impala 1.2.4。如果无法将查询结果直接返回到 S3,是否有选项可以将数据返回到 hdfs,然后如何从那里将其发送回 S3?

我搞砸了 impala-shell -o filename 选项,但这似乎只适用于本地 linux 文件系统。

我认为这可能是一种常见情况,但无法找到任何有关在任何地方保存查询结果的信息。

任何指针表示赞赏。

【问题讨论】:

  • 将结果存储在本地文件系统中并将其推送到 S3 在大数据的情况下不是一个好方法。最好的方法是在 S3 中创建一个外部表,并将输出数据填充到外部表中。

标签: amazon-s3 hdfs amazon-emr impala


【解决方案1】:

为了补充上面的知识,我包括将查询结果写入带有分隔符的文件的命令,正如我们使用选项 --output_delmeter 声明的那样,还使用选项 --delimited 实际上关闭了默认的制表符分隔符选项。

  impala-shell -q "query " --delimited   --output_delimiter='\001'  --print_header -o 'filename'

【讨论】:

    【解决方案2】:

    如果结果集很小,我通常会从命令行运行脚本,然后使用 AWS 命令​​行工具上传到 s3:

    impala-shell -e "select ble from bla" -o filename
    aws s3 cp filename s3://mybucket/filename
    

    另一种方法是在 Impala 中运行查询后使用 Hive 作为数据管道的最后一步:

    1. Impala步骤

    create table processed_data
    as
    select blah
    --do whatever else you need to do in here
    from raw_data1
    join raw_data2 on a=b
    

    2。蜂巢步骤:

    create external table export
    like processed_data
    location 's3://mybucket/export/';
    
    insert into table export
    select * from processed_data;
    

    【讨论】:

    • 谢谢,我猜在 s3 中创建外部表不能用 impala 完成?我最初尝试过 Hive,我遇到的唯一问题是在 impala 中花费大约 10 秒的查询在 hive 中花费了大约 5 小时......也许我做错了什么。
    • hmm 5 小时听起来有点过分,您为什么不将您的查询作为问题发布,看看是否有人可以帮助您优化它?
    • 我认为impala-shell 命令需要-q 标志而不是-e
    【解决方案3】:

    如果你安装了aws cli,你可以使用标准的Impala shell,impala shell query | aws cli cp - s3文件夹/输出文件名 您可以使用 unix 管道和流 (-)

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多