使用bigquery LegacySQL

时间:2017-02-17 11:30:55

标签: firebase google-bigquery google-data-studio

我尝试使用legacySQL进行查询以检索两个事件表,因为我没有运气,因为数据工作室尚不支持标准SQL。

在标准SQL中,类似于:

SELECT
  *
FROM
 `com_myapp_ANDROID.app_events_*`,
 `com_myapp_IOS.app_events_*`

但是,在legacySQL中,我在尝试引用app_events_ *时收到错误。如何包含我的活动的所有表格,如果我不能使用通配符,我可以在数据工作室之后对其进行过滤?

我尝试过类似的事情:

select * from (TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events_"'))

但不确定这是否是正确的方法,我得到:

  

无法同时输出多个独立重复的字段。   找到user_dim_user_properties_value_index和event_dim_date

编辑:最后这是查询的结果,因为你不能直接使用FLATTEN和TABLE_QUERY:

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)

3 个答案:

答案 0 :(得分:3)

表格通配符在旧版SQL中不起作用,因为您已经猜到了必须使用TABLE_QUERY()函数。

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

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

答案 1 :(得分:2)

在legacySQL中,联合表运算符为comma

select * from [table1],[table2]

对于TABLE_QUERY,您将数据集名称包含为第一个param,将表达式包含在第二个

select * from (TABLE_QUERY([dataset], 'table_id CONTAINS "event"'))

阅读更多如何调试TABLE_QUERY阅读此linked answer

Web UI会自动展示结果,但是当有独立的重复字段时,您需要使用FLATTEN包装器进行展平。

需要两个参数,表格和重复字段,例如:FLATTEN(table, tags)

如果涉及TABLE_QUERY,则需要进行子选择,可能类似于

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

答案 2 :(得分:1)

您遇到的特定问题与UNION无关 - 如果表中有多个独立重复的字段并且您尝试一次输出它们,即使只有一个表,您也会看到相同的错误消息。此方案特定于旧版SQL,可以使用FLATTEN clause来解决 同时,您很可能实际上并不意味着使用SELECT *导致这些重复字段同时输出。如果您可以缩小输出列表的范围 - 您只有很小的机会解决它 - 但如果输出中仍然很少有独立重复的字段 - 您可以使用FLATTEN技术