Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用spark/scala检查是否存在大查询表_Scala_Apache Spark_Google Bigquery - Fatal编程技术网

如何使用spark/scala检查是否存在大查询表

如何使用spark/scala检查是否存在大查询表,scala,apache-spark,google-bigquery,Scala,Apache Spark,Google Bigquery,我需要对一组BQ表执行某些操作,但我想执行该操作,前提是我确定所有BQ表都存在 我已经检查了google大查询包,它有一个从BQ表读取数据的示例-很好,但是如果我的表真的很大呢?我无法加载所有表以进行存在性检查,因为这将花费太多时间,而且似乎是多余的 有没有其他方法可以做到这一点?如果我能得到一些正确方向的指示,我将非常高兴 先谢谢你 Gaurav您可以使用方法tables.get 否则,您可以在bash脚本中运行BG CLI命令,该脚本可以从spark程序调用 spark.read.optio

我需要对一组BQ表执行某些操作,但我想执行该操作,前提是我确定所有BQ表都存在

我已经检查了google大查询包,它有一个从BQ表读取数据的示例-很好,但是如果我的表真的很大呢?我无法加载所有表以进行存在性检查,因为这将花费太多时间,而且似乎是多余的

有没有其他方法可以做到这一点?如果我能得到一些正确方向的指示,我将非常高兴

先谢谢你


Gaurav

您可以使用方法tables.get

否则,您可以在bash脚本中运行BG CLI命令,该脚本可以从spark程序调用

spark.read.option….load不会将所有对象加载到数据帧中。 spark.read.option。。。返回DataFrameReader。当您对其调用load时,它将测试连接并发出如下查询

选择*从选择*从对象SPARK\u GEN\u SUBQ\u 11,其中1=0

查询不会扫描任何记录,当表不存在时,查询将出错。我不确定BigQuery驱动程序,但是jdbc驱动程序在这里抛出一个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");
}


非常感谢。让我检查一下这个选项。看起来很有希望。我很快就会回来。我看到谷歌没有官方的spark sql连接器。有一个,但它是在测试,但即使与官方驱动程序。如果表不存在,它会在sc.newAPIHadoopRDD上出错吗?如果是这样,您可以在这里使用类似的方法,捕获这些异常并仅在未引发异常时继续