文件被放置在云存储中时,我正在使用Cloud函数触发Airflow DAG。
它适用于.csv文件,但我的要求是,当将任何类型的文件(例如.json文件)放置到云存储中时,云功能应触发DAG。
我给了类似的配置
'use strict';
const fetch = require('node-fetch');
const FormData = require('form-data');
var config = require('./config.json');
exports.triggerGCSDag = function triggerGCSDag(data,context) {
const PROJECT_ID = config.PROJECT_ID;
const CLIENT_ID = config.CLIENT_ID;
const WEBSERVER_ID = config.WEBSERVER_ID;
const USER_AGENT =config.USER_AGENT;
const BODY = {'conf': JSON.stringify(data)};
const file = data;
const file_format=config.file_format;
const folder_array=config.folder_name;
const DAG_ARRAY=config.DAG_NAME;
.
.
.
但是只要将.json或csv文件放入云存储中,DAG不会触发。
请帮助我设置config.json文件格式csv和json,以便cf触发Airflow DAG
答案 0 :(得分:0)
您可以将事件finalize用作函数的触发器,然后可以使用触发器数据来确定上传的文件是.csv还是.json或任何其他类型的文件。您可以在Storage Triggers documentation中查看如何使用触发数据。
您可以使用此功能作为示例。
如果文件具有所需的扩展名,则此函数以“ goog”响应,如果具有任何其他扩展名,则以“ not goog”作为响应。您可以在函数的日志中找到响应。
现在,您只需要添加逻辑来触发条件内的气流。
exports.helloGCS = (data, context) => {
const file = data;
console.log(`File: ${file.name}`);
if(file.name.includes('.csv') || file.name.includes('.json')){
console.log('goog');
} else {
console.log('not goog');
}
};