【问题标题】:FLATTEN with TABLE_DATE_RANGE使用 TABLE_DATE_RANGE 展平
【发布时间】:2014-08-03 01:36:22
【问题描述】:

我在数据集中有一系列表,需要在对重复记录之一进行 FLATTEN 时查询所有表。例如,如下查询可以正常工作:

 SELECT
   date,
   customDimensions.value AS customDimension,
   hits.page.pagePath AS pagePath
FROM
   (FLATTEN( [<projectId>:<datasetId>.ga_sessions_20130910] ,
   customDimensions)) 
WHERE
   hits.page.pagePath CONTAINS '/helmets' 
   AND customDimensions.index IN (1,2,3)

但是,我在使用表通配符时遇到了 FLATTENing 问题。有人可以帮我解决语法吗?是否可以将 FLATTEN 与 TABLE_DATE_RANGE 一起使用?

SELECT
   date,
   customDimensions.value AS customDimension,
   hits.page.pagePath AS pagePath
FROM
   (FLATTEN (TABLE_DATE_RANGE ([<project>:<dataset>.ga_sessions_],
   TIMESTAMP('2013-09-10'),
   TIMESTAMP ('2014-06-10'))),
   customDimensions) 
WHERE
   hits.page.pagePath CONTAINS '/helmets' 
   AND customDimensions.index IN (1,2,3)

谢谢, 沙岩

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    根据参考手册,FLATTEN 语法是:

    ...(FLATTEN ([project_name:]datasetId.tableId, flattenField))..
    ...(FLATTEN (subselect_clause, flattenField))..
    

    基于此,我会尝试在 FLATTEN 语句中放置一个子选择子句,如下所示:

    SELECT
    date,
    customDimensions.value AS customDimension,
    hits.page.pagePath AS pagePath
    FROM
    FLATTEN(
    (SELECT date, customDimensions, hits FROM TABLE_DATE_RANGE ([<project>:<dataset>.ga_sessions_],
    TIMESTAMP('2013-09-10'),TIMESTAMP ('2014-06-10')))
    , customDimensions)
    WHERE
    hits.page.pagePath CONTAINS '/helmets' 
    AND customDimensions.index IN (1,2,3)
    

    【讨论】:

    • 谢谢!已经探索过这个选项,但希望 FLATTEN 与 TABLE_DATE_RANGE 一起使用以获得更清晰的查询。我想目前还不可能。我会提出功能请求。
    • 我同意——那太好了。对功能请求 +1 ;-)
    • 解决方案不起作用。我收到此错误消息:错误:找不到字段“customDimensions”。
    • 您可以在此功能请求上加一个:code.google.com/p/google-bigquery/issues/…
    • 答案可能是转向使用标准 SQL。我搬回了旧版,因为它有一些标准还没有的功能。但是我发现这些很简单,可以使用用户定义的函数来实现:cloud.google.com/bigquery/docs/reference/standard-sql/…
    【解决方案2】:

    试试这个,它对我有用..

    SELECT
       date,
       customDimensions.value AS customDimension,
       hits.page.pagePath AS pagePath
    FROM
       (FLATTEN (SELECT * FROM TABLE_DATE_RANGE ([<project>:<dataset>.ga_sessions_],
       TIMESTAMP('2013-09-10'),
       TIMESTAMP ('2014-06-10'))),
       customDimensions) 
    WHERE
       hits.page.pagePath CONTAINS '/helmets' 
       AND customDimensions.index IN (1,2,3)
    

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation would greatly improve its long-term value 通过展示为什么这是一个很好的解决问题的方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 2014-12-14
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2017-12-26
    • 2020-12-08
    • 2015-11-29
    相关资源
    最近更新 更多