Отказоустойчивое восстановление Разделы - PullRequest
0 голосов
/ 09 сентября 2018

Я хочу запустить 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.

Если да, то предпочтительнее ли один (например, эффективность) перед другим?

...