首页 > 解决方案 > GCP BigQuery 在尝试获取架构的状态时抛出无效的 URL,即使架构存在

问题描述

架构很好地存在,我可以在 BigQuery 上复制和运行。在 requirements.txt 我们使用的是最新的包(google-cloud-bigquery)

异常无效的 URL 'None/bigquery/v2/projects/XXXXXX/XXXXXX 未提供架构。也许您的意思是http://None/bigquery/v2/projects/XXXX/XXX

代码片段:

client = bigquery.Client(project="XXXXXXXX")
client_bq.get_table(table_ref)

标签: google-bigquery

解决方案


我不清楚你到底传递了什么变量table_ref,所以我将解释这个方法的期望,希望能帮助你做对。

注意:小心你的client对象被用作client_bq,它不会运行。

根据文档,方法client.get_table(table_ref)( docs ) 期望 a是指向表的指针,如果是 a ,则它必须包含 a 、和,每个都由(dot) 分隔,例如,来自 BigQuery 的公共数据集:table_reftable_refstringproject IDdataset IDtable ID.

table_ref = "bigquery-public-data.noaa_historic_severe_storms.storms_2019"

鉴于此table_ref,以下代码应该可以工作:

client = bigquery.Client(project="my_project_id")
client.get_table(table_ref)

另一方面,如果您想创建table_refTable对象,请注意您不需要提供schema,此参数是可选的(docs)。

table_ref = bigquery.table.Table("bigquery-public-data.noaa_historic_severe_storms.storms_2019")

如果您的目标是创建一个有效的schema,在文档中声明这是使用SchemaField对象构建的,那么文档是此时的最佳参考,如果您想要一个示例,您可以通过保存Table对象并获取schema属性来获取它,如下所示:

>>> table = client.get_table(table_ref)
>>> table.schema

(在 Python 控制台中运行代码)

样本输出:

[SchemaField('magnitude', 'FLOAT', 'NULLABLE', 'Description', ()),
SchemaField('magnitude_type', 'STRING', 'NULLABLE', 'Description', ()),
SchemaField('flood_cause', 'STRING', 'NULLABLE', 'Description', ())]

推荐阅读