如何通过Python客户端库为Google BigQuery设置现有表过期?
使用官方软件,似乎无法在现有表上设置表如何通过Python客户端库为Google BigQuery设置现有表过期?,python,google-bigquery,Python,Google Bigquery,使用官方软件,似乎无法在现有表上设置表过期时间(或其他属性);你只能“在上面” API本身有一个命令,允许设置expirationTime属性。但是,我在客户机库代码中看不到这种用法 client.py中的以下代码用于create\u table,我认为只需将“POST”更改为“PATCH”并将table\u id添加到路径中即可 客户端库中不支持表修补是有原因的还是我遗漏了什么 table = _table_arg_to_table(table, default_project=sel
过期时间(或其他属性);你只能“在上面”
API本身有一个命令,允许设置expirationTime
属性。但是,我在客户机库代码中看不到这种用法
client.py
中的以下代码用于create\u table
,我认为只需将“POST”
更改为“PATCH”
并将table\u id
添加到路径中即可
客户端库中不支持表修补是有原因的还是我遗漏了什么
table = _table_arg_to_table(table, default_project=self.project)
path = "/projects/%s/datasets/%s/tables" % (table.project, table.dataset_id)
data = table.to_api_repr()
try:
api_response = self._call_api(retry, method="POST", path=path, data=data)
return Table.from_api_repr(api_response)
except google.api_core.exceptions.Conflict:
if not exists_ok:
raise
return self.get_table(table.reference, retry=retry)
我能够编写一个patch\u table()
函数,该函数利用当前的客户机
对象。这里的潜在问题是,如果\u call\u api
函数名发生任何更改,它将中断:
def patch_table(client, table, expires):
""" Support table patching similar to `create_table`
RE: https://stackoverflow.com/questions/59431486/
RE: https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/patch
:param client: `google.cloud.bigquery.client.Client` object.
:param table: `google.cloud.bigquery.Table` object.
:param expires: New expiration to apply to table.
"""
from google.cloud.bigquery import Table
from google.cloud.bigquery.retry import DEFAULT_RETRY
assert isinstance(table, Table)
table.expires = expires
# table.description and table.labels can also be set here
path = f"/projects/{bq.project}/datasets/{dataset}/tables/{table}"
data = table.to_api_repr()
api_response = client._call_api(
DEFAULT_RETRY, method="PATCH", path=path, data=data)
return Table.from_api_repr(api_response)
希望这能帮助其他人。也许可以将其添加到客户机。客户机有一个更新表的方法:和
您可以使用检索表格设置以获取表格。表格
。然后,使用新的所需日期修改expires
属性,并使用update\u table
对其进行更新(注意,我们指定了要更新的字段列表):
table\u info=client.get\u table(table\u name)
表_info.expires=datetime.now()+timedelta(天=1)
新建\u表\u信息=client.update\u表(
表_信息,['expires'])
例如,我创建了一个没有过期的空表:
$bq mk-t test.expiration
已成功创建表“PROJECT\u ID:test.expiration”。
然后运行脚本(库版本为googlecloudbigquery==1.23.1
):
初始到期:无
最终到期时间:2019-12-22 08:47:52.507000+00:00
完整代码:
从日期时间导入日期时间
从日期时间导入时间增量
从google.cloud导入bigquery
project\u id=“project\u id”
表\u name=“测试到期”
client=bigquery.client(project=project\u id)
#获取初始到期日期
table\u info=client.get\u table(table\u name)
打印(“初始到期:{}”。格式(表_info.expires))
#使用新的所需字段进行更新
表_info.expires=datetime.now()+timedelta(天=1)
新建\u表\u信息=client.update\u表(
表_信息,['expires'])
#检查结果
打印(“最终到期:{}”。格式(新的表格信息到期))
谢谢,我知道一定有办法在当前客户机中实现这一点。这种方法似乎不必要地复杂。当我尝试这种方法时,更新的效果只是使表消失。知道为什么吗?也张贴为。