使用 Athena 在 s3 中查询 AWS firehose 数据 - 无法查询批次
querying AWS firehose data in s3 with Athena - can't query batches
我正在通过 Firehose 将日志推送到 S3 存储桶。
数据的格式非常简单:
{
email: "some email",
message: "a log message",
data: "{ /* ...some json */ }"
}
我为 Athena 创建了这个 table 定义:
CREATE EXTERNAL TABLE `logs`(
`email` string COMMENT 'from deserializer',
`message` string COMMENT 'from deserializer',
`data` string COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION
's3://USERLOGS/'
TBLPROPERTIES (
'has_encrypted_data'='false',
'transient_lastDdlTime'='1583271303')
它在单个条目上运行良好,其中 s3 文件是单个 json blob,但 firehose 的工作方式是将条目分批放入 s3 中的文件中;仅查询批次中的第一个条目。
如何查询整个批次?
我有 100 个斑点,但因此只能看到 6 个。
我遇到过类似的问题。
Firehose 在 S3 中生成文件的方式是将每条记录连接到现有文件,实际上会生成无效的 JSON。意思是,如果你放两条记录:
{"key":"1", "value":"v1"}
和
{"key":"2", "value":"v2"}
它们最终会像这样被写入 S3:
{"key":"1", "value":"v1"}{"key":"2", "value":"v2"}
另一方面,Athena 希望在新行中找到每条记录。话虽这么说,我能够想出的唯一解决方法是在发送到 Firehose 的记录中插入“\n”,以便 S3 输出如下所示:
{"key":"1", "value":"v1"}
{"key":"2", "value":"v2"}
希望对您有所帮助!
我正在通过 Firehose 将日志推送到 S3 存储桶。
数据的格式非常简单:
{
email: "some email",
message: "a log message",
data: "{ /* ...some json */ }"
}
我为 Athena 创建了这个 table 定义:
CREATE EXTERNAL TABLE `logs`(
`email` string COMMENT 'from deserializer',
`message` string COMMENT 'from deserializer',
`data` string COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION
's3://USERLOGS/'
TBLPROPERTIES (
'has_encrypted_data'='false',
'transient_lastDdlTime'='1583271303')
它在单个条目上运行良好,其中 s3 文件是单个 json blob,但 firehose 的工作方式是将条目分批放入 s3 中的文件中;仅查询批次中的第一个条目。
如何查询整个批次?
我有 100 个斑点,但因此只能看到 6 个。
我遇到过类似的问题。
Firehose 在 S3 中生成文件的方式是将每条记录连接到现有文件,实际上会生成无效的 JSON。意思是,如果你放两条记录:
{"key":"1", "value":"v1"}
和
{"key":"2", "value":"v2"}
它们最终会像这样被写入 S3:
{"key":"1", "value":"v1"}{"key":"2", "value":"v2"}
另一方面,Athena 希望在新行中找到每条记录。话虽这么说,我能够想出的唯一解决方法是在发送到 Firehose 的记录中插入“\n”,以便 S3 输出如下所示:
{"key":"1", "value":"v1"}
{"key":"2", "value":"v2"}
希望对您有所帮助!