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

2024-04-20

我有一个 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 中的分区属性。我希望 storageAsSubDirectories 设置会告诉它迭代子目录,但情况似乎并非如此:

{
    "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 上有一个用于“recurse”的未记录的附加选项: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 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问分区 Athena 表的子目录中的数据 的相关文章

随机推荐

  • 使用QThread定期更新一个QTableWidget pyqt

    在我的应用程序中 我使用 API 调用获取记录 然后将数据动态添加到 QTableWidget 这是到目前为止我的代码片段 class TriageUI QtGui QMainWindow def init self QtGui QMain
  • 使用并发.futures 中的 ThreadPoolExecutor 时的 max_workers 数量?

    在决定从并发 futures 中将 ThreadPoolExecutor 中的 max workers 设置为什么时需要考虑哪些因素 只要您期望 Python 3 5 可用 是否有任何理由不将 max workers 设置为 None 然后
  • 找到所有潜在最长序列的Pythonic方法

    所以 我有一个如下所示的列表 potential labels foo foo bar foo bar baz abc abc cde def bleh The desired output foo bar baz abc cde def
  • 使用令牌身份验证的 Java HTTP 请求

    我正在尝试向我正在运行的本地服务器发出 GET 请求 我无法返回正确的数据 我看到 未经授权 的响应 鉴于字符串 令牌 是正确的 任何人都可以发现任何明显的问题吗 protected Object doInBackground Void p
  • ClientError:调用 HeadObject 操作时发生错误 (403):禁止

    我正在创建一个 AWS Lambda 函数 尝试将文件 s3 download file 下载到我使用以下命令创建的临时目录tempfile来自 Python 3 6 的库 然后 我对文件进行一些转换 并且需要再次上传它 s3 upload
  • 访问自动属性中的支持字段

    有什么方法可以访问属性的支持字段以进行验证 更改跟踪等 像下面这样的事情可能吗 如果没有 是否有计划将其纳入 NET 4 C 4 public string Name get set if value
  • Oracle 中的第 N 个最高薪水

    为了找出oracle中的第N个最大sal 我使用下面的查询 SELECT DISTINCE sal FROM emp a WHERE SELECT COUNT DISTINCE sal FROM emp b WHERE a sal lt b
  • `$eq` 运算符是否适用于数组点表示法?

    我正在尝试编写一个聚合查询 expr inside lookup s match管道阶段 我发现了一些与数组点表示法相关的问题 想象一个集合relations数组字段称为nodes 以下查询可以正常返回正确的结果 db relations
  • 预防孤儿

    我试图通过在段落和标题内的最后两个单词之间添加不间断空格来防止出现单个单词孤儿 然而 我正在使用的脚本也有删除链接的副作用 p h1 h2 h3 h4 h5 h6 each function var wordArray this text
  • 一个模拟键盘按下的程序

    我是编程新手 我想编写一个程序 仅供自用 每次运行时都会重复一组预设的键盘操作 有人可以给我一些建议吗 是否有任何应用程序可以做到这一点 有各种各样的程序可以满足您的需求 如果你在 Windows 上 自动热键 http www autoh
  • jmeter恒定视频流

    我正在使用 Jmeter 来加载测试视频流 我可以传递登录信息 但我需要让 Jmeter 在提供视频流的页面上 保持 我怎样才能做到这一点 我已经设置了 cookie 管理器 如果视频流不在您的服务器上 您根本不需要测试它 例如 如果您的网
  • 本地化系统生成的隐私警报消息 iOS UIAlertView Xcode

    我正在使用 Xcode Swift 1 1 开发一个应用程序 并使用 iOS 7 1 和 iOS 8 1 模拟器对其进行测试 该应用程序允许用户访问他们的照片库 但在此之前 iOS 会显示隐私警报消息标题 以英语请求用户许可 App Nam
  • 使用 SearchView android studio 工具栏中的左侧空间

    我正在尝试添加一个简单的SearchView到我的应用程序中的工具栏 除了布局之外 一切都工作正常 之间有这个 空间 NavigationDrawer图标和SearchView 如果我设置了标题 则空间将填充该字符串 否则为空 空字符串 标
  • 简化平面数组或多维数组的循环

    通常 我会有一个数组来保存一组值 每个值我都需要处理 有时 数组仅保存单个集合 在这种情况下 每个值都需要经过该过程 其他时候 数组将保存许多集合 在这种情况下 每个值都将是一个数组 并且这些数组中的每个值都需要进行处理 这是一个例子 fo
  • 使用 MVVM 动态添加时给予 TabItem 焦点

    所有 我添加一个TabItem to a TabControl动态地使用 MVVM 新的TabItems加载良好 但我希望添加的选项卡自动获得焦点 也就是说 我添加了一个选项卡 但我不想必须单击该选项卡才能获得焦点 XAML 的TabCon
  • 如何将 CSS 样式仅应用于文本

    我正在尝试将样式应用于 HTML 文本之类的内容 我想要的基本上是 我得到的基本上是 正如您所看到的 第一行是缩进的 但其他行没有缩进 到目前为止 我已经将文本包含在 span 它嵌套在一个 div slide text text back
  • 作为 Windows 服务运行时,.Net Core 6 Worker Service 不写入日志

    我使用 C Net Core 6 Visual Studio 2022 创建了一个辅助服务 如果通过 Visual Studio 运行或直接从 Windows 资源管理器 PowerShell 启动 它会按预期写入日志文件 但是 当作为 W
  • 如何强制子进程刷新标准输出缓冲区?

    平台 Windows 8 1 IDE vs2013 使用c c 进程 A 使用管道重定向读取子进程的标准输出 但子进程不会在 printf 之后调用 fflush 以在子进程运行结束之前处理 A 无法从管道读取任何内容 ps 我有子进程的源
  • 具有可定制内容的 JSF 迭代复合组件

    我想创建一个复合组件 可以将迭代元素的实际布局传递给复合组件 这是一个简化的示例并且有效
  • 如何访问分区 Athena 表的子目录中的数据

    我有一个 Athena 表 每天都有一个分区 其中实际文件按小时位于 子目录 中 如下所示 s3 my bucket data 2019 06 27 00 00001 json s3 my bucket data 2019 06 27 00