Spark 读取 BigQuery 外部表

4

尝试从BigQuery读取外部表,但出现错误

    SCALA_VERSION="2.12"
    SPARK_VERSION="3.1.2"
    com.google.cloud.bigdataoss:gcs-connector:hadoop3-2.2.0,
    com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.24.2'

    table = 'data-lake.dataset.member'
    df = spark.read.format('bigquery').load(table)
    df.printSchema()

结果:

root
  |-- createdAtmetadata: date (nullable = true)
  |-- eventName: string (nullable = true)
  |-- producerName: string (nullable = true)

所以当我打印

df.createOrReplaceTempView("member")
spark.sql("select * from member limit 100").show()

我收到了以下错误信息:
INVALID_ARGUMENT: 请求失败:只有带有连接的外部表才能使用 Storage API 读取。

这是否特定于外部表?您尝试过文档中的示例吗?https://cloud.google.com/dataproc/docs/tutorials/bigquery-connector-spark-example#pyspark - Dagang
这是针对外部表的特定情况,当我选择“普通”表时它可以工作。 - Pedro Rodrigues
2个回答

4

由于Spark不支持外部表在查询中使用,我尝试了其他方法并获得了以下结果!

def read_query_bigquery(project, query):
df = spark.read.format('bigquery') \
  .option("parentProject", "{project}".format(project=project))\
  .option('query', query)\
  .option('viewsEnabled', 'true')\
  .load()

return df

project = 'data-lake'
query = 'select * from data-lake.dataset.member'
spark.conf.set("materializationDataset",'dataset')
df = read_query_bigquery(project, query)
df.show()

1

BigQuery连接器使用BigQuery Storage API读取数据。目前此API不支持外部表,因此该连接器也不支持它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接