gpt4 book ai didi

hadoop - AWS 上的 hive : convert S3 JSON to Columnar preserving partitions

转载 作者:可可西里 更新时间:2023-11-01 15:04:06 25 4
gpt4 key购买 nike

我在 S3 中有包含多行 JSON(以换行符分隔)的文件。我想将这些文件转换为柱状格式以供 AWS Athena 使用

我正在关注 Converting to Columnar Formats guide要做到这一点,但是当转换为 ORC 时,S3 中的分区约定将丢失。

在这个例子中,如何在转换为 parquet s3 的文件夹结构中保留 dt 分区?当我运行示例时,它只输出 s3://myBucket/pq/000000_0 而不是 s3://myBucket/pq/dt=2009-04-14-04-05/000000_0

这是设置接口(interface)以将 JSON 导入 Hive 表的 HQL:

CREATE EXTERNAL TABLE impressions (
requestBeginTime string,
adId string,
impressionId string,
referrer string,
userAgent string,
userCookie string,
ip string,
number string,
processId string,
browserCookie string,
requestEndTime string,
timers struct<modelLookup:string, requestTime:string>,
threadId string,
hostname string,
sessionId string)
PARTITIONED BY (dt string)
ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe'
with serdeproperties ( 'paths'='requestBeginTime, adId, impressionId, referrer, userAgent, userCookie, ip' )
LOCATION 's3://us-east-1.elasticmapreduce/samples/hive-ads/tables/impressions' ;
msck repair table impressions;

这是转换为 Parquet 的 HQL

CREATE EXTERNAL TABLE  parquet_hive (
requestBeginTime string,
adId string,
impressionId string,
referrer string,
userAgent string,
userCookie string,
ip string)
STORED AS PARQUET
LOCATION 's3://mybucket/pq/';

INSERT OVERWRITE TABLE parquet_hive SELECT requestbegintime,adid,impressionid,referrer,useragent,usercookie,ip FROM impressions where dt='2009-04-14-04-05';

最佳答案

首先,将PARTITIONED BY (dt string) 添加到parquet_hive 定义中。

第二个-
如果要逐个分区插入数据,则必须声明要插入的分区。注意 PARTITION (dt='2009-04-14-04-05')

INSERT OVERWRITE TABLE parquet_hive PARTITION (dt='2009-04-14-04-05')
SELECT requestbegintime,adid,impressionid,referrer,useragent,usercookie,ip
FROM impressions where dt='2009-04-14-04-05'
;

更简单的方法是使用动态分区。
请注意 PARTITION (dt)dt 作为 SELECT 中的最后一列。

您可能需要设置 hive.exec.dynamic.partition.mode。

set hive.exec.dynamic.partition.mode=nonstrict;

INSERT OVERWRITE TABLE parquet_hive PARTITION (dt)
SELECT requestbegintime,adid,impressionid,referrer,useragent,usercookie,ip,dt
FROM impressions where dt='2009-04-14-04-05'
;

附言
CREATE EXTERNAL TABLE impressions 不会“将 JSON 读入 Hive 表”。
它只是一个具有读取 HDFS 文件所需信息的接口(interface)。
`

关于hadoop - AWS 上的 hive : convert S3 JSON to Columnar preserving partitions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com