问题标签 [aws-glue-data-catalog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5811 浏览

python-3.x - 使用boto3获取数据库中的表列表

我正在尝试从我的 aws 数据目录中的数据库中获取表的列表。我正在尝试使用boto3。我在 sagemaker 笔记本中的 aws 上运行以下代码。它永远运行(比如超过 30 分钟)并且不返回任何结果。test_db 里面只有 4 个表。我的目标是运行类似的代码作为 aws glue etl 作业的一部分,我将在编辑后的 ​​aws etl 作业脚本中运行。有没有人看到问题可能是什么或建议如何做到这一点?

代码:

0 投票
3 回答
10265 浏览

amazon-web-services - 如何在 AWS Glue 中按日期时间对数据进行分区?

目前的设置:

  • 带有 json 文件的 S3 位置。所有文件都存储在同一位置(无日/月/年结构)。

  • Glue Crawler 读取目录表中的数据

  • Glue ETL 作业将数据转换并存储到 s3 中的 parquet 表中
  • Glue Crawler 从 s3 parquet 表中读取数据并将其存储到 Athena 查询的新表中

我想要实现的是按天(1)分区的镶木地板表和 1 天的镶木地板表在同一个文件中(2)。目前每个 json 文件都有一个 parquet 表。

我该怎么办?

值得一提的是,数据中有一个 datetime 列,但它是一个 unix 纪元时间戳。我可能需要将其转换为“年/月/日”格式,否则我假设它将再次为每个文件创建一个分区。

非常感谢你的帮助!!

0 投票
1 回答
4674 浏览

amazon-web-services - 使用 AWS Glue Crawler 指定 SerDe 序列化库

每次我在现有数据上运行胶水爬虫时,它都会将 Serde 序列化库更改为LazySimpleSerDe,它不能正确分类(例如,对于带逗号的引用字段)

在此处输入图像描述

然后,我需要手动编辑 Glue 目录中的表格详细信息以将其更改为org.apache.hadoop.hive.serde2.OpenCSVSerde.

我试过制作自己的 csv 分类器,但这没有帮助。

如何让爬虫为生成或更新的表指定特定的序列化库?

0 投票
1 回答
1393 浏览

amazon-web-services - AWS Glue Catalog 无法检测 parquet 文件,而是将根路径创建为单个表

我有一个以镶木地板格式存储在 AWS S3 中的 500 多个表的列表。结构如下:

当我在“s3://aws-bucket/parquet/”上运行 Glue Crawler 并尝试创建 Athena DB 时,它只创建一个名为 parquet 的表,而不是创建所有 500 多个表。我没有尝试对爬虫参数进行任何自定义。

请帮忙。

0 投票
1 回答
1764 浏览

amazon-web-services - 如何解决 AWS 爬虫在双引号内拆分逗号并破坏数据目录的问题?

我正在设置一个新的爬虫,它按计划执行,但因双引号而失败,里面有逗号

我搜索并发现 OpenCSVSerDe lib 用于编辑表详细信息,但我正在创建新表,我想知道如何添加一些允许爬虫正确生成数据目录的配置

如果 csv 文件具有像"$3.62","4,406"数据目录这样的值应该是

但我得到:

0 投票
1 回答
299 浏览

apache-spark - Spark - EMR - GlueCatalog:DataFrameWriter.bucketBy() 失败并出现 UnknownHostException

我正在尝试将我的 Spark 数据帧(在 EMR 上运行的 Zeppelin 笔记本)保存到我同一个 AWS 账户中的 GlueCatalog。saveAsTable()当我不使用该方法时,该方法没有任何问题bucketBy()。当我使用它时,我会得到UnknownHostException

该主机名不在我的 EMR 中。当我更改数据库名称时,会报告一个不同的主机名。

我的问题是:该主机名的配置在哪里?它是干什么用的?为什么bucketBy需要那个?

谢谢你的帮助。阿弗雷尔

0 投票
1 回答
1365 浏览

python-3.x - aws 胶水主要丢弃空字段

我有一个数据框 df。它有几列大多为空。我正在使用下面的代码将其写入 s3 存储桶。然后我爬取 s3 存储桶以获取数据目录中的表模式。我发现当我抓取数据时,大部分为空的字段都会被删除。我检查了输出的 json,发现有些记录有该字段,而另一些则没有。有谁知道问题可能是什么?我想包括这些字段,即使它们大多为空。

代码:

0 投票
1 回答
655 浏览

amazon-web-services - AWS Glue Crawlers - 如何处理可能仅包含字符串的大型 CSV 目录结构

在这里待了几天,非常感谢任何帮助。

背景: 我正在尝试创建 1+ 胶水爬虫来爬取以下 S3“目录”结构:

这适用于多个来源,每个来源可能有 30 多个项目,每个项目都包含年/月/日目录结构。

所有文件都是 CSV,文件一旦在 S3 中就不应更改。但是,每个项目文件夹中的文件架构将来可能会添加列。

  • 2019/12/01/FILE.csv与 相比可能有额外的列2019/09/01/FILE.csv

我做了什么:

到目前为止,在我的测试中,只要没有 CSV 仅包含字符串类型的列source,在级别目录(见上文)创建的爬虫就可以完美运行。 这是由于以下限制,如 AWS 文档中所述

标题行必须与数据行充分不同。要确定这一点,必须将一个或多个行解析为非 STRING 类型。如果所有列都是 STRING 类型,则第一行数据与后续行的差异不足以用作标题。

通常,我想您可以通过创建一个需要某个 CSV 模式的自定义分类器来解决这个问题,但是看到我可能有 200 多个项目(不同的模式)要爬网,我想避免这种情况。


建议的解决方案:

  1. 理想情况下,我想强制我的爬虫将每个 CSV 的第一行解释为标题,但这似乎不可能......
  2. 向每个 CSV 添加一个虚拟 INT 列,以强制我的爬虫读取 CSV 标题,并删除/忽略管道中的列。(看起来很hackish)
  3. 找到另一种有效的文件格式(需要在我的 ETL 管道中进行更改)
  4. 不要使用胶水

再次感谢任何帮助!

0 投票
2 回答
9746 浏览

amazon-athena - 如何解决这个 HIVE_PARTITION_SCHEMA_MISMATCH?

我在 S3 上的 CSV 文件中对数据进行了分区:

  • s3://bucket/dataset/p=1/*.csv(分区#1)
  • ...
  • s3://bucket/dataset/p=100/*.csv(分区#100)

我在 s3://bucket/dataset/ 上运行了一个分类器,结果看起来很有希望,因为它检测到 150 列(c1、...、c150)并分配了各种数据类型。

在 Athena 中加载结果表并查询 ( select * from dataset limit 10) 它会产生错误消息:

HIVE_PARTITION_SCHEMA_MISMATCH:表和分区模式不匹配。类型不兼容,不能强制。表“tests.dataset”中的“c100”列被声明为“string”类型,但分区“AANtbd7L1ajIwMTkwOQ”将“c100”列声明为“boolean”类型。

首先,我不知道如何使用“AANtbd7L1ajIwMTkwOQ”……但我可以从 Glue 中的分区列表中看出,有些分区的 c100 被归类为字符串,而有些则被归类为布尔值。而表架构将其列为字符串。

这也意味着,如果我将查询限制为将 c100 分类为与表模式一致的字符串的分区,则查询将起作用。如果我使用将 c100 分类为布尔值的分区,则查询将失败并显示上述错误消息。

现在查看一些 CSV 列 c100 似乎包含三个不同的值:

  • 真的
  • 错误的
  • [空](如...,,...)

可能某些行包含拼写错误(可能),因此某些分区被归类为字符串 - 但这只是一个理论,由于文件的数量和大小而难以验证。

我也试MSCK REPAIR TABLE dataset了也没用。

有没有快速的解决方案?也许强制所有分区使用字符串?如果我查看分区列表,则会有一个停用的“编辑架构”按钮。

或者我是否必须编写一个 Glue 作业检查并丢弃或修复每一行?

0 投票
1 回答
510 浏览

aws-glue - AWS Glue Crawlers:是否可以推断出更改的列名并将它们映射到数据目录中的预定义列名?

我需要从 CSV 文件中重复加载数据,数据将放在具有预定义结构的输出文件/表中。但是,每次迭代中输入文件的列名可能会略有变化。

例如,列名在第一次迭代中将是“Serial_Num”,而在下一次迭代中它可能会显示为“Serial_Number”。

如果我定义了一个列名为“Serial_Num”的数据目录表,我是否可以编写此名称的可能变体并将它们全部映射到已定义的列“Serial_Num”?

我了解列名每次可能会出现不同的变体,并且可能不遵循通用模式。我希望定义一些可能在逻辑上预期的模式,以便可以避免手动干预。