【发布时间】:2021-11-14 09:31:59
【问题描述】:
目前,我有一个要在 Spark 中查询的 BigQuery 表。这张表是按日期分区的,为了查询这张表,必须提供一个过滤器,以便 BQ 可以查询特定的分区。
我正在使用 Spark BigQuery 连接器:https://github.com/GoogleCloudDataproc/spark-bigquery-connector,并且正在使用类似于此处提供的示例的代码:
但是,这需要很长时间,因为该表的大小为数 TB。做"_PARTITION_DATE > '2019-01-01'" 我相信尝试将整个表加载到数据框中,然后运行完全不可行的查询。
由于表已经按日期分区,我希望改为运行类似
.option("filter", "_PARTITION_DATE = '2019-01-01'")
但我想在几个不同的日期执行此操作。有没有办法链接这些选项,以便我可以同时查询多个日期谓词?非常感谢。
【问题讨论】:
-
我不确定 bigquery 及其连接器的工作原理。但是如果表是分区的,你应该得到分区修剪,因此它应该只扫描与你的谓词匹配的文件夹/文件,而不是扫描整个表。
-
这个问题似乎与github.com/GoogleCloudDataproc/spark-bigquery-connector/issues/… 有关。从屏幕截图上方的一行中,“您还可以手动指定过滤选项,这将覆盖自动下推,Spark 将在客户端执行其余的过滤。”所以我认为使用过滤器选项不会只返回所需的分区。如果您可以更改伪列名称 _PARTITION_DATE,您可以在 where 语句中使用该列,这有望将请求推送到 BQ Storage API。
标签: scala apache-spark google-cloud-platform google-bigquery bigdata