使用Python将现有BQ表中的列添加到另一个BQ表中

时间:2019-07-25 12:52:02

标签: python sql datatable google-bigquery

我正在尝试用现有的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]处意外的额外令牌INSERT”另外,我是否必须连续用ref.datasetid.tableid引用表,还是可以只写tableid?我在到达那里之前就遇到了错误,所以我仍然不确定。还是一个初学者,因此非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

BigQuery does not support ALTER TABLE or other DDL statements,研究一下Modifying table schemas在加载作业期间如何向表中添加数据时如何添加新列的示例。