google-bigquery - BigQuery 中的 BitTest 搜索(按位置)

标签 google-bigquery binary-search

我在 BigQuery 表中保留二进制数据的数字表示形式

我需要能够通过 BitPos 进行搜索并找出给定位置上的位是否为 0 或 1

Oracle 的模拟是 BitTest

如果值中的指定位为 1,则使用此函数返回 TRUE (1);否则返回 TRUE (1)。否则返回 FALSE (0)。 语法 BitTest(Value1, BitPos)

示例:数据库中的数字是1099511627780

所以它是二进制10000000000000000000000000000000000000100

因此结果是:

BitTest(1099511627780, 1) = 0;

BitTest(1099511627780, 2) = 0;

BitTest(1099511627780, 3) = 1;

您能帮我找到 BigQuery 中的 native 实现吗?

我正在查看文档,但没有运气

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators

最佳答案

您可以创建一个临时函数,使用位移位和按位与来执行此计算。这是一个例子:

CREATE TEMP FUNCTION BitTest(value INT64, bit INT64) AS (
  value >> (bit - 1) & 0x1 = 1
);

SELECT
  value,
  bit,
  BitTest(value, bit) AS result
FROM (
  SELECT 1099511627780 AS value, bit
  FROM UNNEST(GENERATE_ARRAY(1, 42)) AS bit
)
ORDER BY bit;

函数BitTest检查从1开始的索引处的位是否被设置。本示例中的 FROM 子句生成 1 到 42 之间的位索引以演示输出内容。

关于google-bigquery - BigQuery 中的 BitTest 搜索(按位置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48063676/

相关文章:

google-bigquery - 如何在 Google BigQuery 上计算移动总和/平均值?

firebase - 将 Firebase 数据导出到 Bigquery 时缺少 session 信息

java - 如果尝试对未排序的数据集进行二分查找,会发生什么情况?

c++ - 计算数组 C++ 中相同数字的函数

java - 使用 Collections.binarySearch 检索对象

php - 如何在不使用 OAuth2 或永久 key 的情况下在 PHP 中使用 BigQuery streaming insertall?

google-bigquery - 窗口函数、order by 子句、 Between 运算符

google-app-engine - 如何从 GAE 数据存储中导出 BLOB 类型字段?

javascript - 将元素插入 DOM,基于时间戳的位置

algorithm - 为什么二分搜索算法中的赋值不会增加时间复杂度?