Я хочу запустить recoverPartitions
для таблиц, которые могут иметь или не иметь разделы.
Прямо сейчас я вижу два варианта, оба из которых кажутся довольно странными:
(1) проверяет оператор create table
перед выполнением:
table_name = 'my_schema.my_table'
x = sql(sprintf('show create table %s', table_name))
if (grepl('PARTITIONED BY', collect(x), fixed = TRUE)) {
recoverPartitions(table_name)
}
(2) tryCatch
tryCatch(recoverPartitions(table_name),
error = function(e) {
if (grepl('ALTER TABLE RECOVER PARTITIONS', e$message, fixed = TRUE))
# expected error in case of non-partitioned table
return(NULL)
# else an unexpected error
else stop(e$message, .call = FALSE)
})
Действительно ли это "правильный" / "канонический" подход к гибкому восстановлению разделов? Я не вижу ничего другого в SparkR
документации и не вижу ничего наводящего на поиски [pP]artition
в formals
из Namespace
из SparkR
.
Если да, то предпочтительнее ли один (например, эффективность) перед другим?