python - 从 BigQuery 获取数据需要很长时间

我正在尝试从 BigQuery 获取数据。当我获取小数据时一切正常,但是当我尝试获取大数据时它会永远消失。有什么有效的方法吗?

到目前为止我正在使用这个:

import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'cred.json'
import google.auth
from google.cloud import bigquery

%load_ext google.cloud.bigquery

import google.datalab.bigquery as bq
from google.cloud.bigquery import Client

client = bigquery.Client()

这是我的 SQL 命令:

sql = """
   SELECT bla, bla1, bla2
FROM table
"""
df = client.query(sql)
df.to_dataframe()

最佳答案

通过更改方法,您可以更快地将 BigQuery 数据放入数据框数量级。

检查这些选项如何反射(reflect)在图表中:

  • A:to_dataframe() - 使用 BigQuery tabledata.list API。
  • B:to_dataframe(bqstorage_client=bqstorage_client),包版本 1.16.0 - 使用具有 Avro 数据格式的 BigQuery Storage API。
  • C: to_dataframe(bqstorage_client=bqstorage_client),包版本 1.17.0 - 使用 Arrow 数据格式的 BigQuery Storage API。
  • D:to_arrow(bqstorage_client=bqstorage_client).to_pandas(),包版本 1.17.0 - 使用 Arrow 数据格式的 BigQuery Storage API。

请注意如何使用 to_arrow(bqstorage_client=bqstorage_client).to_pandas() 从 >500 秒减少到 ~20 秒。

参见 https://medium.com/google-cloud/announcing-google-cloud-bigquery-version-1-17-0-1fc428512171

https://stackoverflow.com/questions/59749359/

相关文章:

php - 如何在php中将一个元素添加到子数组中

python - 为什么 randn 并不总是均值为 0 且方差为 1?

xcode - SwiftUI:如何创建自定义 UIDatePicker?

c# - 如何在 ServiceStack 中返回不同的 Http Status Code

c - 我如何在进行分区作业时转换?

swiftui - 如何修复无法在 Swift 中找到文件 json

c# - 如何将包含错误的土耳其语字符的字符串转换为显示正确的字符?

ruby-on-rails - 如何在转换后的字符串不充满反斜杠的情况下将哈希转换为 JSON

angular - 将 Angular 4 升级到 Angular 8

r - 渲染为 PDF 时 Markdown 中的 kableExtra 错误?