【发布时间】:2021-03-23 10:40:45
【问题描述】:
我有一个按 3 字符 geohashes 的整数表示进行范围分区的表。我需要从这个表中选择多个分区,但是,在给我所需的分区之前,查询会读取整个表。
查询:
WITH
hashes AS (
SELECT
['ezw',
'ezx',
'ezy',
'ezz'] AS hash_list)
SELECT
*
FROM
hashes,
UNNEST(hashes.hash_list) AS hash_str,
`project.dataset.partitioned_table`
WHERE
geohash_num = ABS(MOD(farm_fingerprint(hash_str),4000))
三个字符的 geohash 在 hash_list 中,abs(mod(farm_fingerprint(geohash),4000)) 是我获取任何 geohash 字符串的数字表示 (
project.dataset.partitioned_table 在geohash_num 上进行分区,此列的数字从 1 到 4000。
我希望此查询仅获取与hash_list 中的地理哈希相对应的所需数字分区,这将对应于 961、1234、2684、3606,但它会在给我 4 个所需分区之前读取所有分区。
有人对如何让它只读取所需的分区而不是整个表有任何建议吗?
澄清:当我只有一个 geohash 时,此分区修剪有效,以下查询仅读取一个分区而不是整个表,即使 where 过滤器没有常量谓词:
WITH
hashes AS (
SELECT
'ezw' AS hash_str)
SELECT
*
FROM
hashes,
`freesolarcalc.Water_body_data.lake_geo33clustered_partitioned_dbscan`
WHERE
geohash_num = ABS(MOD(farm_fingerprint(hash_str),4000))
当我必须过滤与多个分区值相对应的多个地理哈希时,就会出现问题。
【问题讨论】:
标签: google-bigquery