【问题标题】:delete bigquery table from spark by using scala使用 scala 从 spark 中删除 bigquery 表
【发布时间】:2020-07-19 04:11:15
【问题描述】:

有没有办法使用 Scala 从 Spark 中删除 BigQuery 表?

我只找到了使用示例中的 Scala 从 Spark 读取和写入 BigQuery 表的方法: https://cloud.google.com/dataproc/docs/tutorials/bigquery-connector-spark-example

有人可以提供删除 BigQuery 表的示例吗?例如,我可以使用此语句“drop table if exists projectid1.dataset1.table1”在 BigQuery 控制台中删除一个表。

请注意,我删除现有表的目的不是覆盖。我只是想删除它。请帮忙。谢谢。

【问题讨论】:

  • 为什么要从 Spark 中进行操作? Spark 是分析引擎,而不是 JDBC 或 SQL Developer。
  • @MikhailIonkin 这是分析过程中的一个步骤。

标签: scala apache-spark google-bigquery


【解决方案1】:

请参考BigQuery API

import com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.{BigQueryOptions, TableId}

val bq = BigQueryOptions.getDefaultInstance().getService() 
val table = bq.getTable(TableId.of("projectid1", "dataset1", "table1"))
if(table != null) {
  table.delete()
}

请注意,这应该可以在 Dataproc 中使用。在其他集群中,您需要正确设置凭证

【讨论】:

  • 谢谢@David Rabinowitz。我试过了,但它给了我一些错误:import com.google.cloud.bigquery.BigQueryOptions com.google.cloud.bigquery.BigQueryOptions import com.google.cloud.bigquery.BigQueryOptions scala> val bq = BigQueryOptions.getDefaultInstance()。 getService() java.lang.NoClassDefFoundError: com/google/common/base/MoreObjects at com.google.cloud.ServiceOptions.(ServiceOptions.java:290) ... 引起:java.lang.ClassNotFoundException: com .google.common.base.MoreObjects at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
  • 另外,顺便说一下,我在你提供的链接中找不到 scala 库,你能更具体一点吗?
  • 没有 Scala API,只有 Java(兼容 Scala)。该库依赖于 Guava 的最新版本,其中 spark 提供了一个古老的版本 (14.0.1)。您可以将番石榴添加到您的项目中并对其进行遮蔽,这样它就不会与 Spark 的番石榴发生冲突。如果您使用 spark-bigquery-connector,那么您在 com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery 中有 bigquery 客户端(使用 spark-bigquery-with-dependencies 工件
  • 与scala版本无关。请查看修改后的代码示例,看看它是否适合您。
  • 你能先试试 spark-shell 吗?以上只是用 Scala 2.11.12 和 spark 2.4.5 测试过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2018-11-24
  • 2018-10-17
  • 2021-06-01
相关资源
最近更新 更多