我阅读了其他类似的主题,并搜索了Google,以找到更好的方法,但找不到任何可行的解决方案。
我在BigQuery中有一个大表(假设每天要插入2000万行)。我想在python / pandas / dask中有大约2000万行数据和大约50列,以进行一些分析。我尝试使用bqclient,panda-gbq和bq存储API方法,但是在python中有500万行需要30分钟。还有其他方法吗?甚至任何可用的Google服务都可以完成类似的工作?
答案 0 :(得分:2)
您可以始终将内容导出到云存储中,而不用查询->在本地下载->加载到dask / pandas数据框中:
导出+下载:
bq --location=US extract --destination_format=CSV --print_header=false 'dataset.tablename' gs://mystoragebucket/data-*.csv && gsutil -m cp gs://mystoragebucket/data-*.csv /my/local/dir/
加载到Dask:
>>> import dask.dataframe as dd
>>> df = dd.read_csv("/my/local/dir/*.csv")
希望有帮助。
答案 1 :(得分:1)
一些选项:
答案 2 :(得分:1)
首先,您应该分析代码以找出花费时间。它只是在等待大查询来处理您的查询吗?它是数据下载>您的带宽是多少,您使用什么比例?是将这些数据解析到内存中吗?
由于您可以使SQLAlchemy支持大查询(https://github.com/mxmzdlv/pybigquery),因此可以尝试使用AppModule
将查询拆分为多个分区并并行加载/处理它们。如果大查询将带宽限制在单个连接或单个计算机上,则可以通过在分布式集群上运行它来提高吞吐量。
实验!
答案 3 :(得分:0)
可能您想先将数据导出到Google Cloud Storage,然后再将数据下载到本地计算机并加载。 这是您需要采取的步骤:
除了将数据下载到本地计算机外,您还可以使用PySpark和SparkSQL进行处理。将数据导出到Google Cloud Storage后,您可以启动Cloud Dataproc集群并将数据从Google Cloud Storage加载到Spark,并在那里进行分析。
您可以在此处阅读示例
https://cloud.google.com/dataproc/docs/tutorials/bigquery-connector-spark-example
您还可以在Dataproc集群中启动Jupyter Notebook
https://cloud.google.com/dataproc/docs/tutorials/jupyter-notebook
希望这会有所帮助。