访问 BigQuery RECORD - 在 Tableau 中重复
Accessing BigQuery RECORD - Repeated in Tableau
我有一个 BigQuery Table,其中有一列的记录类型和模式为重复。我必须在 Tableau 中查询和使用这个 table。在 BigQuery 中使用 UNNEST 或 FLATTEN 正在执行影响性能的 Table 的 CROSS JOIN。有没有其他方法可以在 Tableau 中使用此 table 而无需将其展平。已在下方发布 table 架构图像 link。
[Table 的架构]
https://i.stack.imgur.com/T4jHg.png
Is there any other way to use ... ?
你不应该害怕 UNNEST 只是因为它“做”了 CROSS JOIN
诀窍在于,即使它是交叉连接,但它仅在行内交叉连接并且对 table 中的所有行都是全局的。同时,总有办法做不同的事情
因此,下面的示例 1 – 展示了使用 UNNEST
的虚拟示例
然后示例 2 – 展示了如何在不使用 UNNEST 的情况下执行相同的操作,而是使用 SQL UDF
您没有提供有关您案例的具体信息,因此以下内容足够通用,可以显示“其他”方式
#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
#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 Table,其中有一列的记录类型和模式为重复。我必须在 Tableau 中查询和使用这个 table。在 BigQuery 中使用 UNNEST 或 FLATTEN 正在执行影响性能的 Table 的 CROSS JOIN。有没有其他方法可以在 Tableau 中使用此 table 而无需将其展平。已在下方发布 table 架构图像 link。
[Table 的架构] https://i.stack.imgur.com/T4jHg.png
Is there any other way to use ... ?
你不应该害怕 UNNEST 只是因为它“做”了 CROSS JOIN
诀窍在于,即使它是交叉连接,但它仅在行内交叉连接并且对 table 中的所有行都是全局的。同时,总有办法做不同的事情
因此,下面的示例 1 – 展示了使用 UNNEST
的虚拟示例
然后示例 2 – 展示了如何在不使用 UNNEST 的情况下执行相同的操作,而是使用 SQL UDF
您没有提供有关您案例的具体信息,因此以下内容足够通用,可以显示“其他”方式
#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
#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