我正在使用AWS Athena。创建表时,在指定的文件夹位置中有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
语句中的路径。