预期类型为'_SpecialForm[str]',实际传入的是'str'。

4
我正在尝试创建一个BQ表模式,就像在这个页面中所看到的。
但是对于所有的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库是否允许 创建无模式表(就像Java那样)?如果是的话,如何将类型推断为"TIMESTAMP"而不是"STRING"


我已经更新了你问题的第二部分的答案。 - Krish
1个回答

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文件中的数据加载到具有自动检测模式的空表中,则需要按照此文档中指定的支持格式提供时间戳数据。


“required” 多加了一个是复制粘贴问题。至于签名,实际上对我有用。 - Elad Benda
嗨@EladBenda,您能否澄清您面临的问题是什么?因为我提供的代码正在使用您提到的模式创建BigQuery表。 - Krish
如何启用“自动检测”? - Elad Benda
请参考此文档,以启用模式自动检测。该文档展示了如何使用客户端库来启用“自动检测”。 - Krish

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