通过创建脚本并通过Google API(BigQuery数据传输服务)运行脚本来调度作业,该脚本使用 protobuf消息时间戳记类型设置开始日期和结束日期。我无法将其更改为当前时间戳。
检查以下资源:
我曾尝试像下面那样设置属性,但这会引发错误“请求包含无效参数”。
now = time.time()
seconds = int(now)
start_time = Timestamp(seconds=seconds, nanos=0)
end_time = Timestamp(seconds=seconds, nanos=0)
请参见下面的工作示例:
#!/usr/bin/env python
from google.cloud import bigquery_datatransfer
from google.protobuf.timestamp_pb2 import Timestamp
client = bigquery_datatransfer.DataTransferServiceClient()
start_time = Timestamp()
end_time = Timestamp()
client.schedule_transfer_runs(client.get_transfer_config("projects/{project_id}/locations/europe/transferConfigs/{transfer_id}").name,
start_time=start_time,
end_time=end_time)
这可行,但是将请求的开始时间和结束时间发送到1970-01-01T00:00:00Z
时间戳的API-我希望能够将其更改为当前时间戳。
答案 0 :(得分:1)
如Timestamp
docs中所述,有几种方法可以做到这一点。如果只想使用当前时间构建时间戳,则可以简单地使用timestamp_message.GetCurrentTime()
。如果要使用seconds
值填充时间戳,则可以简单地使用timestamp_message.FromSeconds(seconds)
。
作为更完整的示例
start_time = Timestamp()
start_time.GetCurrentTime() # Stores the current time in start_time.
end_time = Timestamp()
seconds = 12345
end_time.FromSeconds(seconds) # Stores the number of seconds in end_time.
对于您的特定实例,您应该能够做到
#!/usr/bin/env python
from google.cloud import bigquery_datatransfer
from google.protobuf.timestamp_pb2 import Timestamp
client = bigquery_datatransfer.DataTransferServiceClient()
start_time = Timestamp()
start_time.GetCurrentTime()
end_time = Timestamp()
end_time.GetCurrentTime()
client.schedule_transfer_runs(client.get_transfer_config("projects/{project_id}/locations/europe/transferConfigs/{transfer_id}").name,
start_time=start_time,
end_time=end_time)