在 BigQuery 中包含带有 ANY_VALUE 的空值

2023-11-26

我有一个“供应商”表,看起来像这样......

**company itemKey itemPriceA itemPriceB**
companyA, 203913, 20, 10
companyA, 203914, 20, 20
companyA, 203915, 25, 5
companyA, 203916, 10, 10

每个公司可能有数百万行,我想查询它以返回每个公司的 itemPriceA 和 itemPriceB 之间的代表性增量。我不在乎我带回哪个增量,只要它不是零/空(如第2行或第4行),所以我使用像这样的ANY_VALUE...

SELECT company
, ANY_VALUE(CASE WHEN (itemPriceA-itemPriceB)=0 THEN null ELSE (itemPriceA-itemPriceB) END)
FROM vendors
GROUP BY 1

它似乎有效,但我注意到有两个句子似乎矛盾谷歌的文档...

"当组中所有行的表达式为 NULL 时,返回 NULL。 ANY_VALUE 的行为就像指定了 RESPECT NULLS 一样;考虑并选择表达式为 NULL 的行。"

如果 ANY_VALUE 返回 null“当表达式为 NULL 时allrows in the group" 它不应该为 companyA 返回 null,对吧(因为 4 行中只有 2 行为 null)?但是第二句话听起来确实会包含 null 行。

附注您可能想知道为什么我不简单地添加一个 WHERE 子句“WHERE itemPriceA-itemPriceB>0”,但如果一家公司只有匹配的价格,我仍然希望该公司在我的结果中返回。


澄清

恐怕所接受的答案必须提供与文档相矛盾的更有力的证据。

@Raul Saucedo 建议以下 BigQuery 文档引用 WHERE 子句:

考虑并选择表达式为 NULL 的行

不是这种情况。 ANY_VALUE 文档中的任何地方都没有提到 WHERE 子句。 (无处the page。尝试ctrl+f)并且文档很清楚,正如我将解释的那样。

@d3wannabe 对此的疑问是正确的:

它似乎有效,但我注意到有 2 个句子与 Google 的文档似乎矛盾......

“当组中所有行的表达式为 NULL 时,返回 NULL。ANY_VALUE 的行为就像指定了 RESPECT NULLS;表达式为 NULL 的行将被考虑并可能被选择。”

但这些文档并不矛盾。 2句话并存。

  1. “当组中所有行的表达式均为 NULL 时,返回 NULL。”So if all列中的行为 NULL,则将返回 NULL。
  2. “ANY_VALUE 的行为就像指定了 RESPECT NULLS;表达式为 NULL 的行将被考虑并可能被选择。”因此,如果该列中有混合有 NULL 和实际数据的行,它将从该列中选择任何内容,包括 null。

如何在 BigQuery 中创建不含 null 的 ANY_VALUE

我们可以用ARRAY_AGG将一组值转换为列表。该聚合函数可以选择 INGORE NULLS。然后,我们在忽略空值后从列表中选择 1 项。

如果我们有一个包含 2 列的表:id and mixed_data, where mixed_data有一些行包含空值:

SELECT
    id,
    ARRAY_AGG( -- turn the mixed_data values into a list
        mixed_data -- we'll create an array of values from our mixed_data column
        IGNORE NULLS -- there we go!
        LIMIT 1 -- only fill the array with 1 thing
    )[SAFE_OFFSET(0)] -- grab the first item in the array
    AS any_mixed_data_without_nulls
FROM your_table
GROUP BY id

在这里查看类似的答案:

  • https://stackoverflow.com/a/53508606/6305196
  • https://stackoverflow.com/a/62089838/6305196

更新,2022年8月12日

有证据表明文档可能与函数的实际行为不一致。看塞缪尔的最新回答探索他的方法论。

但是,我们无法知道文档是否不正确且 ANY_VALUE 的行为符合预期,或者 ANY_VALUE 是否存在错误且文档表达了预期的行为。我们不知道 Google 在解决此问题时是否会更正文档或功能。

因此,我将继续使用 ARRAY_AGG 创建一个忽略空值的安全 ANY_VALUE,直到我们看到 Google 的修复。

请在 Google 的问题跟踪器中对该问题进行投票看到这个问题得到解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 BigQuery 中包含带有 ANY_VALUE 的空值 的相关文章

