【问题标题】:Expected type '_SpecialForm[str]', got 'str' instead预期类型'_SpecialForm [str]',改为'str'
【发布时间】:2021-11-07 20:45:23
【问题描述】:

我正在尝试创建 BQ 表架构,如 page 所示

但我收到所有mode="REQUIRED" 的编译错误

除了 bq 模块之外,我没有看到任何特殊的要导入的东西。

Expected type '_SpecialForm[str]', got 'str' instead 

代码:

    bqServiceWrapper.create_table(_ADS_TO_REMOVE_TABLE_NAME,
                                  [
                                      bigquery.SchemaField("add_id", "STRING", mode="REQUIRED"),
                                      bigquery.SchemaField("timestamp_str", "TIMESTAMP", mode="REQUIRED"),
                                      bigquery.SchemaField("timestamp", "TIMESTAMP", mode="REQUIRED")
                                  ])

顺便说一句,python BQ 库是否允许creating a table without a schema(就像 Java 一样?)。如果是这样 - 类型如何隐含为 "TIMESTAMP" 而不是 "STRING"

【问题讨论】:

  • 我已经更新了你问题第二部分的答案。

标签: python-3.x google-cloud-platform google-bigquery bq


【解决方案1】:

您的代码中似乎有一个额外的mode=”REQUIRED”。此外,您的代码没有创建文档 table = bigquery.Table(table_id, schema=schema) 中提到的表。重写代码如下:

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()


client.create_table(bigquery.Table("ProjectID.Dataset.Table", schema= [
                                   bigquery.SchemaField("add_id", "STRING", mode="REQUIRED"),
                                   bigquery.SchemaField("timestamp_str", "TIMESTAMP", mode="REQUIRED"),
                                    bigquery.SchemaField("timestamp", "TIMESTAMP", mode="REQUIRED")
                                ]))

这会在 BigQuery 中创建具有所需架构的表:

要使用 Python 客户端库创建无模式表,您可以简单地运行上面没有模式的代码:client.create_table(bigquery.Table("ProjectID.Dataset.Table")) 或直接client.create_table("ProjectID.Dataset.Table")。 但是如果我们正在创建一个无模式表,我们需要通过自动检测或手动定义模式,然后我们才能向其中添加数据。假设您尝试将 CSV 文件中的数据加载到具有自动检测架构的空表中,则需要使用此 doc 中指定的受支持格式的时间戳数据。

【讨论】:

  • 额外的required 是复制粘贴问题。关于签名,它实际上对我有用。
  • 嗨@EladBenda,你能澄清一下你面临的问题是什么吗?因为我提供的代码是使用您提到的架构创建 BigQuery 表。
  • 如何启用“自动检测”?
  • 请参阅documentation 以启用架构自动检测。该文档展示了如何使用客户端库启用“自动检测”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 2019-01-14
  • 1970-01-01
  • 2020-02-09
  • 2017-11-12
  • 2022-12-17
相关资源
最近更新 更多