spark.read.option(...).load
не загружает все объекты в информационный кадр. spark.read.option(...)
возвращает DataFrameReader
. когда вы вызываете load
для него, он проверит соединение и выдаст запрос, подобный
SELECT * FROM (select * from objects) SPARK_GEN_SUBQ_11 WHERE 1=0
Запрос не будет сканировать какие-либо записи и выдаст ошибку, если таблица не существовать. Я не уверен насчет драйвера BigQuery, но драйверы jdb c выдают здесь исключение java, которое вам нужно обработать в блоке try {} catch {}
.
Таким образом, вы можете просто вызвать load, перехватить исключения и проверьте, все ли кадры данных могут быть созданы. Вот пример кода
def query(q: String) = {
val reader = spark.read.format("bigquery").option("query", q)
try {
Some(reader.load())
} catch {
case e: Exception => None
}
}
val dfOpts = Seq(
query("select * from foo"),
query("select * from bar"),
query("select * from baz")
)
if(dfOpts.exists(_.isEmpty)){
println("Some table is missing");
}