在Athena中的外部表不能从分区parquet文件中获取数据。

0

【以下的问题经过翻译处理】 使用 Glue 将数据框写入 S3 中。

S3bucket_node3 = glueContext.write_dynamic_frame.from_options( frame=exploded_df, connection_type="s3", format="glueparquet", connection_options={ "path": "s3://raviglue/abc-output/", "partitionKeys": ["logId"], }, format_options={"compression": "snappy"}, transformation_ctx="S3bucket_node3", )

它正确地写入到了 S3 中。

我使用 Athena 爬取了 Parquet 文件并获取了表的模式。 我正在尝试通过以下方式使用 Parquet 创建一个外部表: CREATE EXTERNAL TABLE IF NOT EXISTS abc_wide_table ( utc string, sysid string, level int, itemtype string, logitem.int int, logitem.struct.fname string, logitem.struct.sig string, logitem.struct.key string, . . . . . . logitem.string string) PARTITIONED BY(logId int) STORED AS PARQUET LOCATION 's3://raviglue/abc-output/' tblproperties ("parquet.compress"="snappy");

表创建了,但没有任何数据。

profile picture
专家
已提问 3 个月前3 查看次数
1 回答
0

【以下的回答经过翻译处理】 a. 在手动创建表之后,您是否将分区添加到 Athena 表中,使用以下两种方法之一: i. 使用:MSCK REPAIR TABLE Table_Name; [] MSCK REPAIR TABLE - https://docs.aws.amazon.com/athena/latest/ug/msck-repair-table.html ii. 或者使用以下命令: ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN') LOCATION 's3://mystorage/path/to/INDIA_14_May_2016/' PARTITION (dt = '2016-05-15', country = 'IN') LOCATION 's3://mystorage/path/to/INDIA_15_May_2016/'; [] ALTER TABLE ADD PARTITION - https://docs.aws.amazon.com/athena/latest/ug/alter-table-add-partition.html

b. 此外,您可以比较由爬虫创建的表和手动创建的表的表定义。然后,通过运行以下命令检查分区: i. 爬虫创建的表:SHOW PARTITIONS <table_name> ii. 手动从 Athena 创建的表:SHOW PARTITIONS <table_name> [] SHOW PARTITIONS - 概要 - https://docs.aws.amazon.com/athena/latest/ug/show-partitions.html#synopsis

profile picture
专家
已回答 3 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则