我正在使用AppEngine和Python运行时环境为我的团队托管一个仪表板。仪表板的数据存储在Memcache和/或Cloud Datastore中。使用BigQuery API将新数据拉入应用程序。返回来自最近put()的所有实体(数据)
class ExampleForStackOverflow(webapp2.RequestHandler):
def get(self):
credentials = GoogleCredentials.get_application_default()
bigquery_service = build('bigquery', 'v2', credentials=credentials)
query = """SELECT field1, field2
FROM
[table_name];"""
try:
timeout = 10000
num_retries = 5
query_request = bigquery_service.jobs()
query_data = {
'query': (query),
'timeoutMs': timeout,
}
query_response = query_request.query(
projectId='project_name',
body=query_data).execute(num_retries=num_retries)
# Insert query response into datastore
for row in query_response['rows']:
parent_key = ndb.Key(MyModel, 'default')
item = MyModel(parent=parent_key)
item.field1 = row['f'][0]['v']
item.field2 = row['f'][1]['v']
item.put()
except HttpError as err:
print('Error: {}'.format(err.content))
raise err
这些查询将返回不确定数量的记录。我希望仪表板显示查询的结果,而不管记录的数量是多少,所以使用order()方法创建,然后使用fetch()来拉取一定数量的记录也无济于事。
是否可以编写一个查询以返回最后put()操作的所有内容?
到目前为止,我已经试图返回已写入一定的时间窗口内的所有记录(例如How to query all entries from past 6 hours (datetime) in GQL?)
,是不是在一个可靠的方式为我工作,因为每隔一段时间cron作业的查询因为新数据将失败,所以我留下一张空白图,直到第二天执行cron作业。
我需要一个永远不会返回数据的弹性查询。提前致谢。
祖先查询只是在其中可以指定一个祖先的关键,它在你的情况下,是共同的父键查询: –
'query = MyModel.query(ancestor = ndb.Key(MyModel,'default'))。order(-MyModel.created)' –
谢谢,丹!我很感激。 – afed