AWS Glue 爬网程序创建分区和文件表

2023-11-27

我有一个非常基本的 s3 设置,我想使用 Athena 对其进行查询。数据全部存储在一个存储桶中,并组织到年/月/日/小时文件夹中。

|--data
|   |--2018
|   |   |--01
|   |   |   |--01
|   |   |   |   |--01
|   |   |   |   |   |--file1.json
|   |   |   |   |   |--file2.json
|   |   |   |   |--02
|   |   |   |   |   |--file3.json
|   |   |   |   |   |--file4.json
...

然后,我设置一个 AWS Glue Crawler 来进行爬网s3://bucket/data。所有文件中的架构都是相同的。我希望得到一个数据库表,其中包含年、月、日等分区。

我得到的却是数万张桌子。每个文件都有一个表,每个父分区也有一个表。据我所知,为每个文件/文件夹创建了单独的表,没有一个可以在大日期范围内查询的总体表。

我按照指示操​​作https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html尽我所能,但无法弄清楚如何构建我的分区/扫描,这样我就不会得到这个巨大的、几乎毫无价值的数据转储。


Glue Crawler 还有很多不足之处。它承诺解决很多情况,但实际支持的内容确实有限。如果您的数据存储在目录中并且不使用 Hive 式分区(例如year=2019/month=02/file.json)它常常会搞砸。当数据是由其他 AWS 产品生成时尤其令人沮丧,例如 Kinesis Firehose,看起来您的数据可能就是这样。

根据您拥有的数据量,我可能会首先创建一个指向结构根的未分区 Athena 表。只有当您的数据增长到超过数千兆字节或数千个文件时,分区才变得重要。

您可以采用的另一种策略是添加 Lambda 函数,只要有新对象进入您的存储桶,该函数就会由 S3 通知触发。该函数可以查看键并找出它属于哪个分区,然后使用 Glue API 将该分区添加到表中。添加已存在的分区将从 API 返回错误,但只要您的函数捕获它并忽略它就可以了。

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

AWS Glue 爬网程序创建分区和文件表 的相关文章

