【问题标题】:Select file in Athena在 Athena 中选择文件
【发布时间】:2017-07-13 02:24:13
【问题描述】:

我正在使用 AWS Athena。创建表时指定的文件夹位置有 2 个文件。执行查询时如何选择特定文件?

【问题讨论】:

    标签: amazon-web-services amazon-athena


    【解决方案1】:

    有几件事没有特别的顺序:

    最好不要将 S3 中的“文件夹”视为文件夹。我知道 Web GUI 中的按钮显示“创建文件夹”。不幸的是,各种桌面客户端延续了这一趋势(感谢 S3 浏览器)。考虑 S3 存储桶中的文件夹的方式是它们是对象键的一部分(有时我将它们视为“标签”)。如果您开始使用 API,这将有助于最大程度地减少混淆!

    因此,Athena 将难以区分具有相似键的文件,并且您不能只指定一个文件。在下面的示例中,假设我将 car-makers.csv 和 car-names.csv 加载到名为“SOMEBUCKET”且标签为“SOMETAG”的存储桶中。

    如果我运行以下 DDL:

    CREATE EXTERNAL TABLE IF NOT EXISTS carnames_and_makers (
      id int,
      make string,
      model string
    )
    ROW FORMAT DELIMITED
     FIELDS TERMINATED BY ','
     LINES TERMINATED BY '\n'
    LOCATION 's3://SOMEBUCKET/SOMETAG/';
    

    我最终会在 carnames_and_makers 中同时使用 carnames 和 car maker 表。

    很遗憾,您无法指定对象。

    CREATE EXTERNAL TABLE IF NOT EXISTS carnames_just_names (
      id int,
      make string,
      model string
    )
    ROW FORMAT DELIMITED
     FIELDS TERMINATED BY ','
     LINES TERMINATED BY '\n'
    LOCATION 's3://SOMEBUCKET/SOMETAG/car-names.csv';
    

    导致如下错误:

    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: java.io.IOException Can't make directory for path 's3://SOMEBUCKET/SOMETAG/car-names.csv' since it is a file.)
    

    我希望这个解释有帮助!

    使用以下网址提供的汽车数据集: http://users.csc.calpoly.edu/~dekhtyar/365-Winter2015/index.html

    【讨论】:

      【解决方案2】:

      文件的位置由CREATE TABLE 语句的LOCATION 参数指定。

      您可以指定一个路径,该路径中的所有文件都将包含在表格中。

      如果您只想包含一个文件,您可能会指定文件的完整密钥(完整路径和文件名),它可能只会查询该路径。当然,这需要CREATE TABLE 中的规范。您不能更改 SELECT 语句中的路径。

      【讨论】:

      • 这不起作用 - 您可以指定一个文件夹,但不能指定一个文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 2018-12-23
      • 1970-01-01
      • 2019-03-11
      相关资源
      最近更新 更多