微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用带有字符串谓词的逻辑视图从字符串分区中明显受益

如何解决使用带有字符串谓词的逻辑视图从字符串分区中明显受益

在等待 BigQuery 上的字符串分区时,我想使用中间视图通过哈希函数执行字符串 整数转换,该函数允许透明地查询按字符串哈希分区的表。

例如,给定一个包含 2 列 data_partitionned_by_integer 的表 name STRING,hashed_name INT64,我们构建一个哈希表 hash_table名称 STRING,hashed_name INT64),其中 hashed_name = MOD(ABS(FARM_FINGERPRINT(name)),4000)。 我们还构建了一个逻辑视图 data_view,定义为:

SELECT
    hash_table.name,data_partitionned_by_integer.* EXCEPT (name)
FROM
    `hash_table` hash_table
INNER JOIN
    `data_partitionned_by_integer` data_partitionned_by_integer
ON
  hash_table.hashed_name = data_partitionned_by_integer.hashed_name

借助此逻辑视图 data_logical_view,BigQuery 查询优化器的下推机制允许从分区修剪中受益,即使使用 name 谓词过滤视图也是如此。但这种行为看起来并不稳定。事实上,当用 INNER JOIN 替换 FULL JOIN 时,我们不再受益于分区修剪。

与参数化逻辑视图 data_parametrized_view 相比:

SELECT
    *
FROM
    `data_partitionned_by_integer`
WHERE hashed_name = MOD(ABS(FARM_FINGERPRINT(@name)),4000)

总是从分区修剪中受益,但对于针对此视图进行的每个查询都需要 name 参数。

我想问的问题是:如果我们坚持这个data_view,即使谓词只包含一个字符串name,使用逻辑视图INNER JOIN我们是否总是可以从分区修剪中受益方法

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?