【问题标题】:Accessing BigQuery RECORD - Repeated in Tableau访问 BigQuery RECORD - 在 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 报表提供数据。这样做会影响性能。

标签: google-bigquery tableau-api


【解决方案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

【讨论】:

  • 非常感谢您的解决方案。我也尝试过这个解决方案。只是想是否会有更有效的方法来处理重复字段。有人可以建议一个真正需要重复字段的用例吗?这对我们的模型设计有很大帮助。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2018-12-11
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多