Я работаю над кластером AWS с ульем и искрой.В предыдущий день я столкнулся со странной ситуацией, когда выполнял сценарий pyspark ETL над внешней таблицей в кусте.
У нас есть контрольная таблица, в которой есть столбец даты извлечения.И мы фильтруем данные из промежуточной таблицы (управляемая таблица в кусте, но ее местоположение - сегмент s3) на основе даты извлечения и загрузки в целевую таблицу, которая является внешней таблицей с данными, расположенными в сегменте s3.Мы загружаем таблицу, как показано ниже
spark.sql("INSERT OVERWRITE target_table select * from DF_made_from_stage_table")
Теперь, когда я проверил счетчик (*) по целевой таблице с помощью спарка, а также с помощью CLI прямого улья, оба дают различный счет
в искре:
spark.sql("select count(1) from target") -- giving 50K records
в улье:
select count(1) from target -- giving a count 50k - 100
Примечание: периодически возникала проблема со статистикой по внешней таблице, которая давала -1 в качестве числа в улье.Это мы решили, запустив
ANALYZE TABLE target COMPUTE STATISTICS
Но даже после выполнения всех этих действий мы получаем original_count-100 в улье, где правильный счет в искре.