2017-12-10 9 views
1

Ich habe eine große Abfrage-Job-Anwendung in Python implementiert und in App-Engine bereitgestellt und benötigen einige Hilfe mit der Effizienz des unteren Filters, die nur auf die Benutzer-E-Mail, die als EingabeErhöhung der Geschwindigkeit des Python-Iterators

eingegeben wird
credentials = GoogleCredentials.get_application_default() 
bq_conn= discovery.build('bigquery', 'v2', credentials=credentials) 

job_query_dict = []  


###Create the big query client 
client =bigquery.Client(project=project_id) 


###List the jobs in the client 
jobs = client.list_jobs(all_users=True) # API request 
print([job for job in list(client.list_jobs(all_users=True)) if job.user_email==user_email][0]) 

Wie drucke ich die Jobs des Benutzers, die in der Eingabe user_email angegeben werden, besser als das?

+0

Nicht sicher, ob dies eine Copy & Paste-Fehler ist, aber Sie ausführen 'list_jobs' zweimal in Ihrem Beispiel, die nicht notwendig ist. Ihr Listenverständnis könnte wie folgt geschrieben werden: "[Job für Job in Jobs, wenn ...]". Hier können Sie die Antwort verwenden, die Sie bereits haben. – bgse

+0

Es war nur ein Copy-Paste-Ding. Danke für die Antwort, die es funktionierte –

+0

Eigentlich, Pandas Dataframe verwenden machte es schneller, anstatt die Jobs in einer Liste zu bekommen und sie nacheinander zu verarbeiten. –

Antwort

0

die Jobdaten als Pandas Datenrahmen Zugriff schneller als aus einer Liste Zugriff auf

t=bigquery_service.jobs().list(projectId=project_id,allUsers=True,projection='full',stateFilter=job_state.lower()).execute() 
try: 
    tab = pd.DataFrame(t['jobs'])  
except: 
    return "No jobs" 
Verwandte Themen