问题标签 [bigquery-standard-sql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2224 浏览

sql - 在 WHERE 子句中使用带有 IN 运算符的 STRING_AGG 函数的结果

我有一列children_ids包含来自 STRING_AGG 函数的 PK。我正在尝试在WHERE带有运算符的子句中使用此列IN来返回,total_pets但它不起作用。如果我将值直接复制并粘贴到IN运算符中,则查询将返回正确的信息,否则找不到任何结果。

这是我的数据集:

这是您自己测试的标准sql

和查询:

0 投票
0 回答
312 浏览

sql-update - 更新 BigQuery 查询以修复损坏的时间戳太复杂或占用大量资源

我有几个表包含无效的标准 SQLTIMESTAMP记录。这些记录在数组中至少嵌套一层。SELECT *即使在使用 Legacy SQL 时,这些记录也会在这些表上中断。他们还破坏了将表导出为 JSON。当我尝试对UPDATE这些表修复记录时,UPDATE除非该语句同时修复所有损坏的字段,否则它会出现错误。这会导致大量UPDATE声明。示例:https ://gist.github.com/dadrian/b83585c23f6cbbcd5f6d6478c92c745d

UPDATE语句太大而无法编译!

错误:查询执行期间超出资源:没有足够的资源用于查询计划 - 子查询太多或查询太复杂

然后我采取了第二种方法:为每个包含具有无效时间戳的数组(例如字段)的父字段SELECT“修复”到它自己的表中。然后通过加入每个“固定结构”表来创建原始表。每次发生后,看起来像:STRUCTp443.https.tlsUPDATESELECTUPDATE

这适用于足够小的桌子。在较大的表或具有更多(类似损坏)字段的表上,UPDATE 语句不会完成,并且在大约 30 分钟后出现错误

查询执行期间资源超出:ORDER BY 运算符使用了太多内存。

我怎样才能修复这些表?

编辑:无效的时间戳是由于在我们的数据源中意外地将整数时间戳输出为毫秒而不是秒。BQ 解释为秒,这使得时间戳在 48000 年。

编辑:我将架构和示例数据对象添加到要点中。

模式的快速描述:相关数据的形式为a.b.c.tls,其中tls包含所有损坏数据的父对象。tls包含许多事物certificate,其中 , 是一个对象,而chain, with 是一个对象数组certificate。A certificatecontains parsed.extensions.signed_certificate_timestamps,它是一个结构的数组。signed_certificate_timestamps在is的字段中timestamp,其中包含有问题的无效时间戳。这实际上意味着我对 each 有一个嵌套的无效时间戳...tls.certificate.parsed.extensions.signed_certificate_timestamps,并且对于 every 有一个双重嵌套的无效时间戳...tls.chain.certificate.parsed.....signed_certificate_timestamps

0 投票
1 回答
132 浏览

google-bigquery - BigQuery 文档 - 为什么 flatten 会消除重复

我目前正在学习 BigQuery 标准 SQL。

我在此处此处遵循了如何使用旧版 SQL 展平数据的示例。

展平数据生成具有相似行的堆叠数据是有道理的。

但是,在描述从 Legacy SQL 迁移到 Standard SQL 的文档中,它描述了如何执行相同的展平操作。对此的子标题称为使用 Flatten 去除重复

有人可以向我解释一下吗?似乎 flatten 通过将嵌套数据转换为堆叠数据来生成数据重复,我觉得我不理解一些基本的东西。

0 投票
2 回答
666 浏览

google-analytics - ga:itemQuantity in ga_sessions_YYYMMDD(大查询)

我正在尝试使用标准 SQL 复制 GA 数量指标 (ga:itemQuantity) 并将 GA 导出查询到 BigQuery 日期分区表 (ga_sessions_YYYYMMDD)。

我尝试了以下方法,但“数量”始终为空:

其他指标工作并与 GA UI 100% 匹配,所以我假设这不是数据导出问题。例如:

这些总计分别与 GA UI 中的收入和交易(指标)相匹配。

GA 指标数量 (ga:itemQuantity) 的标准 SQL 查询是什么?

0 投票
2 回答
1636 浏览

sql - 如何计算一个表中单词的出现次数到另一表中的评论

我正在尝试在 Google 的 BigQuery 中完成一项可能需要逻辑的任务,我不确定 SQL 是否可以本地处理。

我有 2 张桌子:

  1. 第一个表有一个单列,其中每一行都是一个小写单词
  2. 第二个表是评论数据库(包含发表评论的人、评论本身、时间戳等数据)

我想按第一个表中单词的出现次数对第二个表中的注释进行排序。

这是我想做的一个基本示例,使用python,使用字母而不是单词......但你明白了:

输出:

到目前为止,我所看到的生成 SQL 查询的最佳方法是执行以下操作:

但是有超过2000字……感觉不对。有小费吗?

0 投票
1 回答
379 浏览

google-bigquery - 从 BigQuery 中的最新表分区通配符查询

我有名为 sample 和 table_201606、table_201607 的数据集,直到 table_201710。然后我想要完成的事情是从最新的 TABLE SUFFIX 中获取数据,即 table_201710。以下是我的查询:

不知何故,上面的查询扫描了所有表(从 table_201606 到 table_201710),但结果很好(table_201710 中的数据)。

但是,当我尝试这个时结果是不同的:

上面的查询,只是扫描了 table_201710 和位于 table_201710 中的结果数据。与第一个查询不同,它扫描所有表,但结果是位于 table_201710 中的正确数据。

我怎么能说第一个查询扫描了所有表?因为当我执行第一个查询时,BigQuery 控制台只说我使用 10 GB 数据,而不是第二个查询,它只使用在进程中处理的 200 MB 数据。

我想知道为什么,有人可以解释一下吗?

0 投票
1 回答
1319 浏览

arrays - Google BigQuery:具有重复记录值的表连接

我有一张这样的桌子:

前 2 列是标准字段,第三列是 REPEATED RECORD 字段。

我有 2 个额外的表

它将第一个表中的 id/key 映射到给定的值(我使用了这个术语以避免混淆,但最后的概念是相同的keyid

这是重现结构的完整声明

我的目标是用其他 2 个表给出的值替换第一个表中的键/id 值,就像经典的 id 连接一样。

这是预期的输出

起初我考虑使用UNNEST运算符来获取扁平线,因此可以进行简单的 JOIN 来解析值,然后用替换的值重新加入数组。

使用此语句,值可以从 id 正确替换为值,但现在我无法重现之前的 RECORD REPEATED 结构

0 投票
1 回答
27 浏览

database - 加入多个/组条目

我想将下面两个表中的条目组合起来以obj匹配classvia attr

我在一个表(未显示)中有许多具有不同名称、日期和其他信息的对象。这些对象中的每一个都可以根据它们的属性归类。对象obj到其每个属性attr的映射在表 A 中。类class到属性的映射attr在表 B 中。

我想将每个对象映射obj到其匹配类class,以提供表 C 中显示的所需输出。

在某些方面,这似乎是对组的加入操作。有没有办法在标准 sql 和/或 Google BigQuery 中做到这一点?

重要的一点—— attraclass和 of anobj都没有排序。

表 A:

表 B:

期望的输出(表 C):

(请注意,obj3它不属于,class A因为它有一个额外的II attr。)

0 投票
2 回答
19037 浏览

join - 通过 BigQuery 加入更新

是否可以基于 JOIN 与 BigQuery 中的现有表对表进行更新?

当我在以下数据库(https://bigquery.cloud.google.com/dataset/pfamdb:pfam31)上尝试此语句时,

我得到了与 , 相关的错误INNER JOINWHERE而不是预期的。我应该怎么做(如果可能的话)?

0 投票
2 回答
8253 浏览

sql - COUNT(*) 过滤器(在哪里......在 BigQuery 中

如何在 BigQuery 中过滤计数?

在 Postgres 中,我正在做类似的事情:

虽然这在 BigQuery 中不起作用。什么不是最好的选择?我使用标准 SQL。