Вам необходимо преобразовать обе строки в один и тот же формат перед присоединением.
Преобразование нестандартного формата '23/May/2019:22:15:04'
Используйте unix_timestamp(string date, string pattern)
для преобразования заданного формата даты в секунды, переданные с 1970-01-01,Затем используйте f rom_unixtime()
для преобразования в требуемый формат :
select from_unixtime(unix_timestamp('23/May/2019:22:15:04','dd/MMM/yyyy:HH:mm:ss'));
возвращает:
2019-05-23 22:15:04
Если вы хотите только дату, укажите формат даты 'yyyy-MM-dd'
в функции from_unixtime:
select from_unixtime(unix_timestamp('23/May/2019:22:15:04','dd/MMM/yyyy:HH:mm:ss'),'yyyy-MM-dd');
Возвращает:
2019-05-23
Вторая таблица содержит более стандартный формат '2019-05-24 11:16:31.0'
, и вы можете сделать это с более простым подходом.
Вы можете использовать простой substr, потому что дата уже в формате Hive 'yyyy-MM-dd'
:
select substr('2019-05-24 11:16:31.0',1,10);
Возвращает:
2019-05-24
Или, если вы хотите тот же форматкак в первом примере 'yyyy-MM-dd HH:mm:ss'
:
select substr('2019-05-24 11:16:31.0',1,19);
Возвращает:
2019-05-24 11:16:31
Также для той же функции может использоваться функция date_format (начиная с Hive 1.2.0):
select date_format('2019-05-24 11:16:31.0','yyyy-MM-dd HH:mm:ss');
Возвращает:
2019-05-24 11:16:31
И часть даты только с использованием date_format (по состоянию на Улей 1.2.0):
select date_format('2019-05-24 11:16:31.0','yyyy-MM-dd')