带有Legacy SQL的BigQuery有一个非常方便的QUANTILES功能,可以快速获取表中值的直方图,而无需手动指定存储桶.
我在标准SQL中可用的聚合函数中找不到一个很好的等价物.我是否遗漏了一些显而易见的东西,或者其他什么是模仿它的标准方法?
aggregate-functions histogram google-bigquery bigquery-standard-sql
我有兴趣比较两个表是否包含相同的数据。
我可以这样做:
#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)
但是,当我想比较所有数字列时,这有点困难,尤其是当我想对多个表组合进行比较时。
因此,我的问题是:是否有人意识到有可能遍历所有数字列并将结果集限制为那些差异不为零的键?
我正在调查移植一些像这样的窗口化不同计数的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。
假设我要使用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声明中最麻烦的部分是输入结构,因为我必须包括所有嵌套字段及其类型。有一个更好的方法吗?
我正在尝试获取特定日期的唯一事件数量,回溯 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) Ive一直试图创建一个指定年份和月份的列(这样做是通过从timestamp列中提取年份和月份,然后将它们串联在一起)。该列是否有可能是“日期”类型?我要问的原因是将不同的值显示为日期(在Google Data Studio上)而不是数字。理想情况下,它看起来应该是这样:“ May,2018”而不是“ 2018-05”,这是我的输出。
谢谢!
sql google-bigquery google-data-studio bigquery-standard-sql
这里描述了使用通配符查询表。从该文档看来,通配符似乎必须在表名的末尾。有什么方法可以将通配符放在其他位置,例如执行以下操作:
SELECT
*
FROM
`dataset.*_postfix`
Run Code Online (Sandbox Code Playgroud)
要将每个表名与给定的后缀匹配?
我的表中有一个重复的字段。我想运行一个聚合查询并接收与我的查询匹配的唯一值数组。我已经尝试了这个查询的几种不同的变体:
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
在BigQuery Standard SQL中,如何将YYYY-MM-DD格式的日期转换为每月的第一天?
我需要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
BigQuery问题跟踪器上有一个功能请求,用于转换功能,例如和之间的INT64二进制STRING。除了使用JavaScript UDF之外,还有其他解决方法吗?
我在从 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
任何人都可以帮助我如何正确地取消嵌套这个表,以便我可以为所有数据项提供扁平化的架构?
谢谢!
我正在尝试查找当前日期的表格
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 ×13
sql ×4
ansi-sql ×1
datetime ×1
histogram ×1
milliseconds ×1
unnest ×1
wildcard ×1