def arrow_list_type_to_bigquery(
    name, type_, default_type="STRING"
) -> Optional[schema.SchemaField]:
    """Infers the BigQuery schema field type from an arrow list type.

    Args:
        name (str):
            Name of the column/field.
        type_:
            A pyarrow type object.

    Returns:
        Optional[schema.SchemaField]:
            The schema field, or None if a type cannot be inferred, such as if
            it is a type that doesn't have a clear mapping in BigQuery.

            null() are assumed to be the ``default_type``, since there are no
            values that contradict that.
    """
    inner_field = arrow_type_to_bigquery_field(
        name, type_.value_type, default_type=default_type
    )

    # If this is None, it means we got some type that we can't cleanly map to
    # a BigQuery type, so bubble that status up.
    if inner_field is None:
        return None

    return schema.SchemaField(
        name, inner_field.field_type, mode="REPEATED", fields=inner_field.fields
    )
Infers the BigQuery schema field type from an arrow list type.

    Args:
        name (str):
            Name of the column/field.
        type_:
            A pyarrow type object.

    Returns:
        Optional[schema.SchemaField]:
            The schema field, or None if a type cannot be inferred, such as if
            it is a type that doesn't have a clear mapping in BigQuery.

            null() are assumed to be the ``default_type``, since there are no
            values that contradict that.
    
pandas_gbq/schema/pyarrow_to_bigquery.py