随机推荐

  • Twitter Bootstrap轮播:获取滑动方向

    如何判断轮播是向左滑动还是向右滑动 我查看了滑动事件和滑动事件的文档 但都没有提供有关滑动方向的任何相关信息 我还检查了传递给滑动事件的事件处理程序的事件对象 但我似乎也找不到任何有用的线索 任何帮助 将不胜感激 从 3 0 0 rc1 开
  • 使用 React,findDOMNode 在 StrictMode 中已弃用,在使用 React-transition-group 时会抛出警告

    我正在使用包react transition group 我尝试在CSSTransition组件上使用nodeRef道具 并在我的组件上添加了一个包装器 但我仍然收到有关findDOMNode的警告 这是代码
  • 在 Powershell 中,处理超过 1GB 的文件时收到“OutOfMemoryException”

    我在加载到数据仓库之前进行了一些文件清理 并遇到了文件大小调整问题 Get Content path C Workspace workfile myfile txt Raw replace Set Content C Workspace w
  • 带数字键盘的 Flutter TextField,需要逗号而不是句点(仅限 iOS)

    我想在 Flutter 中创建一个 TextField TextField 用于十进制数字 所以我设置keyboardType TextInputType numberWithOptions decimal true 现在我在 iOS 上得
  • cron 作业是否会终止最后一个 cron 执行?

    我有一个执行 PHP 脚本的 cron 作业 cron 设置为每分钟运行一次 这仅用于测试目的 它正在执行的 PHP 脚本旨在将用户上传到服务器的视频转换为 flash 格式 例如 flv 当通过命令行手动执行该脚本时 该脚本执行得很好 但
  • Symfony2 设置默认选择字段选择

    我通过以下方式创建一个表单 form this gt createFormBuilder breed gt add species entity array class gt BFPEduBundle Item property gt na
  • 如何在Android中自定义Toast?

    Android 中可以自定义Toast吗 就像我们是否可以在其中放置图像图标和放置按钮一样 您还可以使用常规 makeText 并处理获取视图 设置下一个图像以查看下一个 Toast toast Toast makeText context
  • Flutter - TabBar 中不同的浮动操作按钮

    我正在尝试在一个不同的浮动按钮TabBar扑腾中 但我会尝试很多选择 但我不知道如何做 抱歉 我添加更多详细信息 我想做一个应用程序TabBar 就像这个颤振示例一样 如果您看到这是一个tabBarDemo应用程序 我可以在选项卡之间进行更
  • 在 matlab 中传递冒号作为函数的参数

    我想知道是否可以使用冒号 作为函数的参数 像这样的东西 function y func x if x is a colon do this else do that end 还可以通过关键工作吗end作为函数的参数 也1 end 3 end
  • JPA 2 @SequenceGenerator @GenerateValue 产生唯一约束冲突

    问题概述 在看似随机的时候 我们会得到一个异常 postgresql 重复键违反了唯一约束 我确实认为我知道我们的问题是什么 但我不想在没有可重现的测试用例的情况下对代码进行更改 但由于我们无法在生产中随机生成之外的任何环境中重现它 所以我
  • 有没有办法在 .net core 中对 F# 项目进行单元测试?

    我正在尝试创建一个在 net core 中运行的 F 单元测试项目 dotnet new t xunittest 将为 C 创建一个 xunit 测试项目 但 F 不存在此类等效项 我尝试修改从上面显示的 C dotnet new 输出的
  • R:有效地从数组中删除单维

    我正在寻找一种快速方法来从 R 数组中删除冗余维度 类似于squeeze MATLAB 中的命令 现在我结合了melt 和cast 命令来自reshape2包 但应该有一种不太复杂的方法来做同样的事情 到目前为止我就是这样做的 requir
  • 将 stargazer 与通过在分割 data.frame 上 lapply-ing 创建的 lm 对象列表一起使用

    我正在尝试为一组回归创建一个观星表 其中我对数据的子集运行每个回归 我认为 做到这一点的自然方法是使用split要从我的数据创建 data frames 列表 请使用以下命令创建 lm 对象列表lapply在 data frames 列表上
  • 从流中读取 XML

    我正在使用 ASP NET 并从表单导入 XML 文件 现在我将其转换为Stream Stream inputStream XmlFileUploadControl PostedFile InputStream 因为我以后可能需要这个版本
  • OSX 上 JVM 的 Zombie http.proxyHost 设置

    我最近更改了网络 并从 OSX Leopard 上的系统偏好设置 网络面板中删除了所有 HTTP 代理设置 然而 现在每当我使用 Eclipse 时 Java HTTP 代理系统属性似乎都会 自动 设置为使用我现在已失效的 HTTP 代理
  • 如何在CSS中使图像悬停?

    我想在悬停时将图像从正常更改为更亮 我的代码 div class nkhome a href Home html img src Images btnhome png a div nkhome margin left 260px top 1
  • 关于Spring框架应用中Beans.xml配置文件的使用

    我正在学习Spring MVC 今天 试图了解如何实现 JDBC DAO 我在 Spring Spring 而不是 Spring MVC 中找到了这个 Hello World 并且我开始看到它 因为我认为要实现 DAO 我必须创建一个单独的
  • 如何管理docker中的临时文件?

    我正在运行一个 Java 应用程序 它以给定格式读取一些数据并在临时目录中写入 CSV 文件 该文件完全写入后 数据将批量加载到数据库中 加载完成后 该文件将立即删除 不应共享此文件 现在 我想在 docker 容器中运行该应用程序的 ja
  • 有没有办法在 Android 设备上安全地存储用户数据?

    我正在编写一个应用程序 用户有时会通过它下订单 我想让用户可以选择保存他们的账单信息 姓名 地址等 以便以后如果他们想再次下订单时可以快速恢复 用户将输入密码以保护数据 显然 我不能只是将其作为文件放在设备上 因为任何人都可以 root 查
  • 在 BigQuery 中包含带有 ANY_VALUE 的空值

    我有一个 供应商 表 看起来像这样 company itemKey itemPriceA itemPriceB companyA 203913 20 10 companyA 203914 20 20 companyA 203915 25 5