python - 使用 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?我在它到达那里之前遇到了错误,所以我仍然不确定。仍然是初学者,非常感谢您的帮助!
解决方案
BigQuery 不支持ALTER TABLE
或其他 DDL 语句,请查看如何在此处修改表架构,您可以找到在加载作业期间将数据附加到表时如何添加新列的示例。
推荐阅读
- excel - 如何最好地将 0 添加到 range.value 的开头,直到它在 Excel 中的长度为 13 个字符?
- amazon-web-services - HTTPS 到 HTTP 重定向在 ALB 中不起作用
- reactjs - React Download JS PDF文件下载错误
- javascript - 如何在页面加载时自动禁用多选下拉菜单并根据另一个下拉菜单的值启用它?
- angular - 在映射中为对象中的特定元素集应用索引编号
- javascript - 为什么使用 axios 发出 get 请求失败并显示状态码 503?
- javascript - 单击按钮时CSS翻转
- bash - 第 21 行:$'\r':在 wsl 中找不到命令
- node.js - 具有日期选择器输入的表单。我正在使用 nodejs 将我的数据发送到数据库
- system-verilog - SystemVerilog $bits() 返回类型?