用Python计划Google云数据流作业

用Python计划Google云数据流作业,python,google-cloud-dataflow,Python,Google Cloud Dataflow,目前,我知道,这些是计划数据流作业执行的方法: 使用应用程序引擎Cron服务或云功能 这就是Java,有没有官方的Python示例这么简单 Python就是这样,但我不确定当前是一个好的选择还是“不推荐” 来自计算引擎中的cron作业 有这方面的教程吗 在流式管道中使用窗口 我认为这是最简单的,但是,总成本是最好的想法吗 云彩 这是有效的方法吗 有多种方法,但我认为对您来说非常方便的一种方法是使用Apache Airflow GCP以的形式为Apache Airflow提供托管

目前,我知道,这些是计划数据流作业执行的方法:

  • 使用应用程序引擎Cron服务或云功能

    • 这就是Java,有没有官方的Python示例这么简单
    • Python就是这样,但我不确定当前是一个好的选择还是“不推荐”
  • 来自计算引擎中的cron作业

    • 有这方面的教程吗
  • 在流式管道中使用窗口

    • 我认为这是最简单的,但是,总成本是最好的想法吗
  • 云彩

    • 这是有效的方法吗

    • 有多种方法,但我认为对您来说非常方便的一种方法是使用Apache Airflow


      GCP以的形式为Apache Airflow提供托管服务,您可以使用该服务计划数据流管道或其他GCP操作。

      我使用App Engine Flex作为数据流启动器。这个微服务有端点,可以根据需要启动数据流作业,cron也可以这样做

      这是我的项目结构:

      df_tasks/
      - __init__.py
      - datastore_to_csv.py
      - ...other_piplines
      __init__.py
      dflaunch.yaml
      main.py
      setup.py <-- used by pipelines
      
      我的管道在
      df_tasks
      中配置,然后如下所示:

      pipeline_options = PipelineOptions.from_dictionary({
              'project': project,
              'runner': 'DataflowRunner',
              'staging_location': bucket_path+'/staging',
              'temp_location': bucket_path+'/temp',
              'setup_file': './setup.py'
          })
      
      然后在main.py中:

      from df_tasks import datastore_to_csv
      
      project_id = os.environ['GCLOUD_PROJECT']
      
      @app.route('/datastore-to-csv', methods=['POST'])
      def df_day_summary():
          # Extract Payload
              payload = request.get_json()
              model = payload['model']
              for_date = datetime.datetime.strptime(payload['for_date'], '%Y/%m/%d')
          except Exception as e:
              print traceback.format_exc()
              return traceback.format_exc()
          # launch the job
          try:
              job_id, job_name = datastore_to_csv.run(
                  project=project_id,
                  model=model,
                  for_date=for_date,
              )
              # return the job id
              return jsonify({'jobId': job_id, 'jobName': job_name})
          except Exception as e:
              print traceback.format_exc()
              return traceback.format_exc()
      

      我发现了,但我很想知道如何用python编写云函数。据我所知,最“最新”的方法是使用气流,因为如果您的作业失败,气流可以继续工作
      from df_tasks import datastore_to_csv
      
      project_id = os.environ['GCLOUD_PROJECT']
      
      @app.route('/datastore-to-csv', methods=['POST'])
      def df_day_summary():
          # Extract Payload
              payload = request.get_json()
              model = payload['model']
              for_date = datetime.datetime.strptime(payload['for_date'], '%Y/%m/%d')
          except Exception as e:
              print traceback.format_exc()
              return traceback.format_exc()
          # launch the job
          try:
              job_id, job_name = datastore_to_csv.run(
                  project=project_id,
                  model=model,
                  for_date=for_date,
              )
              # return the job id
              return jsonify({'jobId': job_id, 'jobName': job_name})
          except Exception as e:
              print traceback.format_exc()
              return traceback.format_exc()