当前位置: 首页 > 知识库问答 >
问题:

BigQueryPython客户端:使用表描述从查询创建表

韩淇
2023-03-14

我使用python客户端通过SQL创建表,如文档(https://cloud.google.com/bigquery/docs/tables)中所述:

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'your_dataset_id'

job_config = bigquery.QueryJobConfig()
# Set the destination table
table_ref = client.dataset(dataset_id).table('your_table_id')
job_config.destination = table_ref
sql = """
    SELECT corpus
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY corpus;
"""

# Start the query, passing in the extra configuration.
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish
print('Query results loaded to table {}'.format(table_ref.path))

除了用于通过SQL查询创建表的客户机函数使用了一个job_config对象,而job_config接收的是一个table_ref,而不是table对象之外,这种方法工作得很好。

我在这里找到了用于创建表的文档,其描述如下:https://google-cloud-python.readthedocs.io/en/stable/bigquery/usage.html,但这适用于不是通过查询创建的表。

在指定表的描述时,如何从查询创建表?

共有1个答案

郭炳
2023-03-14

由于您不只是想将SELECT结果保存到新表中,因此最好的方法不是在job\u config变量中使用目标表,而是使用CREATE命令

因此,您需要做两件事:

  1. 从代码中删除以下两行
table_ref = client.dataset(dataset_id).table('your_table_id')   
job_config.destination = table_ref
#standardSQL
CREATE TABLE dataset_id.your_table_id
PARTITION BY DATE(_PARTITIONTIME)
OPTIONS(
    description = 'this table was created via agent #123'
) AS
SELECT corpus
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY corpus;
 类似资料:
  • 查询返回此错误。 Elasticsearch\Common\Exceptions\BadRequest est400Exception:{"error":{"root_cause":[{"type":"parsing_exception","原因":"未知查询[查询]","line": 1,"coll": 62}],"type":"x_content_parse_exception","原因":"

  • 创建客户端有两种方式,一种是直接使用特化的构造器函数,另一种是使用工厂构造器函数。 第一种方式返回的是具体的客户端结构体指针对象,第二种方式返回的是客户端接口对象。 使用特化的构造器函数创建客户端 特化的构造器函数有下面几个: func NewHTTPClient(uri ...string) (client *HTTPClient) func NewTCPClient(uri ...string

  • 问题内容: 我可以这样创建一个临时表: 但是新表不可读,因为它说它没有主键。 是exisitingtable的主键,因此我希望它在temp表中得到相同的处理。 但是,无论如何,我宁愿找到某种ORM方式来执行此操作。鉴于: 如何在不执行100000命令的情况下填充一些选定的内容?还是有一种方法可以通过类似于上面的普通SQL版本的查询来创建表? 问题答案: 它不完全是ORM,但为了最初创建表,我将克隆

  • 如何转换react查询以适应自定义类型?? 注意:我在前端使用的是JavaScipt,而不是Typescript

  • 问题内容: 这是两个相关的问题。将它们一起发布更有意义。 问题1 我有一个node.js应用程序,它向所有客户端发出事件,所有当前客户端都将发出一个响应。如何创建所有回复到初始发射的客户端的列表,以及可以使用哪种标识来区分客户端? 问题2: 在收集已连接的客户端列表之后,我想做的就是访问一个具有行数的MySQL数据库表,并为每个客户端行分配一个表。这些行将被发回给它们各自的客户端。如何才能做到这一

  • 问题内容: 该站点仅包含JSON文档,而没有Java客户端。我应该执行某种映射吗? 例如地理位置查询:http : //www.elasticsearch.org/guide/reference/query- dsl/geo-distance-range- filter.html 如何使用Java客户端编写这样的查询? 谢谢杰森 问题答案: 不明显但不那么复杂;)