相关疑难解决方法(0)

AWS Glue Crawler创建分区和文件表

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

|--data
|   |--2018
|   |   |--01
|   |   |   |--01
|   |   |   |   |--01
|   |   |   |   |   |--file1.json
|   |   |   |   |   |--file2.json
|   |   |   |   |--02
|   |   |   |   |   |--file3.json
|   |   |   |   |   |--file4.json
...
Run Code Online (Sandbox Code Playgroud)

然后我设置了一个AWS Glue Crawler来抓取s3://bucket/data.所有文件中的架构都是相同的.我希望我会得到一个数据库表,包括年,月,日等的分区.

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

我尽可能地遵循说明https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html,但无法弄清楚如何构建我的分区/扫描,这样我就不会得到这个巨大的,几乎毫无价值的数据转储.

amazon-s3 amazon-web-services amazon-athena aws-glue

5
推荐指数
1
解决办法
1462
查看次数

AWS Glue 爬网程序需要从许多具有相同架构的文件中创建一张表

我们在 S3 中有非常多的文件夹和文件,都在一个特定的文件夹下,我们想抓取所有 CSV 文件,然后从Athena 中的一张表中查询它们。CSV 文件都具有相同的架构。问题是爬虫为每个文件生成一个表,而不是一个表。爬虫配置有一个复选框选项“为每个 S3 路径创建一个模式”,但这似乎没有任何作用。

我需要的可能吗?谢谢。

amazon-athena aws-glue

5
推荐指数
1
解决办法
1669
查看次数

如何忽略亚马逊雅典娜结构顺序

我收到一个HIVE_PARTITION_SCHEMA_MISMATCH错误,我不太确定该怎么办。当我查看 2 个不同的模式时,唯一不同的是我的一个结构中的键顺序(由胶水爬虫创建)。我真的不关心数据的顺序,我以 JSON blob 的形式接收数据,所以我不能保证键的顺序。

struct<device_id:string,user_id:string,payload:array<struct<channel:string,sensor_id:string,type:string,unit:string,value:double,name:string>>,topic:string,channel:string,client_id:string,hardware_id:string,timestamp:bigint,application_id:string>
struct<device_id:string,user_id:string,payload:array<struct<channel:string,name:string,sensor_id:string,type:string,unit:string,value:double>>,topic:string,channel:string,client_id:string,hardware_id:string,timestamp:bigint,application_id:string>
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-athena aws-glue

2
推荐指数
1
解决办法
1588
查看次数

在 Athena 中查询可选嵌套 JSON 字段

我的 json 数据看起来像这样:

{ "col1" : 123, "metadata" : { "opt1" : 456, "opt2" : 789 } }
Run Code Online (Sandbox Code Playgroud)

其中各种元数据字段(有很多)是可选的,并且可能存在也可能不存在。

我的查询是:

select col1, metadata.opt1 from "db-name".tablename
Run Code Online (Sandbox Code Playgroud)

如果opt1不存在于任何行中,我希望这会返回该列为空白的所有行opt1,但是如果爬网程序运行时没有包含 in 的行opt1metadata并且当查询时可能仍然不存在于数据中)运行,因为它是可选的),查询失败,并显示:

SYNTAX_ERROR: line 2:1: Column '"metadata"."opt1"' cannot be resolved
Run Code Online (Sandbox Code Playgroud)

我可以在架构定义中手动指定这些字段(如果我不使用爬网程序),但它不会拾取可能到达的任何新元数据字段,并且指定静态架构似乎并不在雅典娜应该如何工作的精神。

如何让它按预期运行(最好不要放入虚拟行或自定义 SerDe)?

org.openx.data.jsonserde.JsonSerDe目前使用SerDe 。

感谢您的任何想法。

json amazon-web-services amazon-athena aws-glue

2
推荐指数
1
解决办法
1962
查看次数