【问题标题】:Hive:Create a table to load data from datetime partition table to year, month, day partition tableHive:创建表,将数据从datetime分区表加载到年月日分区表
【发布时间】:2019-03-28 13:12:32
【问题描述】:

所以,我有一个表,数据按 datetime(dt) 分区并存储在 S3 中,分区如下所示

dt=2019-03-22/

dt=2019-03-23/

dt=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”等数据。有没有什么函数可以把这列分成年月日三列

【问题讨论】:

    标签: sql amazon-s3 hive


    【解决方案1】:

    如果日期格式一致,可以拆分成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
    

    【讨论】:

    • 对不起,business_date 看起来像这样 '2015-01-13 00:00:00.0' 我应该如何摆脱时间中的零
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2020-12-24
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多