我阅读了其他类似的帖子并在Google上搜索,找到更好的方法,但是找不到可行的解决方案。
我有一个大型的BigQuery表格(假设每天插入2000万行)。我想使用Python/Pandas/Dask提取大约5000万行数据,其中包括大约50列,以进行一些分析。我已经尝试使用bqclient、panda-gbq和bq存储API方法,但在Python中获取500万行需要30分钟。是否有其他方法可以实现这个目标?甚至是否有Google服务可用来执行类似的任务?
我阅读了其他类似的帖子并在Google上搜索,找到更好的方法,但是找不到可行的解决方案。
我有一个大型的BigQuery表格(假设每天插入2000万行)。我想使用Python/Pandas/Dask提取大约5000万行数据,其中包括大约50列,以进行一些分析。我已经尝试使用bqclient、panda-gbq和bq存储API方法,但在Python中获取500万行需要30分钟。是否有其他方法可以实现这个目标?甚至是否有Google服务可用来执行类似的任务?
与其查询,您始终可以将内容导出到云存储 -> 在本地下载 -> 加载到您的dask/pandas数据框中:
Export + Download:
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/
Load into Dask:
>>> import dask.dataframe as dd
>>> df = dd.read_csv("/my/local/dir/*.csv")
dask.dataframe.read_sql_table
将查询拆分为分区并并行加载/处理它们。如果big-query限制单个连接或单台机器的带宽,则在分布式集群上运行此操作可能会获得更好的吞吐量。一些选项:
可能您想先将数据导出到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
希望这能有所帮助。