随机推荐

  • 使用 bootstrap 和 jquery 更改弹出窗口的标题

    这是链接的 html 即 a href style font size 6 color 222 class popover test laquo a 是的 我正在调用 popover 进行初始化 并且弹出窗口工作得很好 我可以毫无问题地更新
  • 从文件中读取随机行的简单方法是什么?

    在 shell 脚本中从文件中读取随机行的简单方法是什么 您可以使用shuf shuf n 1 FILE 还有一个实用程序称为rl 在 Debian 中它位于randomize lines软件包完全可以满足您的需求 但并非在所有发行版中都可
  • 如何在 Eclipse 中将常量重构为枚举?

    如何使用 Eclipse 将 Java 常量重构为枚举 我发现eclipse中没有内置功能 http help eclipse org juno index jsp topic 2Forg eclipse jdt doc user 2Fre
  • 使用 .NET 对象作为数据源时,为什么在 Crystal Reports 中出现“数据库登录失败”?

    我正在使用项目中的 NET 对象作为数据源创建一个简单的报告 使用SetDatasource 方法 但是 当我运行报告时 出现 数据库登录失败 错误 该报告根本没有连接到数据库 我在这里错过了什么吗 非常感谢 D 添加 我想如果我包含控制器
  • 带phonegap的AlarmManager

    我正在使用 Phonegap 的 StatusBarNotification 插件 Android 来触发通知 现在我想在特定时间执行此操作 根据我所读的内容 我必须使用 Android 的 AlarmManager 我尝试了一些方法 但似
  • 为什么 PHP PDO SQLite 总是创建一个新的空数据库文件?

    我创建了与数据库的连接 但我不知道为什么它总是创建一个新的空database sql 文件 当我重命名数据库文件时 他总是创建一个新文件 而不是给我一个错误 这是我的代码 db new PDO sqlite DIR database sql
  • 以最快的方式处理大数据集的豪斯多夫距离

    我的数据集中的行数超过 500000 我需要每个的豪斯多夫距离id自己与他人之间 并对整个数据集重复此操作 我有一个巨大的数据集 这是小部分 df id easy ordinal latitude longitude epoch day o
  • 如何确认异步 EF6 wait db.SaveChangesAsync() 是否按预期工作?

    我的代码如下所示 public async Task
  • C 文件操作:检查打开的文件指针访问模式

    一个简单的问题 如何检查已打开的文件指针的访问模式 假设一个函数传递了一个已经打开的 FILE 指针 Pseudo code bool PseudoFunction FILE Ptr if Insert check for read onl
  • asp.net 身份获取登录用户的所有角色

    我创建了一个基于角色的菜单 并遵循该菜单this教程 在该页面的某些位置您会看到这行代码 String roles Roles GetRolesForUser 它返回当前登录用户的所有角色 我想知道如何使用新的 ASP NET Identi
  • Swift 2 中的 HTTP POST 错误处理

    我是新来的 这是我的第一个问题 我尝试在 Swift 2 中编写一个发出 HTTP POST 请求的应用程序 但我不知道如何使用 Swift 2 的新错误处理 任何人都可以告诉我如何实现 尝试捕捉 Swift 2 对下面代码片段的错误处理
  • JavaScript 元素样式

    我很好奇为什么是这个 div class overlay fdsfsd div overlay width 100px height 200px background color red alert document getElements
  • Objective-c 中是否有等效的 sqlite .dump ?

    我正在尝试开发一个 iOS 应用程序 该应用程序允许用户使用 GameKit 通过蓝牙同步他们的 sqlite 数据库 有没有办法使用许多 sqlite Objective C 库中的任何一个在 sqlite shell 上执行相当于 du
  • RVO 应何时启动?

    从下面的代码来看 如果发生了RVO 我希望看到2个地址指向同一位置 但事实并非如此 我的编译器是MS VC9 0 include
  • blob 在 ios 上不接受 Uint8Array

    我尝试创建一个 Blob 对象并将 Uint8Array 传递给它的构造函数 它在 Windows 上的 chrome 和 firefox 上运行良好 然而 在 ios 上的 chrome 和 safari 中 Blod 不包含 Uint8
  • 为什么Java默认只初始化类变量而不初始化局部变量?

    我正在学习 Java 中的链表 我有三个文件Main java List java and Node java 当我这样做时 我遇到了一个问题 为什么我应该初始化在方法中声明的局部变量 而不是在类中声明的类变量 In the first p
  • Visual Lisp:如何调用外部 C++ DLL 中的函数

    我有一个我编写的 C dll 本机的 不是 net 并且我想使用 Visual Lisp 中的功能 任何人都可以向我指出如何执行此操作的示例 或者至少要阅读哪些文档 我通过为我的 dll 编写一个 activex COM 包装器解决了这个问
  • 处理 AWS PHP SDK 2 中的错误

    如果我尝试从 S3 存储桶中获取不存在的对象 Amazon PHP SDK 2 会给我一个非常难看的错误 对我来说很方便 但对最终用户来说毫无意义 E g s3 aws gt get s3 result s3 gt getObject ar
  • JPA Glassfish 数据库更新问题

    我在 Glassfish v3 0 1 上部署了一个应用程序 它从数据库中的表中读取事件 一旦准备好 它会将它们标记为已处理 当尝试调用执行更新的方法时 我收到一个奇怪的错误 我无法解释 Override TransactionAttrib
  • AWS Glue 爬网程序创建分区和文件表

    我有一个非常基本的 s3 设置 我想使用 Athena 对其进行查询 数据全部存储在一个存储桶中 并组织到年 月 日 小时文件夹中 data 2018 01 01 01 file1 json file2 json 02 file3 json