Python 2.7& GCP Google BigQuery:CREATE TABLE AS SELECT ....(CTAS)

时间:2017-11-22 15:51:50

标签: python-2.7 google-bigquery

我正在使用python 2.7(现在无法更改)和google.cloud.bigquery的Google python客户端库v0.28,我试图弄清楚我是怎样的#&# 39; d做一个"创建表XX作为从Y中选择a,b,c,其中n =' helloworld'"。

我们称之为" CREATE TABLE AS SELECT" (CTAS)在其他数据库中,虽然我不确定通过python在bq中执行此操作的最佳方法是什么。

这是一篇有趣的文章,谈论使用一份工作,但我认为bq python库只有几种类型的工作,所以我不知道从哪一个开始。 (LoadJob,CopyJob,ExtractJob和QueryJob) https://chartio.com/resources/tutorials/how-to-create-a-table-from-a-query-in-google-bigquery/

这是一个很好的bigquery_client.create_table函数,但我不认为我可以设置查询配置字段或其中的任何实际配置字段。

因此,您可以提供任何帮助或指导,我们将不胜感激。如果你在美国,我希望你有一个愉快的感恩节假期。

非常感谢,并向所有我的大朋友致以最诚挚的问候...... Rich

BEGIN EDIT

这个可以关闭,下面的帮助和以下链接解决了我需要的东西,我把我的代码放在这里为其他可能需要它的人。

代码被劫持 Create a table from query results in Google BigQuery

def create_table_as_select(dataset_name, table_name, sqlQuery, project=None):
    try:
    job_config = bigquery.QueryJobConfig()

    # Set configuration.query.destinationTable
    dataset_ref = bigquery_client.dataset(dataset_name)
    table_ref = dataset_ref.table(table_name)

    job_config.destination = table_ref

    # Set configuration.query.createDisposition
    job_config.create_disposition = 'CREATE_IF_NEEDED'

    # Set configuration.query.writeDisposition
    job_config.write_disposition = 'WRITE_APPEND'

    # Start the query
    job = bigquery_client.query(sqlQuery, job_config=job_config)

    # Wait for the query to finish
    job.result()

    returnMsg = 'Created table {} .'.format(table_name)

    return returnMsg

except Exception as e:
    errorStr = 'ERROR (create_table_as_select): ' + str(e)
    print(errorStr)
    raise

1 个答案:

答案 0 :(得分:2)

  

指导将不胜感激

BigQuery不支持DDL(希望如此) - 因此您应该使用常规方式:jobs.insert分别使用destination tablewrite disposition

https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.query