Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从csv更新BigQuery表_Python_Google Bigquery - Fatal编程技术网

Python 从csv更新BigQuery表

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

假设我们在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 | 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
语句