def get_dataframes_that_contain_columns(broker_instance, asset, set_of_columns):
    """
    Get DataFrames IDs for every column (str) in 'set_of_columns'.

    :param broker_instance: (DataSource) connection to broker / database
    :param asset: (str) Asset Name
    :param set_of_columns: (set of str) names of columns to be selected across multiple DataFrames

    :return: dictionary of lists where key is the name of the storage file and the relevant column it contains
    :rtype: dict of lists
    """
    # Get a DataFrame with all columns by key
    dict_of_columns = broker_instance.get_dict_of_file_columns(asset)

    # Instantiates new dict
    selected_keys = {}

    # For each possible key checks if it contains one of the columns in 'list_of_columns'
    for key in dict_of_columns.keys():

        # Find if there is an intersection between the selected columns and the actual columns in the file
        set_intersect = set_of_columns.intersection(dict_of_columns[key])

        # If there are columns that intersect, pickle_state it to output according to key in 'dict_of_columns'
        if len(set_intersect) > 0:
            selected_keys[key] = set_intersect

    # Returns a dict of sets that contain intersecting values
    return selected_keys