在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
EXPERTE
gefragt vor 5 Monaten14 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen