重用类似的路易吉任务

时间:2018-08-23 07:34:24

标签: python luigi

我有一个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):
        ...

2 个答案:

答案 0 :(得分:1)

只需使用a parameter来指定文件的路径。像这样:

class RunSql(luigi.task):

    sql_file = luigi.Parameter()

    def complete(self):
        ...

    def requires(self):
        ...

    def run(self):
        ...

要访问参数的值,只需在代码中使用self.sql_file

之后,您可以按照以下方式运行任务:

luigi RunSql --sql-file path/to/file.sql

答案 1 :(得分:0)

基于@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实例化该类一样