gpt4 book ai didi

aws-glue - 如何访问分区 Athena 表的子目录中的数据

转载 作者:行者123 更新时间:2023-12-01 21:56:17 25 4
gpt4 key购买 nike

我有一个 Athena 表,每天都有一个分区,其中实际文件按小时在“子目录”中,如下所示:

s3://my-bucket/data/2019/06/27/00/00001.json
s3://my-bucket/data/2019/06/27/00/00002.json
s3://my-bucket/data/2019/06/27/01/00001.json
s3://my-bucket/data/2019/06/27/01/00002.json

Athena 能够毫无问题地查询此表并找到我的数据,但在使用 AWS Glue 时,它​​似乎无法找到此数据。

ALTER TABLE mytable ADD 
PARTITION (year=2019, month=06, day=27) LOCATION 's3://my-bucket/data/2019/06/27/01';

select day, count(*)
from mytable
group by day;

day . count
27 . 145431

我已经尝试将分区的位置更改为以尾部斜杠结尾 (s3://my-bucket/data/2019/06/27/01/),但这没有帮助。

以下是 Glue 中的分区属性。我希望 storedAsSubDirectories 设置会告诉它迭代子目录,但情况似乎并非如此:

{
"StorageDescriptor": {
"cols": {
"FieldSchema": [
{
"name": "userid",
"type": "string",
"comment": ""
},
{
"name": "labels",
"type": "array<string>",
"comment": ""
}
]
},
"location": "s3://my-bucket/data/2019/06/27/01/",
"inputFormat": "org.apache.hadoop.mapred.TextInputFormat",
"outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
"compressed": "false",
"numBuckets": "0",
"SerDeInfo": {
"name": "JsonSerDe",
"serializationLib": "org.openx.data.jsonserde.JsonSerDe",
"parameters": {
"serialization.format": "1"
}
},
"bucketCols": [],
"sortCols": [],
"parameters": {},
"SkewedInfo": {
"skewedColNames": [],
"skewedColValues": [],
"skewedColValueLocationMaps": {}
},
"storedAsSubDirectories": "true"
},
"parameters": {}
}

当 Glue 针对同一分区/表运行时,它发现 0 行。

但是,如果所有数据文件都出现在分区的根“目录”中(即 s3://my-bucket/data/2019/06/27/00001.json),那么 Athena 和 Glue 都可以找到数据。

Glue 找不到数据文件有什么原因吗?我不想为每个小时创建一个分区,因为这意味着每年有 8700 个分区(而 Athena 对每个表有 20,000 个分区的限制)。

最佳答案

显然,create_dynamic_frame 上有一个未记录的“递归”附加选项:additional_options = {"recurse": True}

示例:

athena_datasource = glueContext.create_dynamic_frame.from_catalog(database = target_database, table_name = target_table, push_down_predicate = "(year=='2019' and month=='06' and day=='27')", transformation_ctx = "athena_datasource", additional_options = {"recurse": True})

我刚刚使用此选项测试了我的 Glue 作业,可以确认它现在可以找到所有 s3 文件。

关于aws-glue - 如何访问分区 Athena 表的子目录中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56836447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com