如何快速查询 GCP 表
Posted
技术标签:
【中文标题】如何快速查询 GCP 表【英文标题】:How to query GCP tables fast 【发布时间】: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
的结果创建一个临时表,然后使用其余查询要求查询该临时表。此外,请更新有关您正在运行代码的详细信息的问题,包括公共表名称并发布最小可重现示例。 ***.com/help/minimal-reproducible-example
@JohnHanley 你是什么意思临时表所以临时表像 SELECT * FROM ... WHERE Passenger_count 0 然后在这张表上的其余要求?这会加快速度吗?
您是否根据要求的详细信息更新了您的问题?我提出了一个建议,测试和验证。
是的,我确实编辑了它:)
【参考方案1】:
Use the BigQuery Storage API to download large results faster.
我在大约 1 分钟内得到了你的结果。
import pandas
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.read_gbq(sql, dialect='standard', use_bqstorage_api=True)
您应该能够使用 google-cloud-bigquery
库和 Apache Arrow (Reference) 获得更快的结果
【讨论】:
以上是关于如何快速查询 GCP 表的主要内容,如果未能解决你的问题,请参考以下文章