首页 > 解决方案 > 使用 Python 将现有 BQ 表中的列添加到另一个 BQ 表

问题描述

我正在尝试从现有的 BQ 表创建新表,所有这些都在 python 中。到目前为止,我已经使用一些类似的代码成功地创建了表,但现在我想从另一个表中添加另一列 - 我没有成功。我认为问题出在我的 SQL 代码中。

基本上我在这里想要添加另一个名为“ip_address”的列,并将另一个表中的所有信息放入该列。

我已经尝试拆分两个 SQL 语句并分别运行它们,我尝试了许多不同的命令组合(获取我们的 CHAR,在之后添加 (32),将所有语句组合成一个语句等),但我仍然运行成问题。

from google.cloud import bigquery


def alter(client, sql_alter, job_config, table_id):
    query_job = client.query(sql_alter, job_config=job_config)
    query_job.result()
    print(f'Query results appended to table {table_id}')


def main():

    client = bigquery.Client.from_service_account_json('my_json')
    table_id = 'ref.datasetid.tableid'

    job_config = bigquery.QueryJobConfig()

    sql_alter = """
        ALTER TABLE `ref.datasetid.tableid`
        ADD COLUMN ip_address CHAR;
        INSERT INTO `ref.datasetid.tableid` ip_address
        SELECT ip
        FROM `ref.datasetid.table2id`;
    """

    alter(client, sql_alter, job_config, table_id)

if __name__ == '__main__':
    main()

使用此代码,当前错误是“400 语法错误:[4:9] 处意外的额外令牌插入”另外,我是否必须不断引用我的表,ref.datasetid.tableid或者我可以只写 tableid?我在它到达那里之前遇到了错误,所以我仍然不确定。仍然是初学者,非常感谢您的帮助!

标签: pythonsqldatatablegoogle-bigquery

解决方案


BigQuery 不支持ALTER TABLE或其他 DDL 语句,请查看如何在此处修改表架构,您可以找到在加载作业期间将数据附加到表时如何添加新列的示例。


推荐阅读