File conversion 消防软管记录格式转换分区

File conversion 消防软管记录格式转换分区,file-conversion,amazon-kinesis-firehose,File Conversion,Amazon Kinesis Firehose,我尝试使用firehose的新功能“记录格式转换”将我的事件保存为雅典娜或蜂巢聚合的拼花文件。您必须从glue目录中选择表,但firehose会忽略已定义的分区,而是将文件保存在YYYY/MM/DD/HH/结构中。数据还缺少定义的分区列。如果它已经将其用于分区,那么这就可以了 是否有API配置或其他东西来强制使用表分区?即使使用相同的分区,我也有完全相同的问题 所以你必须使用AWS lambda来实现你想要的 将消防软管生成的文件移动到雅典娜使用的水桶中 另一个触发刷新雅典娜表,因为它不会看到新

我尝试使用firehose的新功能“记录格式转换”将我的事件保存为雅典娜或蜂巢聚合的拼花文件。您必须从glue目录中选择表,但firehose会忽略已定义的分区,而是将文件保存在YYYY/MM/DD/HH/结构中。数据还缺少定义的分区列。如果它已经将其用于分区,那么这就可以了


是否有API配置或其他东西来强制使用表分区?

即使使用相同的分区,我也有完全相同的问题

所以你必须使用AWS lambda来实现你想要的

  • 将消防软管生成的文件移动到雅典娜使用的水桶中
  • 另一个触发刷新雅典娜表,因为它不会看到新文件夹 (我没有放置所有触发器,但这应该只是一个调用“MSCK REPAIR TABLE your_TABLE_name;”)
  • 对于第一个,我选择NodeJs,因为它非常简单而且非常快速。 移动120MB文件需要约3秒,AWS允许的最小内存分配为128MB(Firehose生成的文件最多约64MB)

    节点js项目结构 package.json

    { 
      "name": "your.project", 
      "version": "1.0.0", 
      "description": "Copy generated partitioned files by Firehose to valid partitioned files for Athena", 
      "main": "index.js", 
      "dependencies": { 
        "async": "^2.6.1" 
       } 
    }
    
    和index.js

    const aws=require('aws-sdk');
    const async=require('async');
    const s3=新的aws.s3();
    const dstBucket='把你的桶放在这里';
    var util=require('util');
    exports.handler=(事件、上下文、回调)=>{
    const srcBucket=event.Records[0].s3.bucket.name;
    const srcKey=event.Records[0].s3.object.key;
    const split=srcKey.split('/');
    const dstKey=`event_year=${split[0]}/event_month=${split[1]}/event_day=${split[2]}/event_hour=${split[3]}/${split[4]};
    log(“从事件中读取选项:\n”,util.inspect(事件,{depth:10}));
    异步瀑布([
    功能副本(下一个){
    s3.copyObject({
    桶:桶,
    CopySource:`${srcBucket}/${srcKey}`,
    密钥:dstKey
    },下一页);
    },
    函数deleteOriginal(复制结果,下一个){
    s3.deleteObject({
    Bucket:srcbage,
    密钥:srcKey
    },下一页);
    }
    ],函数(err){
    如果(错误){
    console.error(`Failed:${srcBucket}/${srcKey}=>${dstBucket}/${dstKey}将FireHose分区对象移动到Athena分区对象。error:${err}`);
    }否则{
    log(`Success:${srcBucket}/${srcKey}=>${dstBucket}/${dstKey}将FireHose分区对象移动到Athena分区对象`);
    }
    回调(null,“移动成功”);
    }
    );
    };