【发布时间】:2021-01-29 23:15:56
【问题描述】:
我需要构建一个从谷歌云平台公共表返回数据的小 api。 目前我正在尝试使用 python 获取数据,但查询表需要永远,因为它有数百万行。有没有办法查询表,同时排除 null 等并在 2 分钟内向客户端返回响应?如果是的话,我应该以某种方式异步吗? 我当前的代码是:
import google.auth
from google.cloud import bigquery
from google.cloud import bigquery_storage
import pandas
import pandas_gbq
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file(
**you need service account credentials**
)
sql = SELECT passenger_count, trip_distance, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude
FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2016`
WHERE pickup_longitude IS NOT NULL AND pickup_latitude IS NOT NULL
AND dropoff_longitude IS NOT NULL AND dropoff_latitude IS NOT NULL
AND passenger_count < 7 AND passenger_count > 0
AND pickup_longitude != 0.0 AND pickup_latitude != 0.0
AND dropoff_longitude != 0.0 AND dropoff_latitude != 0.0
我使用熊猫:
df = pandas_gbq.read_gbq(sql,project_id='disco-parsec-303220',credentials=credentials)
【问题讨论】:
-
您正在强制 BigQuery 读取每一行。尝试仅使用来自
passenger_count < 7 AND passenger_count > 0的结果创建一个临时表,然后使用其余查询要求查询该临时表。此外,请更新有关您正在运行代码的详细信息的问题,包括公共表名称并发布最小可重现示例。 stackoverflow.com/help/minimal-reproducible-example -
@JohnHanley 你是什么意思临时表所以临时表像 SELECT * FROM ... WHERE Passenger_count 0 然后在这张表上的其余要求?这会加快速度吗?
-
您是否根据要求的详细信息更新了您的问题?我提出了一个建议,测试和验证。
-
是的,我确实编辑了它:)
标签: python performance api google-cloud-platform google-bigquery