2016-09-29 11 views
1

Я хочу преобразовать дату, которая находится в формате '2015-05-09T09: 00: 12.123462000', в временную метку unix в улье. UNIX_TIMESTAMP ('2015-05-09T09: 00: 12.123462000') не работает. Я не уверен, как я могу это преобразовать. Мне нужно это, чтобы сравнить две даты в другом формате. Я конвертирую обе даты в timestamp unix, но это не удается. кто-то может помочь с этим.конвертировать дату в 2015-05-09T09: 00: 12.123462000 to unix timestamp in hive

Благодаря

ответ

1

Ваш вход использует полный формат ISO 8601, с «Т» между датой и временем, а также дробных секунд. Hive ожидает формат SQL (т. Е. Пробел между датой и временем), как видно из java.sql.Timestamp и ODBC, с или без дробных секунд, как stated in the Hive documentation.

Просто нанесите некоторые очень элементарные массивные массивы - затем «лить» String в улей Timestamp. И pleeease забывать, что хромой туда и обратно и от UNIX_TIMESTAMP:

cast(regexp_replace('2015-05-09T09:00:12.123462000', 'T',' ') as Timestamp) 
0

The Answer by Samson Scharfrichter правильно и должны быть приняты. Я просто добавлю несколько слов о типах java.time.

Преобразование между строковыми ↔ java.time.Instant

The java.time классов вытеснять неприятные старые устаревшие классы даты и времени, такие как java.sql.Timestamp.

Instant класса представляет момент на временной шкале в UTC с разрешением nanoseconds (до девяти (9) цифр десятичной дроби).

Ваша строка ввода соответствует стандарту ISO 8601. В классах java.time по умолчанию используются форматы ISO 8601 при разборе/генерации строк, которые представляют значения даты и времени. Поэтому нет необходимости указывать шаблон форматирования. Вы можете напрямую проанализировать свою строку как объект Instant.

В вашей строке ввода отсутствует указатель смещения-от-UTC или часового пояса. Если он должен был быть в формате UTC, добавьте Z для Zulu, что означает UTC.

Instant instant = Instant.parse("2015-05-09T09:00:12.123462000" + "Z"); 

Вы можете создать такую ​​строку, просто назовите toString. Формат форматирования по умолчанию, используемый toString, печатает десятичную дробь в группах по три цифры по мере необходимости. В этом примере последние три цифры являются нулями, поэтому они опущены.

String output = instant.toString(); 

2015-05-09T09: 00: 12.123462Z

Чтобы сделать это в SQL-стиль строки ожидаемой улья, замените T с пространством и удалить Z.

String inputForHive = output.replace("T" , " ").replace("Z" , ""); 

2015-05-09 09:00:12.123462

Преобразование из чисел

улья также обеспечивает для преобразования из:

  • целое число
    графа целых секунд от Unix/Posix epoch начала 1970 UTC (1970-01-01T00:00:00Z).
  • номер с плавающей запятой
    То же, что и выше, но с долей секунды в разрешении до наносекунд.

Второй, который я предлагаю вам избежать. Типы floating-point, такие как float, Float, double и Double в Java намеренно обмениваются точностью для более быстрого выполнения. Это часто приводит к посторонним цифрам в конце вашей десятичной дроби. Если вам нужна дробная секунда, придерживайтесь типа String & Instant.

Первый из них можно легко получить из Instant, вызвав метод getEpochSecond. Конечно, это означает потерю данных, поскольку этот метод оставляет за собой какую-то дробную секунду.

long secondsSinceEpoch = instant.getEpochSecond(); 

Идёт в другую сторону.

Instant instant = Instant.ofEpochSecond(secondsSinceEpoch); 

Сравнение

После того, как у вас есть ваши Instant объекты можно сравнить с такими методами, как compareTo, equals, isBefore, isAfter.

Boolean happenedBefore = thisInstant.isBefore(thatInstant); 

О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые классы времени, такие как java.util.Date, .Calendar, & java.text.SimpleDateFormat.

Проект Joda-Time, теперь в maintenance mode, советует перейти на java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений.

Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport и дополнительно выполнен с возможностью Android в ThreeTenABP (см How to use…).

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.

+0

ИМХО это в значительной степени не по теме. Интерфейс Hive - это SQL (вид).Это скин вокруг типов Java и методов Java, true; но тот, кто задает короткий вопрос без особого контекста, как этот, вряд ли будет интересоваться деталями реализации Hive или тем, что вы могли бы сделать за пределами Hive. –

 Смежные вопросы

  • Нет связанных вопросов^_^