Я создал кластер AWS EMR oop с каталогом AWS Glue Data, который используется для "метаданных таблицы Spark". Следовательно, в заданиях Spark или в spark-shell я могу написать Spark SQL, который использует базы данных и таблицы Glue / Athena.
Что произойдет, если кто-либо изменит местоположение таблицы Athena, когда задание Spark, запущенное в EMR, чтение содержимого этой таблицы?
Давайте представим, что у меня есть таблица Athena с именем "item" в базе данных Glue с именем "my_db". Расположение таблицы Athena указывает на папку S3, в которой хранятся файлы Parquet, содержащие данные. Эта папка s3://my_bucket/item_2020_03_02
.
Запущено задание на запуск в EMR, и обработана строка Spark SQL, которая считывает содержимое таблицы:
Dataset<Row> df = spark.sql("select * from my_db.item");
df.write().parquet("some_location_in_emr_hdfs");
Через несколько миллисекунд после того, как кто-то запускает этот SQL запрос в AWS Athena Web Console:
ALTER TABLE my_db.item SET LOCATION 's3://my_bucket/item_2020_03_03'
Предыдущее расположение данных таблицы Athena не удаляется и не изменяется. Ведро s3://my_bucket/item_2020_03_02
не изменилось.
Что происходит в задании Spark?
Счастливо ли оно продолжает читать данные, которые были данными таблицы Athena, когда оно началось: s3://my_bucket/item_2020_03_02
?
Или он столкнется с несогласованностью данных, поскольку часть данных будет считана из s3://my_bucket/item_2020_03_02
(старое местоположение), а часть данных из s3://my_bucket/item_2020_03_03
(новое местоположение)?
Или будет выдана какая-то AWS ошибка?