标签: bigquery-standard-sql

BigQuery - 日期时间与时间戳

我查看了Google大查询数据类型的文档,检查了TimeStamp与Datetime数据类型之间的差异.

据我了解,主要区别是:

与Timestamps不同,DATETIME对象不会及时引用绝对实例.相反,它是民用时间,或用户在手表或日历上看到的时间.

那我什么时候应该使用Timestamp/Datetime?

谢谢

google-bigquery bigquery-standard-sql

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

如何在BigQuery中将字符串化数组转换为数组?

碰巧我在BigQuery的字段中有一个字符串化数组

'["a","b","c"]'
Run Code Online (Sandbox Code Playgroud)

我想将它转换为BigQuery理解的数组.我希望能够在标准SQL中执行此操作:

with k as (select '["a","b","c"]' as x)
select x from k, unnest(x) x
Run Code Online (Sandbox Code Playgroud)

我已经尝试过,JSON_EXTRACT('["a","b","c"]','$')而且我可以在网上找到其他所有东西.

有任何想法吗?

google-bigquery bigquery-standard-sql

12
推荐指数
3
解决办法
5533
查看次数

在 ON 子句中使用 OR 进行 LEFT JOIN BigQuery Standard SQL

我需要一些帮助来理解 bigquery 标准 sql 中的连接。我想做一个左连接,保留 table1 中的所有列,如果 2 个字段匹配或不同的 2 个字段匹配,则连接到 table2。这应该在我的例子中更好地解释。

表格1:

id1 id2 column1  
1   a   first    
2   b   second   
3   c   third    
4   d   fourth   
5   e   fifth    
6   f   sixth
Run Code Online (Sandbox Code Playgroud)

表 2:

id3  id4    column2 
1    5674   alpha    
2    4535   bravo 
345  a      charlie  
341  b      delta
Run Code Online (Sandbox Code Playgroud)

如果 id1 = id3 OR id2 = id4,我想保留 table1 中的所有行和 table2 中的所有行,结果表将如下所示:

结果:

id1 id2 column1 id3 id4     column2  
1   a   first   1   5674    alpha    
1   a   first   345 …
Run Code Online (Sandbox Code Playgroud)

google-bigquery bigquery-standard-sql

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

如何将Epoch时间戳转换为标准SQL中的Date

当我环顾四周的时候,我没有找到任何简单的答案,所以我想我会把它放在这里,以防任何人遇到与我相同的问题本来应该是一个微不足道的问题.

我在Google的BigQuery中使用ReDash分析,并在数据源设置中启用了标准SQL.出于我的查询的目的,我需要将时间戳 - 以毫秒为单位的unix时间(作为字符串)转换为Date格式,以便我可以使用DATE_DIFF方法.

作为一个例子...... "1494865480000""2017-05-15"

困难在于转换和转换过于严格,似乎没有足够的方法来解析它.请参阅下面的答案!(虽然让我知道一些SQL sensei是否知道更有说服力的方式!)

sql google-bigquery bigquery-standard-sql

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

在 BigQuery/StandardSQL 上将 DATE 转换为 TIMESTAMP

我正在查询 BigQuery 上的表,该表具有“DATE”格式的字段。我想以“TIMESTAMP”格式阅读此内容。我尝试将 DATE 转换为整数,然后转换为 TIMESTAMP,但似乎不起作用。

google-bigquery bigquery-standard-sql

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

为 BigQuery 中的值的分位数创建列

我有一个包含两列的表:idscore。我想创建第三列,等于个人score落入的分位数。我想在 BigQuery 的标准 SQL 中执行此操作。

这是my_table

+----+--------+
| id | score  |
+----+--------+
|  1 |      2 |
|  2 |     13 |
|  3 |     -2 |
|  4 |      7 |
+----+--------+
Run Code Online (Sandbox Code Playgroud)

然后我想要下表(示例显示为四分位数,但我对四分位数/五分位数/十分位数感兴趣)

+----+--------+----------+
| id | score  | quaRtile |
+----+--------+----------+
|  1 |      2 |        2 |
|  2 |     13 |        4 |
|  3 |     -2 |        1 |
|  4 |      7 |        3 | …
Run Code Online (Sandbox Code Playgroud)

sql google-bigquery bigquery-standard-sql

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

查询失败错误:查询执行期间超出了资源:无法在分配的内存中执行查询

我正在使用标准SQL,即使它是基本查询,它仍然会引发错误。任何建议请

SELECT 
  fullVisitorId,
  CONCAT(CAST(fullVisitorId AS string),CAST(visitId AS string)) AS session,
  date,
  visitStartTime,
  hits.time,
  hits.page.pagepath
FROM
  `XXXXXXXXXX.ga_sessions_*`,
  UNNEST(hits) AS hits
WHERE
  _TABLE_SUFFIX BETWEEN "20160801"
  AND "20170331"
ORDER BY
  fullVisitorId,
  date,
  visitStartTime
Run Code Online (Sandbox Code Playgroud)

bigdata google-bigquery bigquery-standard-sql

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

使用BigQuery加入更新

是否可以在BigQuery中基于现有表的JOIN表上执行UPDATE?

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

  UPDATE pfam31.uniprot
  SET uniprot.auto_architecture = uniprot_architecture.auto_architecture
  INNER JOIN
      pfam31.uniprot_architecture using(uniprot_acc)
Run Code Online (Sandbox Code Playgroud)

我收到与有关的错误INNER JOIN,而WHERE不是预期的错误。我应该怎么做(如果可能的话)?

join sql-update google-bigquery bigquery-standard-sql

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

BigQuery - 非法转义序列

我在 BigQuery 中匹配正则表达式时遇到问题。我有以下代码行试图识别用户代理:

when regexp_contains((cs_user_agent),  '^AppleCoreMedia\/1\.(.*)iPod') then "iOS App - iPod"
Run Code Online (Sandbox Code Playgroud)

但是,由于某种原因,BigQuery 似乎不喜欢转义序列,并且出现了我无法弄清楚的错误:

Syntax error: Illegal escape sequence: \/ at [4:63]
Run Code Online (Sandbox Code Playgroud)

这段代码在我使用的正则表达式验证器中运行良好,但 BigQuery 对它不满意,我不知道为什么。在此先感谢您的帮助

google-bigquery bigquery-standard-sql

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

BigQuery:删除分区表中的重复项

我有按插入时间划分的BQ表。我正在尝试从表中删除重复项。这些是真正的重复项:对于2个重复的行,所有列均相等-当然,使用唯一键可能会有所帮助:-(

最初,我尝试使用SELECT查询来枚举重复项并将其删除:

SELECT
    * EXCEPT(row_number)
FROM (
    SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY id_column) row_number
    FROM
    `mytable`)
WHERE
    row_number = 1
Run Code Online (Sandbox Code Playgroud)

这将导致唯一的行,但会创建一个不包含分区数据的新表-不好。

我在这里看到了这个答案,它说明了保留分区的唯一方法是通过上述查询一个一个地遍历它们并保存到特定的目标表分区。

我真正想做的是使用DML DELETE删除适当的重复行。我尝试了类似于此答案建议的内容

DELETE
FROM `mytable` AS d
WHERE (SELECT ROW_NUMBER() OVER (PARTITION BY id_column)
   FROM `mytable ` AS d2
   WHERE d.id = d2.id) > 1;
Run Code Online (Sandbox Code Playgroud)

但是接受的答案无效,并导致BQ错误:

Error: Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN …

google-bigquery bigquery-standard-sql

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