【问题标题】:UNION of tables using bigquery LegacySQL使用 bigquery LegacySQL 合并表
【发布时间】:2017-07-06 21:56:20
【问题描述】:

我正在尝试使用 legacySQL 进行查询以检索两个事件表的联合,因为 Data Studio 尚不支持标准 SQL。

在标准 SQL 中类似于:

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

但是,在 legacySQL 中尝试引用 app_events_* 时出现错误。如何包含我的事件的所有表格,以便以后在不能使用通配符的情况下在 Data Studio 中对其进行过滤?

我尝试过类似的方法:

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)

【问题讨论】:

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


    【解决方案1】:

    如您所料,表通配符在旧版 SQL 中不起作用,因此您必须使用 TABLE_QUERY() 函数。

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

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

    【讨论】:

      【解决方案2】:

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

      select * from [table1],[table2]
      

      对于 TABLE_QUERY,您可以将数据集名称作为第一个参数,并将表达式作为第二个参数

      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)
      

      【讨论】:

      • 是的,但是如果我这样做,我会收到一个我在标准 SQL 上没有遇到的错误,请参阅我编辑的问题
      • 是的,这是另一个概念,它被称为 FLATTEN。总是尝试运行一个简单的查询,比如选择一个字段,而不是整个表。
      【解决方案3】:

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

      【讨论】:

      • 也许我的方法是错误的,但我正在尝试使用所有可用作数据工作室数据源的数据进行查询,就像您选择一个表作为数据源时一样,但是合并了两个表,所以我想要所有的值,然后在使用数据工作室小部件时,选择要在每个图表上显示的值。
      • 此外,我相信我不能将 FLATTEN 与 TABLE_QUERY 一起使用?
      猜你喜欢
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 2021-11-19
      • 2023-03-12
      • 1970-01-01
      • 2022-10-13
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多