如何选择使用bigquery拆分的列的最后一个索引

时间:2018-10-11 19:27:12

标签: android mysql google-bigquery

关于拆分BigQuery MySQL列有很多问题,但是我找不到适合我的情况。

我正在处理一个大型数据集(第3方),该数据集包含一个自由格式的位置字段,以对其进行标准化以适用于我的Android应用。当我运行select时,我想用逗号分隔列数据,只取最后一段,并将其修剪为空白。

到目前为止,我已经通过Googling文档提出了以下建议:

SELECT RTRIM(LOWER(SPLIT(location, ',')[OFFSET(-1)])) FROM `users` WHERE location <> ''

但是在最后一个元素上进行拆分的-1技巧不起作用(使用offset或ordinal)。我无法将ARRAY_LENGTH与相同的数组内联一起使用,而且我不确定如何构造嵌套查询并知道该行的最后一列索引。

我可能会从错误的角度来解决这个问题,我现在使用Android和NoSQL,所以很长一段时间没有使用MySQL

如何正确构造此查询?

2 个答案:

答案 0 :(得分:2)

  

我想用逗号分隔列数据,只取最后一段...

您可以使用以下方法(BigQuery标准SQL)

SELECT ARRAY_REVERSE(SPLIT(location))[SAFE_OFFSET(0)]

下面是一个说明它的示例:

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '1,2,3,4,5' location UNION ALL
  SELECT '6,7,8'
)
SELECT location, ARRAY_REVERSE(SPLIT(location))[SAFE_OFFSET(0)] last_segment
FROM `project.dataset.table`   

有结果

Row location    last_segment     
1   1,2,3,4,5   5    
2   6,7,8       8      

进行修整-您可以使用LTRIM(RTRIM())-类似于

SELECT LTRIM(RTRIM(ARRAY_REVERSE(SPLIT(location))[SAFE_OFFSET(0)])) 

答案 1 :(得分:0)

为了得到分割字符串的最后一部分,我使用 len(string) - len(replace(string,delimeter,'')) 技巧来计算分隔符的数量: >

split(<string>,'-')[OFFSET(length(<string>)-length(replace(<string>,'-',''))]