我正在学习使用Python客户端库v0的BigQueryAPI。28https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html#run-简单查询
编写了以下简单代码以从表中获取数据
1) 创建客户端对象
client_ = bigquery.Client.from_service_account_json('/Users/xyz/key.json')
2) 开始新的异步查询作业
QUERY = 'SELECT visitid FROM `1234567.ga_sessions_20180101`'
query_job = client_.query(QUERY
, job_id=str(uuid.uuid4()))
3)轮询,直到查询完成
while (query_job.state == 'RUNNING'):
time.sleep(5)
query_job.reload()
4) 在迭代中获取结果
query_job.reload()
iter = query_job.result()
在这个阶段,我想获取表中有多少行。根据文件,GitHub代码iter
属于bigquery类型。桌子具有属性的行迭代器
[层总行数][1]
5)然而,在我打印的这个阶段:
print(iter.total_rows)
它一直返回无
我很确定这个表不是空的干查询格式正确!
干杯
RowIterator返回无的当前行为确实令人困惑。幸运的是,根据这个问题,tswast 10天前的评论表明开发人员正在寻找更好的解决方案。
目前,。只有迭代开始时,才会初始化总行数
。(为了清楚起见,我将iter
变量重命名为row\u iter
)
row_iter = query_job.result()
itr = iter(row_iter)
first_row = next(itr)
print(row_iter.total_rows) # Now you get a number instead of None.
这很难看,因为要继续迭代,我们必须要么以不同的方式处理第一行,要么再次调用row_iter=query_job.result()
。
当前工作的替代方案是使用query_job的值。_query_results.total_rows
。不幸的是,这是作弊,因为_query_results
是私有的,所以没有理由期望这在未来会起作用。
如果tswast的建议得到实施,则row\u iter。总行数
将在开始时初始化,正如您所期望的那样。
在我的代码中,我会用这样的东西
try:
num_rows = row_iter.total_rows or query_job._query_results.total_rows
except NameError:
num_rows = None
与未来行为兼容,同时在必要时返回临时解决方案。
您还需要检查query_job.error_result以确保查询成功。
您还可以在UI中看到您的作业,这对于调试很有用,使用项目id和作业id:
https://bigquery.cloud.google.com/results/projectid: jobid
此外,query_job.result()已经等待作业完成,因此不需要轮询。
问题内容: 我需要知道客户的IP地址,这是我的鳕鱼 处理程序: 结果: 为什么我无法获得真正的客户IP? 问题答案: 通常,您可以用来获取正在访问Web应用程序的客户端的IP地址。但是,如果用户位于代理服务器后面或通过负载均衡器访问您的Web服务器(例如,在云托管中),则上述代码段将获取代理服务器或负载均衡器服务器的IP地址,而不是原始IP地址客户。 因此,您应该获得请求的HTTP标头“ X-Fo
我使用python客户端通过SQL创建表,如文档(https://cloud.google.com/bigquery/docs/tables)中所述: 除了用于通过SQL查询创建表的客户机函数使用了一个job_config对象,而job_config接收的是一个table_ref,而不是table对象之外,这种方法工作得很好。 我在这里找到了用于创建表的文档,其描述如下:https://googl
问题内容: 自将我的Nest客户端升级到2.2.1之后,我无法看到要提交给我的elasticsearch客户端(现在为2.3.0版)的查询。我曾经用这条线: 但是,此方法现在返回void而不是它以前使用的JSON。ConnectionStatus也不存在,所以我再也看不到我发送的json了,有人知道吗?CallDetails.RequestBodyInBytes可用,但返回null。 问题答案:
问题内容: 根据MSDN,返回已执行查询的列元数据。我想知道是否有类似的方法将为给定查询提供表元数据?我的意思是涉及哪些表以及它具有什么别名。 在我的应用程序中,我得到了查询,并且需要以编程方式附加该子句。使用,我可以获取列元数据及其所属的表。但是,即使表具有别名,它仍然会返回真实的表名。有没有办法获取该表的别名? 以下代码显示如何获取列元数据。 这将为我正确提供列的详细信息。但是当我看到列时,它
您可以get get client-go的一个版本,例如get get k8s.io/client-go/1.4/...或者获取k8s.io/client-go/1.4/kubernetes。 现在当我这么做的时候。这是输出- 警告:“k8s.io/client-go/1.4/...”匹配的无包无法加载包:包。:/users/shubhadeeproychowdhury/projects/Go/s
有没有办法检索客户端在GraphQL查询中请求的字段列表? 假设我有以下类型: 在Java端,在用@GraphQLQuery注释的方法中,有没有方法知道客户机请求的字段? 例如,具有以下查询: 我可以知道第一个查询请求了图书的标题和类型字段,第二个请求了图书的标题以及作者的姓名? 谢谢马西莫