首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从csv更新BigQuery表

从csv更新BigQuery表
EN

Stack Overflow用户
提问于 2019-11-20 14:25:44
回答 1查看 1.5K关注 0票数 1

假设我们在BigQuery中有一个表,它的头类似于: id,_ name,_

在这个表中,大约有100万行。

而且,我们有一个具有100 K行的CSV文件,它具有相同的标题: id \ name _

但是: CSV中的几行具有与表中相同的id,而其他行具有新的id。

其任务是:将表中的行替换为来自CSV的新行,将其与id匹配,并将CSV中的行添加到新id中。

例如,表中的

代码语言:javascript
运行
复制
id | name | price

0, str0, 1000

1, str1, 1500

CSV中的

代码语言:javascript
运行
复制
id | name | price

0, str01, 1300

2, str2, 2500

更新后,我们应该有

代码语言:javascript
运行
复制
id | name | price

0, str01, 1300 (updated)

1, str1, 1500

2, str2, 2500 (new)

我能用像google.cloud这样的Python库吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-16 13:45:36

您可以使用以下步骤将数据更新为BigQuery:

步骤-1:将CSV文件复制到云存储

代码语言:javascript
运行
复制
$ gsutil cp data.csv gs://demo-bucket-0816 

步骤2:创建表定义文件

代码语言:javascript
运行
复制
$ bq mkdef --autodetect --source_format=CSV "gs://demo-bucket-0816/data.csv" > myschema

步骤-3:创建外部表

代码语言:javascript
运行
复制
$ bq mk --external_table_definition=myschema bq_poc.ext_data

步骤-4.1:使用BigQuery CLI合并语句

代码语言:javascript
运行
复制
$ bq query --nouse_legacy_sql 'MERGE bq_poc.target_data td USING bq_poc.ext_data ed ON td.id = ed.id WHEN MATCHED THEN UPDATE SET price=ed.price WHEN NOT MATCHED THEN INSERT (id, name, price) VALUES(ed.id, ed.name, ed.price)'

步骤4.2:使用Python的合并语句

代码语言:javascript
运行
复制
from google.cloud import bigquery

mergeQuery = """MERGE bq_poc.target_data td 
                USING bq_poc.ext_data ed 
                    ON td.id = ed.id 
                WHEN MATCHED THEN 
                    UPDATE SET price=ed.price 
                WHEN NOT MATCHED THEN 
                    INSERT (id, name, price) VALUES(ed.id, ed.name, ed.price)"""
bigqueryClient = bigquery.Client()
sqlJob = bigqueryClient.query(mergeQuery)
sqlJob.result()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58956618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档