hive - Kinesis Firehose 到 s3 : data delivered to wrong hour in s3 path

标签 hive amazon-kinesis amazon-athena amazon-kinesis-firehose

我正在使用 Kinesis Firehose 缓冲 IoT 数据,并将其写入 s3。 Firehose 以 s3://bucket.me.com/YYYY/MM/DD/HH

格式将缓冲区写入 s3

10:59a 传入的数据可能会被 Firehose 缓冲,直到 11:00a 才会写出 (s3://bucket.me.com/2017/03/09/11) .

问题是,为 Athena 创建分区时,第 10 个小时的分区不会包含第 10 个小时的所有数据,因为它位于第 11 个小时的路径中。

下面是一个更好说明的示例:

IoT 将以下数据发送到 Firehose,Firehose 在 2a 将其写入 s3://bucket.me.com/2017/03/24/02/file-0000。文件内容如下所示:

{"id":1,"dt":"2017-03-24 01:59:40"}
{"id":2,"dt":"2017-03-24 01:59:41"}
{"id":3,"dt":"2017-03-24 01:59:42"}

然后我创建一个 Athena 表:

CREATE EXTERNAL TABLE sensor_data (
    id string,
    dt timestamp)
PARTITIONED BY (year int, month int, day int, hour int)
ROW FORMAT  serde 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 's3://bucket.me.com/';

ALTER TABLE sensor_data ADD PARTITION (year=2017,month=3,day=24,hour=1) location 's3://bucket.me.com/2017/03/24/01/';
ALTER TABLE sensor_data ADD PARTITION (year=2017,month=3,day=24,hour=2) location 's3://bucket.me.com/2017/03/24/02/';

当我运行 select * fromsensor_data where hour = 1 时,我不会返回上面的 3 条记录,因为它只会从为分区 hour=1 定义的 s3 路径中读取 (这 3 条记录实际上位于 hour=2 分区中)。

如何避免这个问题?

最佳答案

你无法完全避免它,但更频繁地写作会在适当的时间内产生更准确的结果。

关于hive - Kinesis Firehose 到 s3 : data delivered to wrong hour in s3 path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42990454/

相关文章:

node.js - 使用 Node Lambda 通过 JDBC 连接到 AWS Athena 时遇到问题

amazon-kinesis - Kinesis 的多个目的地

amazon-web-services - 通过 Terraform 创建的 AWS Glue 中的无效架构错误

datediff - 雅典娜DateDiff

amazon-web-services - 如何从另一个账户访问 AWS Athena 表

amazon-web-services - Amazon Kinesis - 使用和分片时间

java - R Hive 安装问题和故障排除

java - 失败,异常 java.io.IOException :org. apache.avro.AvroTypeException : Found long, 期望在配置单元中联合

sql - 改变 hive 中的现有 map

java - 无法连接到hive server2(SQL异常、thrift传输异常等)