У меня есть таблица orders
как:
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_date
.
Для работы с данными у меня есть представление production_orders
, определенное как:
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'
Он говорит мне, что query will process 3.6 GB of data
.
Таблица orders
составляет 3,6 ГБ - это означает, что представление не учитывает поле раздела.
Для сравнения, когда я делаю:
SELECT *
FROM `PROJECT.DATASET.orders`
WHERE purchase_date> '2018-10-25 13:40:48 UTC'
Это говоритмне, что the query will process 945 KB data
Я прочитал это BigQuery Представления с разделением по дате , но не мог понять, как использовать это в моем случае.Мой раздел - это выбранное поле из таблицы, а не поле метаданных.Кроме того, мне нужно поле как TIMESTAMP
, а не DATE
.
Как я могу решить это?