我尝试使用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)
答案 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技术