我读了其他类似的主题,并搜索谷歌找到一个更好的方法,但找不到任何可行的解决方案。
我在BigQuery中有一个大型的大表(假设每天插入2000万行)。我希望在python / pandas / dask中有大约2000万行数据和大约50列进行一些分析。我尝试过使用bqclient,panda-gbq和bq存储API方法,但在python中需要30分钟才能拥有5百万行。有没有其他方法可以这样做?即使是任何谷歌服务可以做类似的工作?
您可以随时将内容导出到云存储 - >本地下载 - >加载到您的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/
>>> import dask.dataframe as dd
>>> df = dd.read_csv("/my/local/dir/*.csv")
希望能帮助到你。
一些选择:
首先,您应该分析您的代码,以找出花费时间的内容。是否只是等待大查询来处理您的查询?是下载数据>您的带宽是多少,您使用的是什么分数?它是将数据解析到内存中吗?
由于您可以使SQLAlchemy支持大查询(https://github.com/mxmzdlv/pybigquery),您可以尝试使用dask.dataframe.read_sql_table
将查询拆分为分区并并行加载/处理它们。如果大查询限制单个连接或单个计算机上的带宽,则可以通过在分布式群集上运行它来获得更好的吞吐量。
实验!
您可能希望首先将数据导出到Google云端存储,然后将数据下载到本地计算机并加载它。以下是您需要采取的步骤:
除了将数据下载到本地计算机之外,您还可以利用PySpark和SparkSQL进行处理。将数据导出到Google云端存储后,您可以启动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
希望这可以帮助。