标签: bigquery-standard-sql

Quantiles在BigQuery Standard SQL中运行

带有Legacy SQL的BigQuery有一个非常方便的QUANTILES功能,可以快速获取表中值的直方图,而无需手动指定存储桶.

我在标准SQL中可用的聚合函数中找不到一个很好的等价物.我是否遗漏了一些显而易见的东西,或者其他什么是模仿它的标准方法?

aggregate-functions histogram google-bigquery bigquery-standard-sql

2
推荐指数
1
解决办法
4139
查看次数

bigquery中比较两个表的有效方法

我有兴趣比较两个表是否包含相同的数据。

我可以这样做:

#standardSQL
SELECT
    key1, key2
FROM
(
    SELECT 
    table1.key1,
    table1.key2,
    table1.column1 - table2.column1 as col1,
    table1.col2 - table2.col2 as col2
    FROM
        `table1` AS table1
    LEFT JOIN
        `table2` AS table2
    ON
        table1.key1 = table2.key1
    AND
        table1.key2 = table2.key2
)
WHERE 
    col1 != 0
OR
    col2 != 0
Run Code Online (Sandbox Code Playgroud)

但是,当我想比较所有数字列时,这有点困难,尤其是当我想对多个表组合进行比较时。

因此,我的问题是:是否有人意识到有可能遍历所有数字列并将结果集限制为那些差异不为零的键?

sql ansi-sql google-bigquery bigquery-standard-sql

2
推荐指数
2
解决办法
3031
查看次数

如果指定了DISTINCT,则不允许BigQuery窗口使用ORDER BY

我正在调查移植一些像这样的窗口化不同计数的bigquery传统sql

count(distinct brand_id) over (partition by user_id order by order_placed_at range between 7 * 24 * 60 * 60 * 1000000 PRECEDING AND 1 PRECEDING) as last_7_day_buyer_brands

到标准SQL。...但是我得到这个错误。

Window ORDER BY is not allowed if DISTINCT is specified

作为参考,我尝试过APPROX_COUNT_DISTINCT没有运气的函数。

除了编写子查询和分组依据以外,还有其他更好的方法可以使它工作吗?

其他大多数查询只进行了少量更改就移植到了标准sql。

window-functions google-bigquery bigquery-standard-sql

1
推荐指数
1
解决办法
725
查看次数

如何在不指定完整类型的情况下将表中的行传递给UDF?

假设我要使用JavaScript UDF对具有嵌套结构的表进行一些处理(例如示例Github commits)。在迭代实现时,我可能想更改在UDF中查看的字段,因此我决定只将表中的整个行传递给它。我的UDF最终看起来像这样:

#standardSQL
CREATE TEMP FUNCTION GetCommitStats(
  input STRUCT<commit STRING, tree STRING, parent ARRAY<STRING>,
               author STRUCT<name STRING, email STRING, ...>>)
  RETURNS STRUCT<
    parent ARRAY<STRING>,
    author_name STRING,
    diff_count INT64>
  LANGUAGE js AS """
[UDF content here]
""";
Run Code Online (Sandbox Code Playgroud)

然后,我使用查询查询该函数,例如:

SELECT GetCommitStats(t).*
FROM `bigquery-public-data.github_repos.sample_commits` AS t;
Run Code Online (Sandbox Code Playgroud)

UDF声明中最麻烦的部分是输入结构,因为我必须包括所有嵌套字段及其类型。有一个更好的方法吗?

google-bigquery bigquery-standard-sql

1
推荐指数
1
解决办法
825
查看次数

在 BigQuery 中滚动 90 天活跃用户,提高性能(DAU/MAU/WAU)

我正在尝试获取特定日期的唯一事件数量,回溯 90/30/7 天。我已经使用下面的查询处理了有限数量的行,但是对于大型数据集,我从聚合字符串中得到内存错误,该错误变得很大。

我正在寻找一种更有效的方法来实现相同的结果。

表看起来像这样:

+---+------------+-------------+
|   |     date   |     userid  |
+---+------------+-------------+
| 1 | 2013-05-14 | xxxxx       |
| 2 | 2017-03-14 | xxxxx       |
| 3 | 2018-01-24 | xxxxx       |
| 4 | 2013-03-21 | xxxxx       |
| 5 | 2014-03-19 | xxxxx       |
| 6 | 2015-09-03 | xxxxx       |
| 7 | 2014-02-06 | xxxxx       |
| 8 | 2014-10-30 | xxxxx       |
| ..| ...        | ...         |
+---+------------+-------------+
Run Code Online (Sandbox Code Playgroud)

所需结果的格式:

+---+------------+---------------------------------------------+
|   | …
Run Code Online (Sandbox Code Playgroud)

sql google-bigquery bigquery-standard-sql

1
推荐指数
1
解决办法
2168
查看次数

大查询(标准Sql)-月和年dateformat

Ive一直试图创建一个指定年份和月份的列(这样做是通过从timestamp列中提取年份和月份,然后将它们串联在一起)。该列是否有可能是“日期”类型?我要问的原因是将不同的值显示为日期(在Google Data Studio上)而不是数字。理想情况下,它看起来应该是这样:“ May,2018”而不是“ 2018-05”,这是我的输出。

