Возникла странная проблема, когда фильтрация записей в БД oracle с использованием CURRENT_DATE
(в определенное время), по-видимому, не работает.
У меня есть ежедневный процесс ETL, использующий sq oop выполнить запрос ...
select a.* from SOURCE_DATA a where
POST_DATE > to_date('2020-04-10', 'yyyy-mm-dd')
AND POST_DATE < TRUNC(CURRENT_DATE)
AND \\$CONDITIONS
(нижняя дата выбирается ежедневно на основе наибольшего значения post_date
для записей в нашем локальном хранилище данных MS SQL). Я пытаюсь получить все, кроме этого (но меньше данных текущего дня) из таблицы SOURCE_DATA в oracle DB.
Это работало 12/12/2020. Тем не менее, я вижу, что несколько записей с post_date
= 4/12/2020 (тогда как я ожидал бы только записи с, самое большее, post_date
= 4/11/2020). Таким образом, фильтр даты, по-видимому, не работает.
Это происходило ранее, когда данные с post_date
> = <current date>
постепенно добавляются к исходной таблице (которая обычно имеет данные только от <current date>
- 1)
Этот процесс sq oop выполняется через airflow
, и эти журналы sq oop показывают ...
[2020-04-12 21:32:54,161] {bash_operator.py:128} INFO - 20/04/12 21:32:54 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(TDL_ID), MAX(TDL_ID) FROM (select a.* from SOURCE_DATA a where POST_DATE > to_date('2020-04-10', 'yyyy-mm-dd') AND POST_DATE < TRUNC(CURRENT_DATE) AND (1 = 1) ) t1
.
.
.
[2020-04-12 21:38:23,086] {bash_operator.py:128} INFO - 20/04/12 21:38:23 INFO mapreduce.ImportJobBase: Transferred 1.1264 MB in 331.2884 seconds (3.4816 KB/sec)
Итак, мы видим, что этот запрос был запускать задолго до 12:00 13.04.20 (21:32 - 21:38 04.12.2020), в которой будет иметь смысл просматривать записи с post_date
= 4/12/2020 из запроса.
Проверка часового пояса в oracle DB,
SELECT SESSIONTIMEZONE, SYSDATE, CURRENT_DATE, TRUNC(CURRENT_DATE), TRUNC(CURRENT_DATE - 1) FROM DUAL;
, мы видим
SESSIONTIMEZONE SYSDATE CURRENT_DATE TRUNC(CURRENT_DATE) TRUNC(CURRENT_DATE-1)
-10:00 4/13/2020 12:04:28 PM 4/13/2020 12:04:28 PM 4/13/2020 12:00:00 AM 4/12/2020 12:00:00 AM
Таким образом, вчерашняя дата выглядит хорошо, и смещение часового пояса является правильным для времени HST (которое я Я нахожусь в).
Невозможно проверить тип данных поля post_date
(таблица на самом деле является представлением, и я не имею представления о его построении), но нижний предел фильтра даты выглядит как работает нормально, поэтому я предполагаю, что какой-то тип даты.
Не уверен, что может быть причиной этой ошибки (не уверен, если это ' s oracle вещь или sq oop вещь или что-то еще (отсюда несколько тегов). Кто-нибудь с большим опытом имеет представление о том, что здесь может происходить? Дальнейшие советы по отладке?