访问 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