【发布时间】:2018-12-04 11:06:49
【问题描述】:
假设有这样一个源表:
Year Long Lat Values
========================================
2015 8 1 12
2015 8 1 43
2015 8 1 11
...
命运表应该是这样的:
Year Long Lat Field1 Field2 Field3
========================================================================
2015 8 1 12 43 11
...
¿我怎样才能在单个查询中做这样的事情(在 Google BigQuery 中使用)?
“问题”是我将在 Python Google Dataflow 管道中使用此查询,因此由于使用 apache 光束的读写限制,我需要在单个选择中执行此操作(您可以避免插入语句,因为我将为此使用 apache 光束功能)。
额外
使用这个选择
select Fecha, Longitud, Latitud,
ARRAY_AGG(Valor) as vector
from `poc-cloud-209212.PruebasIoT.CanonicalFrames`
group by Fecha, Longitud, Latitud
如果我尝试使用:
select Fecha, Longitud, Latitud,
ARRAY_AGG(Valor)[offset(0)] as field1,
ARRAY_AGG(Valor)[offset(1)] as field2
from `poc-cloud-209212.PruebasIoT.CanonicalFrames`
group by Fecha, Longitud, Latitud
我有错误:
Array index 1 is out of bounds (overflow)
解决方案
这对我的用例有用:
简单的查询更容易理解,您可以根据这篇文章的表格(可能有更多的行,具有与架构中显示的不同的值):
select year, long, lat,
array_agg(values)[SAFE_OFFSET(0)] as field1,
array_agg(values)[SAFE_OFFSET(1)] as field2,
array_agg(values)[SAFE_OFFSET(2)] as field3
from t
group by year, long, lat;
【问题讨论】:
-
这个输出的逻辑是什么?
-
我想你想使用 PIVOT。参照。 stackoverflow.com/a/10429399/6996150 PS:我喜欢¿这个角色!
-
您使用的是什么 DBMS?
-
像“DBMS”一样,我正在使用 Google BigQuery,它使用标准 SQL。逻辑是从接收“原始”数据的表中读取,它们必须以“规范”方式存储
-
lat = 2去哪儿了?
标签: sql google-bigquery