我有一个luigi任务,该任务读取.sql文件并输出到BigQuery。

我的问题是有什么方法可以在不复制整个luigi任务的情况下以不同的.sql文件重用同一任务,即我想创建模板luigi任务的实例。

class run_sql(luigi.task):
    sql_file = 'path/to/sql/file'  # This is the only bit of code that changes
    def complete(self):
        ...
    def requires(self):
        ...
    def run(self):
        ...

最佳答案

基于@matagus的答案,您还可以使用父类的RunSqlcomplete()requires()方法对run()子类化以定义sql文件。

class RunSqlFile(RunSql):
    sql_file = '/path/to/file.sql`


或者,您可以使用@property装饰器来引用RunSql类的属性。我经常这样做是为了在父类中设置目录或其他配置数据,然后在子类中引用它们。

class RunSql(luigi.Task):
    sql_file = luigi.Parameter()

    def get_file(self, name):
        default_dir = '/path/to/sql/dir'
        return os.path.join(default_dir, name)

   def requires(self):
        ...


class RunSqlFile(RunTask):

    @property
    def sql_file(self):
        return self.get_file("query.sql")


这就像您使用--sql-file /path/to/sql/dir/query.sql实例化该类一样

关于python - 重用类似的路易吉任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51980543/

10-14 18:25
查看更多