以表名为变量查询表

问题描述 投票:0回答:1

我正在 Looker Studio 中构建一些仪表板,需要 3 个 GA4 每日表,这些表每天都会通过 GA4 和 BigQuery 之间的同步添加。

我想查询这些特定的表,因为我们已经运行 GA4 几年了,有 503 个子表,所以当我只想要特定的日期子表时,表名通配符查询需要永远(55GB)。

表添加为 bigquery project.dataset name.events_intraday_date-of-table 为 yyyymmddd 例如, 今天是

my-bigquery-project.analytics-123456789.events_intraday_20241909
昨天是
my-bigquery-project.analytics-123456789.events_intraday_20241809
去年是
my-bigquery-project.analytics-123456789.events_intraday_20231909

等等

我认为我需要编写一个用户定义的表函数,其参数为今天的日期,然后该函数将对由(某物)返回的临时表运行查询(即使是全选)。显然,今天的日期发生了变化,必须涉及一个参数。

我可以编写一个存储过程来返回当天的结果,没问题,例如,这是一个简单的查询,可以按时间戳获取昨天的购买情况

EXECUTE IMMEDIATE concat("select event_date, event_name, event_timestamp, from ", concat("my-bigquery-project.analytics-123456789.events_intraday_", format_date('%Y%m%d', date_sub(current_date(), interval 1 day))), " WHERE event_name = 'purchase' group by event_date, event_name, event_timestamp order by event_timestamp ASC/* LIMIT 100 */");

我可以将其作为 Looker Studio 中的 BigQuery 自定义 SQL 数据源 请注意,LIMIT 注释是必要的,因为 Looker 会在查询中找不到它时向所有自定义 SQL 添加 LIMIT

但是,虽然 Looker 连接良好并返回架构,但表本身不可用,因为 Looker 然后将其自己的查询包装在您的自定义 SQL 中,即在上面的示例中,它在 BigQuery 中生成

SELECT clmn0_, COUNT(1) AS t0_qt_adhhixz7kd FROM (
SELECT t0.event_date AS clmn0_ FROM (
EXECUTE IMMEDIATE concat("select event_date, event_name, event_timestamp, from ", concat("my-    bigquery-project.analytics-123456789.events_intraday_",
    format_date('%Y%m%d', date_sub(`current_date`(), INTERVAL 1 day))), " WHERE event_name = 'purchase' group by event_date, event_name, event_timestamp order by event_timestamp ASC/* LIMIT 100 */")
) AS t0
) WHERE (clmn0_ >= '20240919' AND clmn0_ <= '20240919') GROUP BY clmn0_ ORDER BY t0_qt_adhhixz7kd       DESC LIMIT 2000001;

失败并出现错误

Syntax error: Expected keyword JOIN but got identifier "concat" at

而且我无法找到一种方法来编写返回 Looker 可以包装其自己的 SQL 的表的任何内容

我在 stackoverflow 和其他地方读过很多随机答案,我认为我必须编写一个接受参数(例如 table_name)的表值函数来执行此操作,但是我总是收到“table_name”错误数据集中不存在,因为它没有评估 table_name。

我认为最接近的是这个答案https://stackoverflow.com/questions/6661505/declare-variable-in-table-valued-function但是我再次陷入了FROM部分。

或这里https://stackoverflow.com/questions/74774856/bigquery-sql-table-function-with-string-interpolation但我只有一个存储过程,如果我在 Looker 中将其称为我的自定义查询,则相同问题如上。

我想我正在追求类似的东西

create table function analytics_123456789.todaystable(x)
AS (
  with CTE AS(
   [would like to execute something here]
  )
  select * from CTE
)

但我无法在其中执行或调用?

必须有一种方法来做到这一点,否则,随着在 bigquery 中创建更多的日常表,基于 BigQuery GA4 表的 Lookers 报告将变得站得住脚?

google-bigquery looker-studio
1个回答
0
投票

BigQuery 支持使用通配符表查询多个表使用特殊列 _TABLE_SUFFIX:

select event_date, event_name, event_timestamp
from `my-bigquery-project.analytics-123456789.events_intraday_*`
WHERE 
_TABLE_SUFFIX =  date_sub(current_date(), interval 1 day)
event_name = 'purchase' 
group by event_date, event_name, event_timestamp 
order by event_timestamp ASC
/* LIMIT 100 */
© www.soinside.com 2019 - 2024. All rights reserved.