在Athena中选择文件

时间:2017-07-13 02:24:14

标签: amazon-web-services amazon-athena

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

2 个答案:

答案 0 :(得分:0)

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

最好不要将S3中的“文件夹”视为文件夹。我知道按钮在Web GUI中显示“创建文件夹”。不幸的是,各种桌面客户端都在延续这一趋势(感谢S3 Browser)。考虑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和汽车制造商合作 表

不幸的是,您无法指定对象。

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

答案 1 :(得分:-2)

文件的位置由id="terminal"语句的LOCATION参数指定。

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

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