【问题标题】:BigQuery: error in SPLIT() returnsBigQuery:SPLIT() 返回错误
【发布时间】:2017-06-29 15:05:15
【问题描述】:

我在 BigQuery 中有一个表 TabA,它有一列 ColA,列 ColA 具有以下结构

1038627|21514184

表 TabA 有超过一百万条记录。我用this拆分成多列

SELECT ColA,FIRST(SPLIT(ColA, '/')) part1,
       NTH(2, SPLIT(ColA, '/')) part2
FROM TabA

但由于某种原因,在某些行之后,拆分似乎无法正常工作。

我们正在获得这样的记录,

     ColA            part1   part2
1038627|21507470    1038627 21507470     
1038627|21534857    1038627 21507470     
1038627|21546455    1038627 21507470     
1038627|21577167    1038627 21507470

这是随机发生的。不知道哪里有错误。

SELECT COUNT(*) FROM TabA - 返回 170 万条记录


选择 ColA,FIRST(SPLIT(ColA, '|')) 第 1 部分, NTH(2, SPLIT(ColA, '|')) part2 FROM TabA - 返回 170 万条错误拆分的记录


SELECT FIRST(SPLIT(ColA, '|')) 第 1 部分, NTH(2, SPLIT(ColA, '|')) part2 FROM TabA - 仅返回正确拆分的 1.4L 记录

不知道到底发生了什么……是数据的问题还是拆分的问题??

任何帮助将不胜感激。提前致谢!!

【问题讨论】:

  • 您必须使用旧版 SQL 吗?我强烈建议您使用Standard Version,因为在那里解决这个问题非常简单。

标签: sql google-bigquery legacy-sql


【解决方案1】:

是数据的问题还是拆分的问题??

为了帮助进行故障排除 - 我建议在 BigQuery 标准 SQL 中运行相同的逻辑

#standardSQL
SELECT 
  ColA,
  SPLIT(ColA, '|')[SAFE_OFFSET(0)] AS part1,
  SPLIT(ColA, '|')[SAFE_OFFSET(1)] AS part2
FROM TabA

【讨论】:

  • 标准 SQL 语法引发错误。我是标准 SQL 的新手...请您帮忙
  • 非常感谢@mikhail-berlyant 的帮助。我用谷歌搜索了几下,才知道我使用的语法是错误的。后来我更正了。它现在正在工作..但问题是我只得到了 190 万条记录......其中记录的总数是 1799 万条记录......知道为什么即使在标准 SQL 中也会发生这种情况......拆分工作正常...但记录数比实际记录少得多。
猜你喜欢
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 2019-09-23
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2019-02-03
相关资源
最近更新 更多