【问题标题】:How to query INFORMATION_SCHEMA view using spark bq connector?如何使用 spark bq 连接器查询 INFORMATION_SCHEMA 视图?
【发布时间】:2021-09-27 10:06:27
【问题描述】:

我正在尝试使用以下查询识别从 BQ 表更新的分区:

select * from PROJECT-ID.DATASET.INFORMATION_SCHEMA.PARTITIONS where 
table_name='TABLE-NAME' and 
extract(date from last_modified_time)='TODAY-DATE'

这在 BQ 控制台上运行良好。但是,当我使用来自 spark-bq 连接器的相同查询时,它失败了。

spark.read.format("bigquery").load("PROJECT-ID.DATASET.INFORMATION_SCHEMA.PARTITIONS")

错误:

"Invalid project ID PROJECT-ID. Project IDs must contain 6-63 lowercase letters, digits, or dashes. Some project IDs also include domain name separated by a colon. IDs must start with a letter and may not end with a dash."

我尝试了多种组合,例如在 PROJECT-ID 后添加 `,但 API 仍然抛出 400 错误。

从 spark-bq 连接器查询 INFORMATION_SCHEMA 的正确方法是什么?

【问题讨论】:

    标签: apache-spark google-cloud-platform google-bigquery


    【解决方案1】:

    将项目设置为 parentProject 正在解决问题。

    spark.read
    .format("bigquery")
    .option('parentProject', project_id)
    

    【讨论】:

    • 我试过了,但在加载步骤中得到了无效的项目 ID
    【解决方案2】:

    INFORMATION_SCHEMA 不是 BigQuery 中的标准数据集,因此无法通过 spark-bigquery 连接器使用的 BigQuery Storage API 获得。但是,您可以通过以下方式对其进行查询并将数据加载到数据框中:

    spark.conf.set("viewsEnabled","true")
    spark.conf.set("materializationDataset","<dataset>")
    val tablesDF = spark.read.format("bigquery").load("select * from `<projectId>.<dataset>.__TABLES__`")
    

    【讨论】:

    • 我试过这个但得到无效的表ID Must match '^(((\S+)[:.])?(\w+)\.)?([\S&amp;&amp;[^.:]]+)$$'
    • 请使用最新版本的连接器
    猜你喜欢
    • 2015-12-22
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多