Как заставить представления распознавать секционированный столбец с BigQuery - PullRequest
0 голосов
/ 25 октября 2018

У меня есть таблица 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.

Как я могу решить это?

1 Ответ

0 голосов
/ 25 октября 2018

Когда запросы достигают определенной сложности, BigQuery не может передавать внешние параметры запроса во внутренние запросы, что ограничивает возможность использования фильтрации разделов из внешнего запроса.Это происходит и с представлениями.

Чтобы создать нечто похожее на «материализованное представление», вы можете использовать подход, описанный в Я хочу «материализованное представление» последних записей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...