Когда я просматриваю таблицу в BigQuery, я вижу некоторые тестовые данные, которые я только что вставил с помощью .NET SDK.
Но когда я запускаю следующий SQL, я ничего не получаю.
SELECT workplaceKey FROM `acme-capricorn-sigma.abc_us_east1.SomeTable` WHERE DATE(_PARTITIONTIME) = "2023-02-20" LIMIT 1000
SQL — это «предлагаемый» шаблон SQL в веб-консоли GCP, я только что добавил имя одного столбца.
Я настроил разбиение на MONTH в _PARTITIONTIME и сделал фильтр разделов обязательным.
Я предполагаю, что фильтр раздела автоматически добавил правильный фильтр, и данные были вставлены в этом месяце (час назад).
Почему я не вижу никаких результатов, если предварительный просмотр показывает результаты?
К сожалению, таблица настроена на использование фильтра разделов для уменьшения количества операций чтения и стоимости запросов. Спасибо.
Я смог воспроизвести вашу проблему.
В основном вот что я сделал.
Создал таблицу с временем разделения на МЕСЯЦ, как и вы
CREATE or replace TABLE
myproject.mydataset.partition_datatest (transaction_id INT64, transaction_date DATE)
PARTITION BY
DATE_TRUNC(_PARTITIONTIME, MONTH)
OPTIONS (
partition_expiration_days = 3
);
Вставил данные в таблицу
insert into myproject.mydataset.partition_datatest(transaction_id, transaction_date) (
select cast(rand() as int64), transaction_date from (
select *
from unnest(generate_date_array('2021-01-01','2023-02-21',INTERVAL 1 MONTH)) as transaction_date
)
);
Запрошена разделенная таблица на сегодняшнюю дату - ПРИМЕЧАНИЕ, это показывает, что нет данных
select *, DATE(_PARTITIONTIME), _PARTITIONTIME
from myproject.mydataset.partition_datatest
where DATE(_PARTITIONTIME) = "2023-02-21"
Затем я изменил предложение where на приведенное ниже, учитывая, что я разделил месяц, время раздела установлено на первый день каждого месяца - это возвращает мне данные
select *, DATE(_PARTITIONTIME), _PARTITIONTIME
from myproject.mydataset.partition_datatest.partition_datatest
where DATE(_PARTITIONTIME) = "2023-02-01"
Пожалуйста, попробуйте поставить DATE(_PARTITIONTIME) = "2023-02-01"
вместо DATE(_PARTITIONTIME) = "2023-02-20"
Невероятный. Молодец и спасибо. Я предположил, что а) пользовательский интерфейс Google выдаст правильный запрос для моей таблицы, учитывая, что он явно запускает правильный запрос предварительного просмотра, и б) механизм запросов будет использовать только месячную часть любой заданной даты, когда фильтр разделов по месяцам.
Между предварительным просмотром таблицы в консоли GCP и запросом существует принципиальное несоответствие.
Я добавлю сюда больше, когда узнаю больше, но мое тестирование показало, что предварительный просмотр продолжает отображать строки после удаления содержимого таблицы.
Кроме того, полное удаление таблицы и ее воссоздание, а также вставка строк, по-видимому, вызывают обновление предварительного просмотра последними данными, в то время как запрос SELECT
ничего не возвращает, независимо от того, какая дата раздела используется.
Он ничего не возвращает, даже когда я отключаю использование кэшированных результатов в настройках запроса.
Я зарегистрировал проблему с Google:
https://issuetracker.google.com/issues/270118631
Возможно, кеширование BigQuery, неправильная дата раздела и кешированные результаты, которые наверняка использует Preview, — все это сговорились, чтобы сбить меня с толку.
Если вы удалите предложение where
WHERE DATE(_PARTITIONTIME) = "2023-02-20"
, запрос вернет результат? БР