【问题标题】:How to load a csv file containing time string value to timestamp in hive如何将包含时间字符串值的 csv 文件加载到配置单元中的时间戳
【发布时间】:2020-06-27 07:40:30
【问题描述】:

我有以下格式的数据集

2019-10-01 00:00:00 UTC,cart,5773203,1487580005134238553,,runail,2.62,463240011,26dd6e6e-4dac-4778-8d2c-92e149dab885
2019-10-01 00:00:03 UTC,cart,5773353,1487580005134238553,,runail,2.62,463240011,26dd6e6e-4dac-4778-8d2c-92e149dab885
2019-10-01 00:00:07 UTC,cart,5881589,2151191071051219817,,lovely,13.48,429681830,49e8d843-adf3-428b-a2c3-fe8bc6a307c9
2019-10-01 00:00:07 UTC,cart,5723490,1487580005134238553,,runail,2.62,463240011,26dd6e6e-4dac-4778-8d2c-92e149dab885

我已经创建了一个表来将数据加载到表中。

create table if not exists product_data (event_time string,event_type string,product_id string,category_id string,category_code string,brand string,price float,user_id bigint,user_session string) row format delimited fields terminated by ',' lines terminated by '\n' tblproperties("skip.header.line.count"="1");

是否可以将 event_time 字段直接加载为时间戳值? 非常感谢 Hive 的新手和任何帮助

【问题讨论】:

标签: hive hiveql


【解决方案1】:

由于您使用 HDFS 中的原始文件将数据加载到配置单元中,因此推荐的方法是首先创建 external table,所有字段都为 string 数据类型。拥有外部表后,将数据加载到定义了架构的物化表中。这种两步方法将有助于确保您在从文件加载期间不会丢失信息。

第 1 步: 创建外部表:

create external table if not exists product_data_external_table
(
 event_time string,
 event_type string,
 product_id string,
 category_id string,
 category_code string,
 brand string,
 price string,
 user_id string,
 user_session string
) row format delimited 
fields terminated by ','
lines terminated by '\n'
location '<your hdfs file location>'
tblproperties("skip.header.line.count"="1");

创建一个定义了 Schema 的配置单元表:

create table if not exists product_data(
 event_time timestamp,
 event_type string,
 product_id string,
 category_id string,
 category_code string,
 brand string,
 price float,
 user_id bigint,
 user_session string
) stored as parquet; 

第 2 步:将记录从 product_data_external_table 插入到 product_data:

insert into product_data 
select
 cast(from_unixtime(unix_timestamp(event_time,'yyyy-MM-dd HH:mm:ss Z'),'yyyy-MM-dd HH:mm:ss') as timestamp) as event_time,
 event_type,
 product_id,
 category_id,
 category_code,
 brand,
 cast(price as float) as price,
 cast(user_id as bigint) as user_id,
 user_session
from 
 product_data_external_table;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2020-05-27
    • 1970-01-01
    • 2020-02-13
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多