Я использую 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. Файлы паркета благополучно живут в корзине S3, и я могу запросить данные у Athena, используя имя таблицы Glue, например:
select * from {table}_{latest_refresh_date}
Теперь, допустим, я получил новые данные. Новые данные должны храниться в новом пути S3: например, s3://{bucket_out}/{sub_path}/{other_refresh_date}/
. Я обрабатываю новые данные, как и раньше, но я не хочу повторно обрабатывать старые данные. Поэтому я копирую файлы паркета из старого пути в новый, с простой копией S3. Старые данные не обрабатываются с помощью wr.pandas.to_parquet
.
Теперь, когда я хочу запросить данные, хранящиеся в s3://{bucket_out}/{sub_path}/{other_refresh_date}/
, я могу получить доступ только к новым данным.
select * from {table}_{other_refresh_date}
Это Кажется, я могу только запросить данные, которые были добавлены в таблицу Glue. Я наивно думал, что Афина будет запрашивать путь S3, но, видимо, он более сложный, чем этот.
Не могли бы вы объяснить мне, почему это происходит, и, возможно, предложить обходной путь? Нужно ли каким-то образом регистрировать старые файлы в новой таблице Athena?