|
Из Date (Oracle) в Timestamp (Hive) с обработкой Daylight Saving Time (DST)
|
|||
---|---|---|---|
#18+
Коллеги, добрый день! Подскажите, кто как решал подобную проблему. Дано: 1) Перекачивается таблица со столбцами типа DATE из Oracle в Hive с помощью Sqoop. 2) На стороне Oracle временная зона - "Asia/Yekaterinburg". 3) На стороне Hadoop временная зона - "Asia/Yekaterinburg". 4) В данных есть значение '1983-04-01 00:00:00'. Это значение для временной зоны Екатеринбурга является моментом перехода на летнее время (DST). т.е. запросы в Oracle: Код: sql 1.
вернет 1983-04-01 Код: sql 1.
вернет ошибку "ORA-01878: в кодировке или интервале указанное поле не найдено" 5) Для хранения на стороне Hive используется parquet-таблица. В которой нет типа Date, можно использовать только Timestamp. 6) При записи данных mapreduce-джобом Sqoop'а происходит преобразование извлеченной из Оракла строки "1983-04-01 00:00:00" в timestamp с временной зоной кластера (Екатеринбург) с автоматическим смещением. Т.е. в parquet-таблице будет храниться дата вида "1983-04-01 01 :00:00" 7) Пользователям, которые работают с данными в parquet-таблице этот добавленный час НЕ НУЖЕН !!! Они привыкли работать с датами БЕЗ ТАЙМЗОН в Оракле. Вопрос: как быть? Пока решил проблему следующим образом: Перевел кластер на временную зону UTC, в которой нет переходов DST. И все входящие данные из Екатеринбурга вставляю без изменений (это подавляющее большинство) как будто они в UTC зоне. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2018, 19:17 |
|
Из Date (Oracle) в Timestamp (Hive) с обработкой Daylight Saving Time (DST)
|
|||
---|---|---|---|
#18+
Jack CarverКоллеги, добрый день! Подскажите, кто как решал подобную проблему. Дано: 1) Перекачивается таблица со столбцами типа DATE из Oracle в Hive с помощью Sqoop. 2) На стороне Oracle временная зона - "Asia/Yekaterinburg". 3) На стороне Hadoop временная зона - "Asia/Yekaterinburg". 4) В данных есть значение '1983-04-01 00:00:00'. Это значение для временной зоны Екатеринбурга является моментом перехода на летнее время (DST). т.е. запросы в Oracle: Код: sql 1.
вернет 1983-04-01 Код: sql 1.
вернет ошибку "ORA-01878: в кодировке или интервале указанное поле не найдено" 5) Для хранения на стороне Hive используется parquet-таблица. В которой нет типа Date, можно использовать только Timestamp. 6) При записи данных mapreduce-джобом Sqoop'а происходит преобразование извлеченной из Оракла строки "1983-04-01 00:00:00" в timestamp с временной зоной кластера (Екатеринбург) с автоматическим смещением. Т.е. в parquet-таблице будет храниться дата вида "1983-04-01 01 :00:00" 7) Пользователям, которые работают с данными в parquet-таблице этот добавленный час НЕ НУЖЕН !!! Они привыкли работать с датами БЕЗ ТАЙМЗОН в Оракле. Вопрос: как быть? Пока решил проблему следующим образом: Перевел кластер на временную зону UTC, в которой нет переходов DST. И все входящие данные из Екатеринбурга вставляю без изменений (это подавляющее большинство) как будто они в UTC зоне. Так пробовал? Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2018, 21:03 |
|
|
start [/forum/topic.php?fid=48&gotonew=1&tid=1856636]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
128ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 234ms |
0 / 0 |