【发布时间】:2020-03-17 11:01:22
【问题描述】:
我使用 aws-data-wrangler (https://github.com/awslabs/aws-data-wrangler) 来处理 pandas 数据帧。处理完成后,我将它们导出到镶木地板文件:
wr.pandas.to_parquet(
dataframe=my_dataframe,
description=DESCRIPTION,
columns_comments=COLUMN_COMMENTS,
parameters=DATASET_TAGS,
database=my_database,
table=f"{table}_{latest_refresh_date}",
path=f"s3://{bucket_out}/{sub_path}/{latest_refresh_date}/",
procs_cpu_bound=1,
partition_cols=["date"],
mode="overwrite_partitions",
preserve_index=False,
)
通过这种方式,它还创建了一个 Glue 表。 parquet 文件愉快地存在于 S3 存储桶中,我可以使用 Athena 使用 Glue 表的名称查询数据,如下所示:
select * from {table}_{latest_refresh_date}
现在假设我得到了新数据。新数据应存储在新的 S3 路径中:例如 s3://{bucket_out}/{sub_path}/{other_refresh_date}/。我像以前一样处理新数据,但我不想重新处理旧数据。因此,我使用简单的 S3 副本将 parquet 文件从旧路径复制到新路径。 wr.pandas.to_parquet 不处理旧数据。
现在想查询s3://{bucket_out}/{sub_path}/{other_refresh_date}/的数据,只能访问新的数据。
select * from {table}_{other_refresh_date}
看来我只能查询添加到 Glue 表中的数据。我天真地以为 Athena 会查询 S3 路径,但显然它比这更复杂。
您能否向我解释为什么会发生这种情况,并建议解决方法?我是否需要以某种方式将旧文件注册到新的 Athena 表中?
【问题讨论】:
标签: amazon-web-services amazon-s3 amazon-athena