使用 Python 将现有 BQ 表中的列添加到另一个 BQ 表
Posted
技术标签:
【中文标题】使用 Python 将现有 BQ 表中的列添加到另一个 BQ 表【英文标题】:Adding a column from an existing BQ table to another BQ table using Python 【发布时间】:2019-07-25 12:52:02 【问题描述】:我正在尝试从现有的 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 吗?在它到达那里之前我遇到了错误,所以我仍然不确定。仍然是初学者,非常感谢您的帮助!
【问题讨论】:
【参考方案1】:BigQuery does not support ALTER TABLE
or other DDL statements,看看Modifying table schemas 如何在加载作业期间将数据附加到表中时找到如何添加新列的示例。
【讨论】:
以上是关于使用 Python 将现有 BQ 表中的列添加到另一个 BQ 表的主要内容,如果未能解决你的问题,请参考以下文章