Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python BigQuery属性错误:“行”对象没有属性_Python_Google Bigquery_Attributes - Fatal编程技术网

Python BigQuery属性错误:“行”对象没有属性

Python BigQuery属性错误:“行”对象没有属性,python,google-bigquery,attributes,Python,Google Bigquery,Attributes,我有一个row对象row.total_bytes_processed,其中的行不返回任何值。如果它返回None,我有逻辑将值默认为0 如何修复此错误?我可以不将非类型默认为0吗 我已验证所有行的处理总字节数 以下是我的源代码: from google.cloud import bigquery from google.oauth2 import service_account sql = """ SELECT job_id, creation_time, user_email, query

我有一个row对象row.total_bytes_processed,其中的行不返回任何值。如果它返回None,我有逻辑将值默认为0

如何修复此错误?我可以不将非类型默认为0吗

我已验证所有行的处理总字节数

以下是我的源代码:

from google.cloud import bigquery
from google.oauth2 import service_account



sql = """
SELECT
job_id,
creation_time,
user_email,
query,
total_bytes_processed
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE project_id ='nj-dev-blah'
AND creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 183 DAY)
AND CURRENT_TIMESTAMP()
ORDER BY creation_time DESC
LIMIT 100
"""


query_job = client.query(sql)# Make an API request.
results = query_job.result()
rows = list(results)
print("The query data:")
# print(rows)
for row in rows:
    if row.total_bytes_processed is  not None:
        cost_dollars = (row.total_bytes_processed/1024 **4) *5
        print( f"JOB_ID : {row.job_id} | Creation_Time : {row.creation_time} |  Query: {row.query} | Total_Bytes_processed : {row.total_bytes_processed} | Estimated_Cost : ${cost_dollars}".format(
        row.job_id, row.creation_time, row.query, row.total_bytes_processed,cost_dollars))
    else:
        row.total_bytes_processed = 0
        cost_dollars = (int(row.total_bytes_processed) / 1024 ** 4) * 5
        print(f"JOB_ID : {row.job_id} | Creation_Time : {row.creation_time} |  Query: {row.query} | Total_Bytes_processed : {row.total_bytes_processed} | Estimated_Cost : ${cost_dollars}".format(row.job_id, row.creation_time, row.query, row.total_bytes_processed, cost_dollars))

如果使用以下选项,则具有等于“无”的属性与根本不具有此类属性是不同的:

如果row.total_bytes_processed不是无: Python将尝试访问该对象的属性total_bytes_processed,然后将其与None进行比较。出现此错误是因为在本例中,该对象不存在属性total_bytes_processed

您可以使用hasattr方法,提供对象和要查找的属性的名称作为参数,如果参数存在,则该方法将返回True,否则返回False:

如果为hasattrrow,则处理的总字节数为: 请记住,即使该属性存在且等于“无”,hasattr仍将返回True,因此您可以将其作为外部验证,然后在知道该属性存在后,验证它是否等于“无”,并相应地执行操作。可能是这样的:

对于行中的行: 如果为hasattrrow,则处理的总字节数为: 如果row.total_bytes_processed不是无: 成本\美元=行。总字节\处理/1024**4*5 打印fJOB_ID:{row.job_ID}创建时间:{row.Creation_Time}查询:{row.Query}处理的总字节数:{row.Total_Bytes_processed}估计成本:${Cost_$}.格式 row.job\u id,row.creation\u time,row.query,row.total\u bytes\u processed,cost\u$ 其他: row.total_bytes_processed=0 成本\u美元=介绍总计\u字节\u处理/1024**4*5 printfJOB_-ID:{row.job_-ID}}创建时间:{row.Creation_-Time}查询:{row.Query}处理的字节总数:{row.Total_-Bytes_-processed}估计成本:${Cost_-dollars}.formatrow.job_-ID,row.Creation_-Time,row.Query,row.Total_-Bytes_-processed,Cost-dollars 其他: 处理的总字节数不存在时的代码
row.total_bytes_processed = 0
AttributeError: 'Row' object has no attribute 'total_bytes_processed'
from google.cloud import bigquery
from google.oauth2 import service_account



sql = """
SELECT
job_id,
creation_time,
user_email,
query,
total_bytes_processed
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE project_id ='nj-dev-blah'
AND creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 183 DAY)
AND CURRENT_TIMESTAMP()
ORDER BY creation_time DESC
LIMIT 100
"""


query_job = client.query(sql)# Make an API request.
results = query_job.result()
rows = list(results)
print("The query data:")
# print(rows)
for row in rows:
    if row.total_bytes_processed is  not None:
        cost_dollars = (row.total_bytes_processed/1024 **4) *5
        print( f"JOB_ID : {row.job_id} | Creation_Time : {row.creation_time} |  Query: {row.query} | Total_Bytes_processed : {row.total_bytes_processed} | Estimated_Cost : ${cost_dollars}".format(
        row.job_id, row.creation_time, row.query, row.total_bytes_processed,cost_dollars))
    else:
        row.total_bytes_processed = 0
        cost_dollars = (int(row.total_bytes_processed) / 1024 ** 4) * 5
        print(f"JOB_ID : {row.job_id} | Creation_Time : {row.creation_time} |  Query: {row.query} | Total_Bytes_processed : {row.total_bytes_processed} | Estimated_Cost : ${cost_dollars}".format(row.job_id, row.creation_time, row.query, row.total_bytes_processed, cost_dollars))