Hive: создайте таблицу для загрузки данных из таблицы разделов datetime в таблицу разделов год, месяц, день - PullRequest
0 голосов
/ 28 марта 2019

Итак, у меня есть таблица, данные которой разделены по дате и времени (dt) и сохранены в S3, который выглядит следующим образом

дт = 2019-03-22 /

дт = 2019-03-23 ​​/

дт = 2019-03-24 /

и так далее. Что я хотел сделать, это изменить способ разделения данных из этого шаблона на такое подразделение, как этот

год = 2019 / месяц = ​​03 / день = 22 /

год = 2019 / месяц = ​​03 / день = 23 /

год = 2019 / месяц = ​​03 / день = 24 /

Но я не хочу изменять исходную таблицу, поэтому я создал внешнюю таблицу, которая указывает на другое местоположение в S3, которое будет местоположением для этого нового шаблона раздела. Я попытался создать таблицу, которая указывает на это местоположение, используя (ту же схему, что и исходная)

CREATE EXTERNAL TABLE `test_partition_new`(
 `order_id` string, 
 `outlet_code` string, 
 . 
 . 
 . 
 .
 `business_date` string, 
  . 
  .
  .
  .
 )
  PARTITIONED BY ( 
 `year` string, 
 `month` string, 
 `day` string)
  ROW FORMAT SERDE 
 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
  STORED AS INPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
  OUTPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
  LOCATION
 's3://data-test/test_partition/db.new_partition/'
  TBLPROPERTIES (
 'orc.compress'='SNAPPY', 
 )

, который будет делиться на год, месяц и день соответственно. Итак, насколько я понимаю, я должен вставить данные из исходной таблицы в эту. Как мне вставить данные в эту новую таблицу, в которой дата, на которую нужно разделить, взята из столбца «business_date», который содержит данные типа «2019-03-20». Существуют ли функции, которые могут разделить этот столбец на три столбца, содержащие год, месяц и день

1 Ответ

0 голосов
/ 28 марта 2019

Если формат даты соответствует, вы можете разбить их на 3 столбца и загрузить.

INSERT INTO `test_partition_new` PARTITION(year,month,day)
SELECT --cols to select 
      ,SPLIT(business_date,'-')[0] --year
      ,SPLIT(business_date,'-')[1] --month
      ,SPLIT(business_date,'-')[2] --day
FROM ORIGINAL_TABLE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...