Google bigquery 如何使用BigQuery使视图识别分区列

Google bigquery 如何使用BigQuery使视图识别分区列,google-bigquery,Google Bigquery,我有一个订单表,如下所示: orderid purchase_date etl_timestamp ------------------------------------------------------------------- 120 2018-10-25 13:40:48 UTC 2018-10-25 13:40:48 UTC 120 2018-10-25 13:40:48 UTC

我有一个
订单
表,如下所示:

orderid       purchase_date                 etl_timestamp
-------------------------------------------------------------------
120           2018-10-25 13:40:48 UTC       2018-10-25 13:40:48 UTC
120           2018-10-25 13:40:48 UTC       2018-10-25 13:42:13 UTC
121           2018-10-25 13:40:48 UTC       2018-10-25 13:40:48 UTC
每个特定的时间间隔,我都会使用
APPEND
将数据加载到表中。因此,此表包含相同顺序的版本

分区字段为
purchase\u date

为了处理数据,我有一个视图
生产订单
定义为:

select 
    orders_id, .... purchase_date, etl_timestamp
from
    (select
         * ,
         ROW_NUMBER() OVER (PARTITION BY orders_id order by etl_timestamp DESC) as rn 
     from
         `PROJECT.DATASET.orders`) as t 
where 
    t.rn = 1
这将返回每个订单的最新版本。对于上面的示例,它返回:

orderid       purchase_date                 etl_timestamp
--------------------------------------------------------------------
120           2018-10-25 13:40:48 UTC       2018-10-25 13:42:13 UTC
121           2018-10-25 13:40:48 UTC       2018-10-25 13:40:48 UTC
这很好,但当我运行以下查询时:

SELECT * 
FROM `PROJECT.DATASET.production_orders`
WHERE purchase_date> '2018-10-25 13:40:48 UTC'
它告诉我,
查询将处理3.6gb的数据

<代码>订单< /Cord>表为3.6 GB -这意味着视图不考虑分区字段。

要进行比较,请执行以下操作:

SELECT * 
FROM `PROJECT.DATASET.orders`
WHERE purchase_date> '2018-10-25 13:40:48 UTC'
它告诉我
查询将处理945kb的数据

我读过这篇文章,但不知道如何在我的案例中使用它。我的分区是从表中选择的字段,它不是元数据字段。另外,我需要的字段是
时间戳
而不是
日期


我怎样才能解决这个问题

当查询达到一定的复杂性时,BigQuery无法将外部查询参数传递到内部查询,因此限制了从外部查询使用分区过滤的能力。视图也会发生这种情况


要创建类似于“物化视图”的内容,可以使用上所述的方法。

不支持自定义分区字段的视图。仅适用于自开始的伪列
\u分区时间
now@MikhailBerlyant那我该怎么办?我桌上没有分区时间。这对我的提问毫无意义。。我在购买日期而不是行添加到表中的日期运行查询。@MikhailBerlyant追加数据并具有多个记录版本是BigQuery用户的常见做法。如果视图选项不可行,您如何处理此问题?1)如果BigQuery中还没有功能-您在提交功能请求,但显然您首先检查此类请求是否已经存在,如果已经存在,您将对其进行星型/投票:o)2)您寻找解决方法-在您的情况下,您只是简单地不使用依赖于自定义分区的视图字段,而不是查询原始table@MikhailBerlyant我理解这种观点不是一种选择。我在问解决办法是什么?许多人在他们的表上使用append和version。解决这个问题的推荐方法是什么?我不确定这对我是否有效。我的过程几乎是实时的。每3分钟添加一次新记录。报告一直在数据上运行。我想了一个方法来解决这个问题,创建一个视图。。。我不知道那里的答案对我有什么帮助。在我的情况下,我应该用什么来替换此代码
WHERE datehour>“2018-10-25”
?如果你有一个解决方案可以在我的情况下工作,请添加更多细节。现在的问题是“如何在每天运行的BigQuery之外编写脚本”?如果“计划查询”功能无法处理此问题,请尝试应用程序脚本。例如,修改。但让我们把细节留到新的question@Luis,我更新了我的答案。不再需要重新创建视图