Как проверить, существует ли большая таблица запросов с помощью spark / scala - PullRequest
1 голос
/ 30 января 2020

Мне нужно выполнить определенную операцию с набором таблиц BQ, но я хочу выполнить операцию, если и только если я точно знаю, что все таблицы BQ существуют.

Я проверил большой запрос Google пакет, и у него есть образец для чтения данных из таблиц BQ - отлично Но что если мои таблицы действительно огромные? Я не могу загрузить все таблицы для проверки существования, так как это займет слишком много времени и кажется излишним.

Есть ли другой способ добиться этого? Я был бы очень рад, если бы я мог получить несколько указателей в правильном направлении.

Заранее спасибо.

Гаурав

Ответы [ 2 ]

1 голос
/ 30 января 2020

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");
}

1 голос
/ 30 января 2020

Вы можете использовать метод tables.get

https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get

В противном случае вы можете запустить команду BG CLI в скрипте bash, который может быть вызвано из вашей программы искры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...