Фильтрация записей в oracle БД на основе (меньше) CURRENT_DATE, похоже, не работает? - PullRequest
0 голосов
/ 14 апреля 2020

Возникла странная проблема, когда фильтрация записей в БД 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 вещь или что-то еще (отсюда несколько тегов). Кто-нибудь с большим опытом имеет представление о том, что здесь может происходить? Дальнейшие советы по отладке?

...