谢谢!

sql google-bigquery google-data-studio bigquery-standard-sql

1
推荐指数
1
解决办法
1177
查看次数

Google Big Query在表名中间使用通配符

这里描述使用通配符查询表。从该文档看来,通配符似乎必须在表名的末尾。有什么方法可以将通配符放在其他位置,例如执行以下操作:

SELECT
  *
FROM
  `dataset.*_postfix`
Run Code Online (Sandbox Code Playgroud)

要将每个表名与给定的后缀匹配?

wildcard google-bigquery bigquery-standard-sql

1
推荐指数
1
解决办法
454
查看次数

聚合重复字段的唯一值

我的表中有一个重复的字段。我想运行一个聚合查询并接收与我的查询匹配的唯一值数组。我已经尝试了这个查询的几种不同的变体:

with t as (select * from unnest([
    STRUCT("foo" as name, ["red", "blue"] as color)
  , STRUCT("foo", ["blue"])
  , STRUCT("foo", NULL)
  , STRUCT("foo", ["green"])
  , STRUCT("bar", ["orange", "black"])
  , STRUCT("bar", ["black", "white"])
]))
select
    (select color from unnest(array_concat_agg(color))) as color
from t
group by name
Run Code Online (Sandbox Code Playgroud)

想要的结果是:

name  | color
=====================================
foo   | ["red", "blue", "green"]
bar   | ["orange", "black", "white"]
Run Code Online (Sandbox Code Playgroud)

这个特定的查询给出了Aggregate function ARRAY_CONCAT_AGG not allowed in UNNEST at [10:31],但我在文档中没有找到这个错误,我找不到一个直观的原因为什么会出现这样的限制,也找不到我如何修复这个错误。

我正在做的事情是否本质上需要额外级别的嵌套查询?

sql google-bigquery google-cloud-platform bigquery-standard-sql

1
推荐指数
1
解决办法
2018
查看次数

Bigquery标准SQL日期到每月的第一天

在BigQuery Standard SQL中,如何将YYYY-MM-DD格式的日期转换为每月的第一天?

google-bigquery bigquery-standard-sql

0
推荐指数
1
解决办法
1926
查看次数

解析日期时间的毫秒格式?

我需要parse一个datetime包含毫秒来匹配包含此日期时间的字段中的最大值。

例如:

#standardSQL
SELECT PARSE_DATETIME('%Y-%m-%d %H:%M:%S.%u','2017-08-18 16:04:40.890') 
Run Code Online (Sandbox Code Playgroud)

有什么建议?提前致谢。

更新:突然转换为毫秒MAX()

#standardSQL
WITH Input AS (
  SELECT date
  FROM UNNEST([
    DATETIME '2017-08-18 16:04:40.890',
    DATETIME '2017-07-27 11:09:10.347',
    DATETIME '2017-08-22 13:17:34.727',
    DATETIME '2017-08-22 13:17:34.737']) AS date
)
SELECT
  MAX(CAST(date AS DATETIME))
FROM Input;
Run Code Online (Sandbox Code Playgroud)

datetime milliseconds datetime-parsing google-bigquery bigquery-standard-sql

0
推荐指数
1
解决办法
3891
查看次数

如何使用BigQuery在INT64和二进制STRING之间转换?

BigQuery问题跟踪器上有一个功能请求,用于转换功能,例如和之间的INT64二进制STRING。除了使用JavaScript UDF之外,还有其他解决方法吗?

google-bigquery bigquery-standard-sql

0
推荐指数
1
解决办法
697
查看次数

BigQuery:展平嵌套架构中的所有重复字段

我在从 Big Query 的嵌套模式查询时遇到了很多麻烦。我有以下字段。

在此处输入图片说明

我想把桌子弄平并得到这样的东西。

用户 | question_id | 用户选择

123 | 1 | 1

123 | 1 | 2

123 | 1 | 3

123 | 1 | 4

从其他资源中,我可以从重复列中的记录之一进行查询。例如以下内容:

SELECT user, dat.question_id FROM tablename, UNNEST(data) dat

它给了我这个结果。 在此处输入图片说明

但是当我这样做时,我又得到了另一个重复的列。

SELECT user, dat.question_id, dat.user_choices FROM tablename, UNNEST(data) dat

在此处输入图片说明

任何人都可以帮助我如何正确地取消嵌套这个表,以便我可以为所有数据项提供扁平化的架构?

谢谢!

google-bigquery unnest bigquery-standard-sql

0
推荐指数
1
解决办法
3340
查看次数

BigQuery:在标准 SQL 中按当前日期动态选择表?

我正在尝试查找当前日期的表格

SELECT * 
FROM `da`.`m`.`ga_realtime_20190306`
Run Code Online (Sandbox Code Playgroud)

但不工作

SELECT * 
FROM `da`.`m`.`CONCAT('ga_realtime_', FORMAT_DATE('%Y%m%d', CURRENT_DATE())`
Run Code Online (Sandbox Code Playgroud)

如何使用CURRENT_DATEBigQuery 标准查询动态选择表?

google-bigquery bigquery-standard-sql

0
推荐指数
1
解决办法
489
查看次数