Python 从csv更新BigQuery表
假设我们在BigQuery中有一个标题如下的表: id |名称|价格 在这个表中大约有一百万行 而且,我们有一个csv文件,有100K行,标题相同:id | name | price CSV在ftp服务器上 但是:CSV中的几行具有与表中相同的id,其他行具有新id 任务是:通过与id匹配,将表中的行替换为CSV中的新行, 并使用新id从CSV追加行 例如,表中的:Python 从csv更新BigQuery表,python,google-bigquery,Python,Google Bigquery,假设我们在BigQuery中有一个标题如下的表: id |名称|价格 在这个表中大约有一百万行 而且,我们有一个csv文件,有100K行,标题相同:id | name | price CSV在ftp服务器上 但是:CSV中的几行具有与表中相同的id,其他行具有新id 任务是:通过与id匹配,将表中的行替换为CSV中的新行, 并使用新id从CSV追加行 例如,表中的: id | name | price 0, str0, 1000 1, str1, 1500 id | name | pric
id | name | price
0, str0, 1000
1, str1, 1500
id | name | price
0, str01, 1300
2, str2, 2500
在CSV中:
id | name | price
0, str0, 1000
1, str1, 1500
id | name | price
0, str01, 1300
2, str2, 2500
更新后我们应该
id | name | price
0, str01, 1300 (updated)
1, str1, 1500
2, str2, 2500 (new)
我可以使用像google.cloud这样的Python库吗???您可以使用以下步骤将数据更新到BigQuery中: 步骤1:将CSV文件复制到云存储
$ gsutil cp data.csv gs://demo-bucket-0816
$ bq mkdef --autodetect --source_format=CSV "gs://demo-bucket-0816/data.csv" > myschema
$ bq mk --external_table_definition=myschema bq_poc.ext_data
步骤2:创建表定义文件
$ gsutil cp data.csv gs://demo-bucket-0816
$ bq mkdef --autodetect --source_format=CSV "gs://demo-bucket-0816/data.csv" > myschema
$ bq mk --external_table_definition=myschema bq_poc.ext_data
步骤3:创建外部表
$ gsutil cp data.csv gs://demo-bucket-0816
$ bq mkdef --autodetect --source_format=CSV "gs://demo-bucket-0816/data.csv" > myschema
$ bq mk --external_table_definition=myschema bq_poc.ext_data
步骤4.1:使用BigQuery CLI合并语句
$ 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合并语句
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()
您可以使用以下步骤将数据更新到BigQuery中: 步骤1:将CSV文件复制到云存储
$ gsutil cp data.csv gs://demo-bucket-0816
$ bq mkdef --autodetect --source_format=CSV "gs://demo-bucket-0816/data.csv" > myschema
$ bq mk --external_table_definition=myschema bq_poc.ext_data
步骤2:创建表定义文件
$ gsutil cp data.csv gs://demo-bucket-0816
$ bq mkdef --autodetect --source_format=CSV "gs://demo-bucket-0816/data.csv" > myschema
$ bq mk --external_table_definition=myschema bq_poc.ext_data
步骤3:创建外部表
$ gsutil cp data.csv gs://demo-bucket-0816
$ bq mkdef --autodetect --source_format=CSV "gs://demo-bucket-0816/data.csv" > myschema
$ bq mk --external_table_definition=myschema bq_poc.ext_data
步骤4.1:使用BigQuery CLI合并语句
$ 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合并语句
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()
您可以使用
MERGE
语句您可以使用MERGE
语句