当前位置: 首页 > 面试题库 >

Python:如何在不到40秒的时间内更新Google BigQuery中的值?

游乐池
2023-03-14
问题内容

我有一个表GoogleBigQuery,我访问和使用Python中的修改pandas功能read_gbqto_gbq。问题在于,添加100,000行需要大约150秒,而添加1行需要大约40秒。我想更新表中的值而不是添加一行,有没有一种方法可以使用python快速或快于40秒来更新表中的值?


问题答案:

不确定是否可以使用pandas但可以使用google-cloud库。

您可以只安装(pip install --upgrade google-cloud)并按以下方式运行它:

import uuid
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path_to_json_credentials.json'
from google.cloud.bigquery.client import Client

bq_client = Client()

job_id = str(uuid.uuid4())
query = """UPDATE `dataset.table` SET field_1 = '3' WHERE field_2 = '1'"""
job = bq_client.run_async_query(query=query, job_name=job_id)
job.use_legacy_sql = False
job.begin()

在这里,此操作平均需要2s。

附带说明一下,牢记与BQ中DML操作相关的配额很重要,也就是说,知道何时使用它们以及它们是否完全适合您的需求。



 类似资料:
  • 我正在使用django模型。django设置中的TIMEZONE是UTC。并通过做一些算术来构建时间戳。 当我使用::timestamp时,时间戳返回为2021 07月26日00:00:00如果我使用::timestamp,它将变为2021 07月26日00:00:00,即使请求的\u时区是“美国/纽约” 我希望输出为2021 07月26日00:00:00-04:00,即显示与“附加美国/纽约”偏

  • 我对Anylogic中源的到达时间有问题。 因此,问题的状态是,“客户到达时的到达时间呈指数分布,平均10秒”。所以我把“到达时间”定义为“到达间隔时间”,把“到达间隔时间”定义为“指数(0.167)”和“最小值”。然而,正如我所模拟的,该模型似乎有一些问题,因为它没有生成足够的代理。 我的做法错了吗? 非常感谢你!

  • 问题内容: 我想使用Python解析如下的自由文本时间间隔: 1秒 2分钟 3小时 4天 5周 6个月 7年 是否有一种轻松的方法,理想情况下,只需调用一个库函数即可? 我试过了: ,它可以理解从几秒钟到几小时的信息,但不能理解几天甚至更长的时间。 ,它可以理解几天,但会在数周或更长时间内失败,并且无提示(例如,它可能会创建一个长度为0的间隔,或将“ 2个月”解析为2分钟)。 问题答案: 这是我的

  • 问题内容: 我有一本代表书店的字典。键代表书名,值代表当前书的份数。从商店出售书籍时,书籍的份数必须减少。 我已经编写了减少售书数量的代码,但是在更新后打印字典时,我得到的是初始字典,而不是更新的字典。 我想以最简单的方式解决问题。我是否错过了代码中的任何逻辑或任何行? 问题答案: 好吧,您可以仅通过引用键直接从值中减去。我认为这更简单。 在您的情况下:

  • 问题内容: 在页面的页脚中,我想添加诸如“最后更新xx / xx / 200x”之类的内容,该日期为最后一次更新某些mySQL表的时间。 最好的方法是什么?有检索上次更新日期的功能吗?每次需要此值时都应该访问数据库吗? 问题答案: 在更高版本的MySQL中,您可以使用数据库来告诉您何时更新了另一个表: 当然,这确实意味着要打开与数据库的连接。 另一种选择是每当更新MySQL表时“触摸”特定文件:

  • 问题内容: 基本上我有这个问题的反面:h:m:s的Python时间秒 我有一个格式为H:MM:SS的字符串(分钟和秒始终为2位数字),我需要它代表的整数秒数。如何在python中执行此操作? 例如: “ 1:23:45”将产生5025的输出 “ 0:04:15”将产生255的输出 “ 0:00:25”将产生25的输出 等等 问题答案: def get_sec(time_str): “”“Get S