【发布时间】:2017-07-13 02:24:13
【问题描述】:
我正在使用 AWS Athena。创建表时指定的文件夹位置有 2 个文件。执行查询时如何选择特定文件?
【问题讨论】:
标签: amazon-web-services amazon-athena
我正在使用 AWS Athena。创建表时指定的文件夹位置有 2 个文件。执行查询时如何选择特定文件?
【问题讨论】:
标签: amazon-web-services amazon-athena
有几件事没有特别的顺序:
最好不要将 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
【讨论】:
文件的位置由CREATE TABLE 语句的LOCATION 参数指定。
您可以指定一个路径,该路径中的所有文件都将包含在表格中。
如果您只想包含一个文件,您可能会指定文件的完整密钥(完整路径和文件名),它可能只会查询该路径。当然,这需要CREATE TABLE 中的规范。您不能更改 SELECT 语句中的路径。
【讨论】: