Firebase 使用bigquery-LegacySQL的表并集

Firebase 使用bigquery-LegacySQL的表并集,firebase,google-bigquery,google-data-studio,Firebase,Google Bigquery,Google Data Studio,由于DataStudio还不支持standardSQL,所以我尝试使用legacySQL查询两个事件表的联合 在standardSQL中,这类似于: SELECT * FROM `com_myapp_ANDROID.app_events_*`, `com_myapp_IOS.app_events_*` select * from (TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events_"')) 但是,在legacy

由于DataStudio还不支持standardSQL,所以我尝试使用legacySQL查询两个事件表的联合

在standardSQL中,这类似于:

SELECT
  *
FROM
 `com_myapp_ANDROID.app_events_*`,
 `com_myapp_IOS.app_events_*`
select * from (TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events_"'))
但是,在legacySQL中,我在尝试引用app_events_*时出错。如果不能使用通配符,如何包含所有事件表,以便在data studio上过滤

我试过这样的方法:

SELECT
  *
FROM
 `com_myapp_ANDROID.app_events_*`,
 `com_myapp_IOS.app_events_*`
select * from (TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events_"'))
但不确定这是否是正确的方法,我得到:

不能同时输出多个独立重复的字段。 找到了用户\维度\用户\属性\值\索引和事件\维度\日期

编辑:最后这是查询的结果,因为您不能直接将“展平”与“表”查询一起使用:

select
  *
from
  FLATTEN((SELECT * FROM TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events"')),user_dim.user_properties),
  FLATTEN((SELECT * FROM TABLE_QUERY(com_myapp_IOS, 'table_id CONTAINS "app_events"')),user_dim.user_properties)

在legacySQL中,联合表运算符是
逗号

select * from [table1],[table2]
对于表_查询,您将包括数据集名称作为第一个参数,以及第二个参数的表达式

select * from (TABLE_QUERY([dataset], 'table_id CONTAINS "event"'))
要了解更多如何调试表\u查询,请阅读以下内容

Web UI会自动将结果展平,但如果存在独立的重复字段,则需要使用展平包装器展平

它包含两个参数,表和重复字段,例如:
flatte(表,标签)

此外,如果涉及表_查询,则需要再选择

select
  *
from
  FLATTEN((SELECT * FROM TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events"')),user_dim.user_properties)

在legacySQL中,联合表运算符是
逗号

select * from [table1],[table2]
对于表_查询,您将包括数据集名称作为第一个参数,以及第二个参数的表达式

select * from (TABLE_QUERY([dataset], 'table_id CONTAINS "event"'))
要了解更多如何调试表\u查询,请阅读以下内容

Web UI会自动将结果展平,但如果存在独立的重复字段,则需要使用展平包装器展平

它包含两个参数,表和重复字段,例如:
flatte(表,标签)

此外,如果涉及表_查询,则需要再选择

select
  *
from
  FLATTEN((SELECT * FROM TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events"')),user_dim.user_properties)

表通配符在旧式SQL中不起作用,因此必须使用
Table\u QUERY()
函数

您的方法是正确的,但是TABLE_QUERY函数中的第一个参数应该是数据集名称,而不是表名称的第一部分。假设数据集名称为app_events,如下所示:

TABLE_QUERY(app_events,'table_id CONTAINS "app_events"')

表通配符在旧式SQL中不起作用,因此必须使用
Table\u QUERY()
函数

您的方法是正确的,但是TABLE_QUERY函数中的第一个参数应该是数据集名称,而不是表名称的第一部分。假设数据集名称为app_events,如下所示:

TABLE_QUERY(app_events,'table_id CONTAINS "app_events"')

您遇到的特定问题与联合无关-如果表中有多个独立重复的字段,并且您试图同时输出它们,那么即使只有一个表,您也会看到相同的错误消息。此场景特定于遗留SQL,可以使用

同时,很可能您实际上并不打算使用
SELECT*
,这会导致这些重复字段同时出现在输出中。如果您可以缩小输出列表的范围-您几乎没有机会解决它-但是如果输出中仍然没有几个独立重复的字段-您可以使用展平技术

您遇到的特定问题与联合无关-如果表有多个独立的字段,即使只有一个表,您也会看到相同的错误消息重复的字段,您试图立即输出它们。此场景特定于遗留SQL,可以使用

同时,很可能您实际上并不打算使用
SELECT*
,这会导致这些重复字段同时出现在输出中。如果你能缩小你的输出列表-你几乎没有机会解决它-但是如果输出中仍然有几个独立重复的字段-你可以使用展平技术

是的,但是如果我这样做,我会得到一个错误,我没有在standardSQL上得到,请看我编辑的问题是的,这是另一个概念,它被称为展平。总是试着在一个字段中运行一个简单的查询,比如SELECT,而不是整个表。是的,但是如果我这样做,我会得到一个错误,我在standardSQL上没有得到,请参阅我编辑的问题。是的,这是另一个概念,它被称为扁平化。始终尝试在字段中运行一个简单的查询,如selectin,而不是整个表。也许我的方法是错误的,但我所尝试的是使用所有可用数据在data studio上作为数据源进行查询,就像选择一个表作为数据源,但合并两个表一样,所以我想要所有的值,然后在使用DataStudio小部件时,选择要在每个图形上显示的值。此外,我认为我不能将Flatte与TABLE_查询一起使用?也许我的方法是错误的,但我所要做的只是获取一个查询,其中包含所有可用数据,以用作DataStudio上的数据源,就像选择一个表作为数据源,但是合并了两个表,所以我想要所有的值,然后在使用DataStudio小部件时,选择要在每个图形上显示的值。此外,我相信我不能将Flatte与table_查询一起使用?