访问 BigQuery RECORD - 在 Tableau 中重复

Posted

技术标签:

【中文标题】访问 BigQuery RECORD - 在 Tableau 中重复【英文标题】:Accessing BigQuery RECORD - Repeated in Tableau 【发布时间】:2017-01-25 14:47:05 【问题描述】:

我有一个 BigQuery 表,其中有一列 RECORD 类型和模式 REPEATED。我必须在 Tableau 中查询和使用这个表。在 BigQuery 中使用 UNNEST 或 FLATTEN 正在执行影响性能的表的 CROSS JOIN。有没有其他方法可以在 Tableau 中使用此表而不展平它。已在下面发布了表架构图片链接。

[表的架构] https://i.stack.imgur.com/T4jHg.png

【问题讨论】:

你想用那个专栏做什么?到目前为止,您尝试过哪些查询? 我们正在尝试将这个表与更多的表连接起来,以便为 Tableau 报表提供数据。这样做会影响性能。 【参考方案1】:

还有其他方法可以使用...吗?

您不应该仅仅因为 UNNEST “确实” CROSS JOIN 而害怕它 诀窍是,即使它是交叉连接,但它只是行内的交叉连接,并且对表中的所有行都是全局的。同时,总有办法做不同的事情 因此,下面的示例 1 – 展示了使用 UNNEST 的虚拟示例 然后示例 2 – 展示了如何在不使用 UNNEST 而是使用 SQL UDF 的情况下执行相同操作 您尚未提供有关您的案例的具体信息,因此以下内容足够通用以显示“其他”方式

与Flattening via UNNEST

#standardSQL
WITH yourTable AS (
  SELECT 1 AS id, ARRAY<STRUCT<details INT64, flag STRING, value STRING, description STRING>>
    [(1,'y','a','xxx'),(2,'n','b','yyy'),(3,'y','c','zzz'),(4,'n','d','vvv')] AS type UNION ALL
  SELECT 2 AS id, ARRAY<STRUCT<details INT64, flag STRING, value STRING, description STRING>>
    [(11,'t','c','xxx'),(21,'n','a','yyy'),(31,'y','c','zzz'),(41,'f','d','vvv')] AS type
)
SELECT id, SUM(t.details) AS details
FROM yourTable, UNNEST(type) AS t
WHERE t.flag = 'y'
GROUP BY id

与SQL UDF

#standardSQL
CREATE TEMP FUNCTION do_something (
  type  ARRAY<STRUCT<details INT64, flag STRING, value STRING, description STRING>>
)
RETURNS INT64 AS ((
  SELECT SUM(t.details) AS details
  FROM UNNEST(type) AS t
  WHERE t.flag = 'y'
));

WITH yourTable AS (
  SELECT 1 AS id, ARRAY<STRUCT<details INT64, flag STRING, value STRING, description STRING>>
    [(1,'y','a','xxx'),(2,'n','b','yyy'),(3,'y','c','zzz'),(4,'n','d','vvv')] AS type UNION ALL
  SELECT 2 AS id, ARRAY<STRUCT<details INT64, flag STRING, value STRING, description STRING>>
    [(11,'t','c','xxx'),(21,'n','a','yyy'),(31,'y','c','zzz'),(41,'f','d','vvv')] AS type
)
SELECT id, do_something(type) AS details
FROM yourTable

【讨论】:

非常感谢您的解决方案。我也尝试过这个解决方案。只是想是否会有更有效的方法来处理重复字段。有人可以建议一个真正需要重复字段的用例吗?这对我们的模型设计有很大帮助。谢谢

以上是关于访问 BigQuery RECORD - 在 Tableau 中重复的主要内容,如果未能解决你的问题,请参考以下文章

如何创建保留嵌套 RECORD 字段的 BigQuery 视图

如何使用 DML 语法在 BigQuery 中插入带有 RECORD 字段的记录?

Firebase Analytics 数据到 Redshift - BigQuery RECORD 数据类型到 Redshift

使用 Python API 使用 RECORD 字段更新 BigQuery 架构

在BigQuery中更改记录列的类型

BigQuery:查找 ID 类型为 RECORD 的数组并使用 SQL 连接辅助表中的数据