Я пытаюсь создать внешнюю таблицу, используя Hive. Ниже приведен запрос Hive:
create external table trips_raw
(
VendorID int,
tpep_pickup_datetime timestamp,
tpep_dropoff_datetime timestamp
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' location '/user/taxi_trips/';
Когда я посмотрел на вывод из таблицы 'trips_raw', созданной в результате запроса выше, я увидел, что столбцы 'tpep_pickup_date_time' и 'tpep_dropoff_datetime' равны 'NULL' во всех строках. Я видел, как другие темы говорили о причине того, что формат отметки времени «01.01.2008 11:13:00 AM» не принят Hive, но проблема в том, что это формат отметки времени, который у меня есть в моих исходных данных csv (как вы можно увидеть на скриншоте здесь).
Я мог бы указать эти 2 столбца отметки времени как 'string', и Hive сможет правильно их отобразить, но я все же хотел бы, чтобы эти 2 столбца имели тип 'отметки времени', поэтому указание этих 2 столбцов в качестве типа 'string' не является жизнеспособный вариант здесь.
Я также попробовал следующую технику, используя рекомендации с этого сайта (https://community.hortonworks.com/questions/55266/hive-date-time-problem.html), но безуспешно:
Создайте таблицу «trips_raw», используя «строку» в качестве типа для 2 столбцов отметок времени. Это позволяет результирующей таблице правильно отображать временные метки, хотя и в виде строки. Команда Hive, которую я использовал, показана ниже:
create external table trips_raw
(
VendorID int,
tpep_pickup_datetime string,
tpep_dropoff_datetime string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' location
'/user/taxi_trips/';
Когда я смотрю на итоговую таблицу, даты отображаются в виде строки, как вы можете видеть на скриншоте ниже.
Но, как я уже упоминал ранее, я хочу, чтобы столбцы времени были в формате timestamp, а не в виде строки. Поэтому на следующих 2 шагах я попытался создать пустую таблицу, а затем вставить данные из таблицы, созданной на шаге 1, но на этот раз преобразовав строку в метку времени.
Создайте внешнюю пустую таблицу с именем trips_not_raw, используя следующие команды Hive:
create external table trips_not_raw
(VendorID int,
tpep_pickup_datetime timestamp,
tpep_dropoff_datetime timestamp
);
Вставьте данные из таблицы 'trips_raw' (о которой упоминалось ранее в этом вопросе), используя команды Hive ниже:
insert into table trips_not_raw select vendorid,
from_unixtime(unix_timestamp(tpep_pickup_datetime, 'MM/dd/yyyy HH:mm:ss
aa')) as tpep_pickup_datetime,
from_unixtime(unix_timestamp(tpep_dropoff_datetime, 'MM/dd/yyyy HH:mm:ss
aa')) as tpep_dropoff_datetime
from trips_raw;
При этом строки вставляются в пустую таблицу «trips_not_raw», но результаты из 2 столбцов отметок времени по-прежнему отображаются как «Ноль», как вы можете видеть на скриншоте ниже:
Есть ли простой способ сохранить 2 временных столбца как тип 'timestamp', а не как 'string', но при этом иметь возможность правильно отображать их в выводе, не видя 'Null / None'? *