sql—DataStudio如何将可重复的列作为单个记录的值来读取?

iqxoj9l9  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(233)

我正在将mongo集合移动到bigquery中,以便在googledatastudio中进行分析和可视化。我特别想画出 locations 集合,它有多个记录,每个位置一个。每个记录将lat存储为2个数字的数组。
在datastudio中,当我尝试Map locations.coordinates 值,因为它只拉入数组的第一个值。如果不是Map它,而是将结果输出为一个表,则每个记录有2行,其中 _id 同样的和 locations.coordinates 在有纬度的行之间是不同的( locations.coordinates[0] )另一行代表经度( locations.coordinates[1] ).
我想我必须在bigquery中作为一个调度查询来执行这个操作,它在每次数据同步之后运行。但是,我希望有一种方法可以在googledatastudio中作为计算字段或混合数据集来实现这一点。
mongo中存在的数据
bigquery中存在的数据
datastudio中的数据
附加:大查询记录类型

1szpjjfi

1szpjjfi1#

您可以直接寻址数组中的值,并使用struct等相应地转换数据:

WITH t AS (
  SELECT * FROM UNNEST([
    STRUCT('a' AS company, STRUCT([-71.2, 42.0] as coordinates, 'Point' as type) AS location),
    ('b', ([-71.0, 42.2], 'Point')),
    ('c', ([-71.4, 42.4], 'Point'))
  ])
)

--show source structure of example data
--SELECT * FROM t

SELECT * except(location),
  STRUCT(
    location.coordinates[safe_offset(0)] as long,
    location.coordinates[safe_offset(1)] as lat,
    location.type
  ) as location
FROM t


offset() 对于基于0的访问, ordinal() 基于1的访问和 safe_ 如果数组中的索引不存在,则不会触发错误。如果您需要知道缺少值,那么应该使用不带值的版本 safe_ .
无论如何-通过从数组中选择特定值,此结构是扁平的。它应该与datastudio或任何其他可视化工具一起工作,不再有重复的行

相关问题