def METHOD_NAME(workflow_id: str, dataset: str, filename: str = None,
                        gcs_bucket: str = None, url: str = None,
                        demographic: str = None,
                        geographic: str = None,
                        year: str = None) -> dict:
    """Creates the payload object required for the BQ ingestion operator.
    workflow_id: ID of the datasource workflow. Should match ID defined in
                 DATA_SOURCES_DICT.
    dataset: Name of the BQ dataset to write the data to.
    filename: Name of gcs file to get the data from. May also be a
              comma-separated list of files.
    gcs_bucket: GCS bucket to read from. Defaults to the GCS_LANDING_BUCKET env
                var.
    url: The URL used for ingestion. This should be deprecated in favor of
         writing any metadata to GCS during the GCS step. It's temporarily
         necessary since ACS directly requests metadata during BQ upload.
    demographic: The demographic breakdown type to generate the bq pipeline for.
                 Either `race`/`race_and_ethnicity`, `sex` or `age`.
    geographic: The geographic level to generate the bq pipeline for.
                 Either `national`, `state` or `county`.
    year: string 4 digit year that determines which year should be processed
        """
    message = get_required_attrs(workflow_id, gcs_bucket=gcs_bucket)
    message['dataset'] = dataset
    if filename is not None:
        message['filename'] = filename
    if url is not None:
        message['url'] = url
    if demographic is not None:
        message['demographic'] = demographic
    if geographic is not None:
        message['geographic'] = geographic
    if year is not None:
        message['year'] = year
    return {'message': message}