Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Support using GeoPandas for GEOGRAPHY columns #848

Merged
merged 47 commits into from Aug 24, 2021
Merged

feat: Support using GeoPandas for GEOGRAPHY columns #848

merged 47 commits into from Aug 24, 2021

Conversation

@jimfulton
Copy link
Contributor

@jimfulton jimfulton commented Aug 3, 2021

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:

  • Make sure to open an issue as a bug/issue before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea
  • Ensure the tests and linter pass
  • Code coverage does not decrease (if any source code was changed)
  • Appropriate docs were updated (if necessary)

Fixes #792
Fixes #874 馃

@snippet-bot
Copy link

@snippet-bot snippet-bot bot commented Aug 5, 2021

Here is the summary of changes.

You are about to add 2 region tags.

This comment is generated by snippet-bot.
If you find problems with this result, please file an issue at:
https://github.com/googleapis/repo-automation-bots/issues.
To update this comment, add snippet-bot:force-run label or use the checkbox below:

  • Refresh this comment

Loading

Copy link
Contributor

@tswast tswast left a comment

Some more feedback. I took a bit of a closer look at the tests this time.

Loading

docs/snippets.py Outdated
@@ -935,5 +939,25 @@ def test_list_rows_as_dataframe(client):
assert len(df) == table.num_rows # verify the number of rows


@pytest.mark.skipif(geopandas is None, reason="Requires `geopandas`")
def test_query_results_as_geodataframe(client):
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're trying to get away from adding samples to snippets.py #790

I think a file in samples/geography could be a good fit for this. Might need to add geopandas to https://github.com/googleapis/python-bigquery/blob/master/samples/geography/requirements.txt but otherwise should work.

I don't think we'll hit the same "samples test on latest release" issue that Tres mentioned today because we're actually configured to use the "head" job instead. https://github.com/googleapis/python-bigquery/blob/master/.kokoro/samples/python3.6/periodic-head.cfg

Loading

Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a symlink to the samples directory, so we should still be able to include it in the client docs the same way you're doing but with a different path.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, will do.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I ended up moving it to samples/geography.

The management of the requirements.txt there is a little confusing as it only uses released versions of google-cloud-bigquery. Hopefully, it will work out in CI. :)

I ended up adding lots of requirements.

Loading

try:
from shapely.geometry.base import BaseGeometry as _BaseGeometry
except ImportError: # pragma: NO COVER
_BaseGeometry = type(None)
else:
if pandas is not None: # pragma: NO COVER

def _to_wkb():
from shapely.geos import WKBWriter, lgeos

write = WKBWriter(lgeos).write
notnull = pandas.notnull

def _to_wkb(v):
return write(v) if notnull(v) else v

return _to_wkb

_to_wkb = _to_wkb()
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this blob of code could use some additional explanation. I'm guessing you're using the inner function to avoid having to construct a WKBWriter every time _to_wkb is called, right? Let's clarify that.

Loading

Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aside: I'm wondering if we should create an _init_module() function or something for this kind of setup code that only runs if all of our expected dependencies are installed? I suppose we might need more than one since shapely could be absent even if pandas and pyarrow are present.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

think this blob of code could use some additional explanation.

Added,

I'm guessing you're using the inner function to avoid having to construct a WKBWriter every time _to_wkb is called, right? Let's clarify that.

The main reason was to add the not-null check, but then some optimizations beckoned. :)

See the comment I added.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aside: I'm wondering if we should create an _init_module() function or something for this kind of setup code that only runs if all of our expected dependencies are installed? I suppose we might need more than one since shapely could be absent even if pandas and pyarrow are present.

What would be the advantage of adding an _init_module() function?

Loading

from shapely.geometry.base import BaseGeometry as _BaseGeometry
except ImportError: # pragma: NO COVER
_BaseGeometry = type(None)
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this for type checking? I'm having a bit of trouble understanding how it relates to the "else" block.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only relates to the else: block in that it's done of shapely isn't present. :)

in bq_to_arrow_array we need to decide what arrow type to use. Today, before this PR, we always use string for geometry, but if we have WKB data, we need to use binary. We use WKB if:

  • We have a GeoSeries, in which case we know the values are shapely.
  • We look at the first non-null value and it's a shapely object, in which case it's an instance of _BaseGeometry.
  • We look at the first non-null value and see it's bytes. If it's bytes, it can't be WKT, so we assume WKB and hope for the best.

We could use WKT with shapely objects, but WKB is more efficient.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added more comments to try to clarify.

Loading

df = bigquery_client.query(
f"select * from {dataset_id}.lake order by name"
).to_dataframe(geography_as_object=True)
assert str(df) == (
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This feels like it'd be pretty brittle. It'll break if string formatting changes. It'll also break if pandas changes its NULL indicator (which is under discussion: https://pandas.pydata.org/pandas-docs/version/1.2.1/development/roadmap.html#consistent-missing-value-handling)

It'd be a bit more work, but I'd like to see an assertion for each cell. e.g.

assert df["name"][0] == "bar"
assert df["geog"][0] == <Construct Shapely object here>
...
assert pandas.isna(df["geog"][1])

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Loading

"1 baz NaN\n"
"2 foo POINT (0 0)"
)
assert [v.__class__.__name__ for v in df["geog"]] == ["Point", "float", "Point"]
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can drop this somewhat difficult to read assertion if we have the per-cell checks I suggest above.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Loading



def test_to_dataframe_geography_as_objects(bigquery_client, dataset_id):
pytest.importorskip("shapely")
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can do shapely = pytest.importorskip("shapely") to use the shapely library in the assertions below.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Loading

"None",
"POINT (0 0)",
]
assert str(df.area) == ("0 0.5\n" "1 NaN\n" "2 0.0\n" "dtype: float64")
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Likewise here. I'm a bit concern on asserting based on the string conversion of a whole series.

The list(map(str pattern above seems less brittle, so I'm okay keeping that, though I'd prefer per-cell assertions.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Loading

"NoneType",
"Point",
]
assert df.__class__.__name__ == "GeoDataFrame"
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the reason to use this instead of isinstance?

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No particular reason. I'll change it.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Loading



def test_load_dataframe_w_wkb(bigquery_client, dataset_id):
pandas = pytest.importorskip("pandas")
Copy link
Contributor

@tswast tswast Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're already requiring pandas for all tests in this module, so I think this line is redundant.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure. I'll get rid of that.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Loading

@jimfulton jimfulton requested a review from as a code owner Aug 17, 2021
@jimfulton jimfulton requested a review from leahecole Aug 17, 2021
@jimfulton
Copy link
Contributor Author

@jimfulton jimfulton commented Aug 23, 2021

@tswast are you good with this now?

Loading

@emkornfield
Copy link

@emkornfield emkornfield commented Aug 23, 2021

General comment on approach. At least the BQ Storage API annotates Geography types with the necessary Arrow extension metadata, that could be used to create an Arrow Extension Array to handle this conversion instead.

Loading

@tswast
Copy link
Contributor

@tswast tswast commented Aug 23, 2021

Loading

@emkornfield
Copy link

@emkornfield emkornfield commented Aug 23, 2021

@emkornfield Do you mean this interface? https://arrow.apache.org/docs/python/extending_types.html

I might be misunderstanding the direction here but I was thinking of: https://arrow.apache.org/docs/python/extending_types.html#defining-extension-types-user-defined-types for getting the geography types from the Read API.

Loading

@jimfulton
Copy link
Contributor Author

@jimfulton jimfulton commented Aug 23, 2021

General comment on approach. At least the annotates Geography types with the necessary Arrow extension metadata, that could be used to create an Arrow Extension Array to handle this conversion instead.

By "BQ Storage API", do you mean the python-bigquery-storage package? I don't see this. Can you give a pointer?

One complication is that geography data can be represented as text (in WKT format) or binary (in WKB format). The Python API typically uses text, bit binary is more efficient, especially for serialization. In this PR, I'm creating binary arrow arrays when data are bytes or shapely objects and text otherwise. IOW, the arrow representation used us dependent on the data.

Loading

@jimfulton
Copy link
Contributor Author

@jimfulton jimfulton commented Aug 23, 2021

I might be misunderstanding the direction here but I was thinking of: https://arrow.apache.org/docs/python/extending_types.html#defining-extension-types-user-defined-types for getting the geography types from the Read API.

I'm probably misunderstanding you, but I'm not seeing advantage in leveraging Arrow type extensions here.

The end points of this communication are:

  1. The BQ storage servers, which would be unaware of any Arrow type extension and
  2. Geopandas, whose scalar type is ultimately shapely geometry and whose array type is numpy.

Arrow/parquet is just an intermediate format here.

If I was writing an application where I controlled all of the endpoints, I can certainly see the advantage of Arrow extension types.

But maybe I'm missing something.

Loading

@tswast
Copy link
Contributor

@tswast tswast commented Aug 23, 2021

There is a code path where we get Arrow buffers directly from the BQ Storage API backend, but indeed we're treating it as an intermediate format. There might be a performance improvement for doing the conversion from Arrow buffer to Shapely object in an Arrow extension array. I'm not sure how the vectorization works there.

Loading

@emkornfield
Copy link

@emkornfield emkornfield commented Aug 23, 2021

There is a code path where we get Arrow buffers directly from the BQ Storage API backend, but indeed we're treating it as an intermediate format. There might be a performance improvement for doing the conversion from Arrow buffer to Shapely object in an Arrow extension array. I'm not sure how the vectorization works there.

For the storage API every geography type column should already annotated with:

{
  "ARROW:extension:name": "google:sqlType:geography"
  "ARROW:extension:metadata": "{\"encoding\": \"WKT\"}"
}

So if an extension type was used, I don't there would be a need for extra parameters when converting to Pandas. If users wanted this support they could register the extension type and it should just work. I'm not 100% sure if this is a better user experience then the way things are already implemented. But I thought it would be worth calling it out.

This likely wouldn't affect performance unless there were underlying C++/Cython bindings for shapely and effort was made to use those in the extension type.

Loading

tswast
tswast approved these changes Aug 23, 2021
Copy link
Contributor

@tswast tswast left a comment

LGTM other than a small nit on the requirements.txt file.

I think this approach will work best for our targeted users, but did file #894 as a feature request so that the "extension type" API can work reliably should more advanced users choose to register extension types.

Loading

click==8.0.1
click-plugins==1.1.1
cligj==0.7.2
dataclasses==0.6
Copy link
Contributor

@tswast tswast Aug 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should add the python version exclusion here while we're at it, since we know renovate is going to try to update this to 0.8 and it'll break.

Loading

Copy link
Contributor

@tswast tswast Aug 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aside: I know this is going to give us a lot of renovate PRs. We might want to cull this down, though I think there is some benefit of having a package list like this of all the dependencies and transitive dependencies we know work together.

Loading

Copy link
Contributor Author

@jimfulton jimfulton Aug 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added the Python version qualification for dataclasses.

IMO, it's best to pin the transitive dependencies.

Shall I merge after the tests pass?

Loading

@tswast
Copy link
Contributor

@tswast tswast commented Aug 23, 2021

Added Do Not Merge, just so the requirements.txt change is addressed before merging.

Loading

@jimfulton jimfulton merged commit 16f65e6 into googleapis:master Aug 24, 2021
13 checks passed
Loading
@jimfulton jimfulton deleted the to_geodataframe branch Aug 24, 2021
tswast added a commit that referenced this issue Sep 9, 2021
* chore: protect v3.x.x branch (#816)

* chore: protect v3.x.x branch

In preparation for breaking changes.

* force pattern to be a string

* simplify branch name

* fix: no longer raise a warning in `to_dataframe` if `max_results` set (#815)

That warning should only be used when BQ Storage client is
explicitly passed in to RowIterator methods when max_results
value is also set.

* feat: Update proto definitions for bigquery/v2 to support new proto fields for BQML. (#817)

PiperOrigin-RevId: 387137741

Source-Link: googleapis/googleapis@8962c92

Source-Link: googleapis/googleapis-gen@102f1b4

* chore: release 2.23.0 (#819)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore(deps): update dependency google-cloud-bigquery to v2.23.0 (#820)

* fix: `insert_rows()` accepts float column values as strings again (#824)

* chore: release 2.23.1 (#825)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore: add second protection rule for v3 branch (#828)

* chore(deps): update dependency google-cloud-bigquery to v2.23.1 (#827)

* test: retry getting rows after streaming them in `test_insert_rows_from_dataframe` (#832)

* chore(deps): update dependency pyarrow to v5 (#834)

* chore(deps): update dependency google-cloud-bigquery-storage to v2.6.2 (#795)

* deps: expand pyarrow pins to support 5.x releases (#833)

* chore: release 2.23.2 (#835)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore(deps): update dependency google-auth-oauthlib to v0.4.5 (#839)

* chore(deps): update dependency google-cloud-bigquery to v2.23.2 (#838)

* chore(deps): update dependency google-cloud-testutils to v1 (#845)

* chore: require CODEOWNER review and up to date branches (#846)

These two lines bring the rules on this repo in line with the defaults:

https://github.com/googleapis/repo-automation-bots/blob/63c858e539e1f4d9bb8ea66e12f9c0a0de5fef55/packages/sync-repo-settings/src/required-checks.json#L40-L50

* chore: add api-bigquery as a samples owner (#852)

* fix: increase default retry deadline to 10 minutes (#859)

The backend API has a timeout of 4 minutes, so the default of 2 minutes was not
allowing for any retries to happen in some cases.

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-bigquery/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #853  馃

* process: add yoshi-python to samples CODEOWNERS (#858)

Closes #857.

* chore: release 2.23.3 (#860)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: Tim Swast <swast@google.com>

* chore(deps): update dependency google-cloud-bigquery to v2.23.3 (#866)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-bigquery](https://togithub.com/googleapis/python-bigquery) | `==2.23.2` -> `==2.23.3` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.23.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.23.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.23.3/compatibility-slim/2.23.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.23.3/confidence-slim/2.23.2)](https://docs.renovatebot.com/merge-confidence/) |

***

### Release Notes

<details>
<summary>googleapis/python-bigquery</summary>

### [`v2.23.3`](https://togithub.com/googleapis/python-bigquery/blob/master/CHANGELOG.md#鈥2233-httpswwwgithubcomgoogleapispython-bigquerycomparev2232v2233-2021-08-06)

[Compare Source](https://togithub.com/googleapis/python-bigquery/compare/v2.23.2...v2.23.3)

</details>

***

### Configuration

馃搮 **Schedule**: At any time (no schedule defined).

馃殾 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

 **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

馃敃 **Ignore**: Close this PR and you won't be reminded about this update again.

***

*   \[ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

***

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-bigquery).

* feat: add support for transaction statistics (#849)

* feat: add support for transaction statistics

* Hoist transaction_info into base job class

* Add versionadded directive to new property and class

* Include new class in docs reference

* chore(deps): update dependency google-cloud-bigquery-storage to v2.6.3 (#863)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-bigquery-storage](https://togithub.com/googleapis/python-bigquery-storage) | `==2.6.2` -> `==2.6.3` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery-storage/2.6.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery-storage/2.6.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery-storage/2.6.3/compatibility-slim/2.6.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery-storage/2.6.3/confidence-slim/2.6.2)](https://docs.renovatebot.com/merge-confidence/) |

***

### Release Notes

<details>
<summary>googleapis/python-bigquery-storage</summary>

### [`v2.6.3`](https://togithub.com/googleapis/python-bigquery-storage/blob/master/CHANGELOG.md#鈥263-httpswwwgithubcomgoogleapispython-bigquery-storagecomparev262v263-2021-08-06)

[Compare Source](https://togithub.com/googleapis/python-bigquery-storage/compare/v2.6.2...v2.6.3)

</details>

***

### Configuration

馃搮 **Schedule**: At any time (no schedule defined).

馃殾 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

 **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

馃敃 **Ignore**: Close this PR and you won't be reminded about this update again.

***

*   \[x] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

***

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-bigquery).

* chore: fix INSTALL_LIBRARY_FROM_SOURCE in noxfile.py (#869)

Source-Link: googleapis/synthtool@6252f2c
Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:50e35228649c47b6ca82aa0be3ff9eb2afce51c82b66c4a03fe4afeb5ff6c0fc

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>

* feat: make the same `Table*` instances equal to each other (#867)

* feat: make the same Table instances equal to each other

* Table equality should ignore metadata differences

* Compare instances through tableReference property

* Make Table instances hashable

* Make Table* classes interchangeable

If these classes reference the same table, they are now considered equal.

* feat: support `ScalarQueryParameterType` for `type_` argument in `ScalarQueryParameter` constructor (#850)

Follow-up to https://github.com/googleapis/python-bigquery/pull/840/files#r679880582

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-bigquery/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

* feat: retry failed query jobs in `result()` (#837)

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-bigquery/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)

Fixes #539  馃

Previously, we only retried failed API requests. Now, we retry failed jobs (according to the predicate of the `Retry` object passed to `job.result()`).

* fix: make unicode characters working well in load_table_from_json (#865)

Co-authored-by: Tim Swast <swast@google.com>
Co-authored-by: Tres Seaver <tseaver@palladion.com>

* chore: release 2.24.0 (#868)

馃 I have created a release \*beep\* \*boop\*
---
## [2.24.0](https://www.github.com/googleapis/python-bigquery/compare/v2.23.3...v2.24.0) (2021-08-11)


### Features

* add support for transaction statistics ([#849](https://www.github.com/googleapis/python-bigquery/issues/849)) ([7f7b1a8](https://www.github.com/googleapis/python-bigquery/commit/7f7b1a808d50558772a0deb534ca654da65d629e))
* make the same `Table*` instances equal to each other ([#867](https://www.github.com/googleapis/python-bigquery/issues/867)) ([c1a3d44](https://www.github.com/googleapis/python-bigquery/commit/c1a3d4435739a21d25aa154145e36d3a7c42eeb6))
* retry failed query jobs in `result()` ([#837](https://www.github.com/googleapis/python-bigquery/issues/837)) ([519d99c](https://www.github.com/googleapis/python-bigquery/commit/519d99c20e7d1101f76981f3de036fdf3c7a4ecc))
* support `ScalarQueryParameterType` for `type_` argument in `ScalarQueryParameter` constructor ([#850](https://www.github.com/googleapis/python-bigquery/issues/850)) ([93d15e2](https://www.github.com/googleapis/python-bigquery/commit/93d15e2e5405c2cc6d158c4e5737361344193dbc))


### Bug Fixes

* make unicode characters working well in load_table_from_json ([#865](https://www.github.com/googleapis/python-bigquery/issues/865)) ([ad9c802](https://www.github.com/googleapis/python-bigquery/commit/ad9c8026f0e667f13dd754279f9dc40d06f4fa78))
---


This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).

* chore(deps): update dependency google-cloud-bigquery to v2.24.0 (#873)

* test: refactor `list_rows` tests and add test for scalars (#829)

* test: refactor `list_rows` tests and add test for scalars

* fix JSON formatting

* add TODO for INTERVAL Arrow support

* format tests

* chore: drop mention of Python 2.7 from templates (#877)

Source-Link: googleapis/synthtool@facee4c
Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:9743664022bd63a8084be67f144898314c7ca12f0a03e422ac17c733c129d803

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>

* fix: remove pytz dependency and require pyarrow>=3.0.0 (#875)

* fix: remove pytz dependency

* 馃 Updates from OwlBot

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* fix(deps): require pyarrow>=3.0.0

* remove version check for pyarrow

* require pyarrow 3.0 in pandas extra

* remove _BIGNUMERIC_SUPPORT references from tests

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Co-authored-by: Dina Graves Portman <dinagraves@google.com>
Co-authored-by: Tim Swast <swast@google.com>

* chore: release 2.24.1 (#879)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore(deps): update dependency google-cloud-bigquery to v2.24.1 (#887)

* feat: Support using GeoPandas for GEOGRAPHY columns (#848)

* test: Add test of datetime and time pandas load (#895)

* chore: release 2.25.0 (#898)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: Jim Fulton <jim@jimfulton.info>

* chore(deps): update dependency numpy to v1.21.2 (#899)

* chore(deps): update dependency numpy to v1.21.2

* Update samples/geography/requirements.txt

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore(deps): update dependency google-cloud-core to v2 (#904)

* fix: use REST API in cell magic when requested (#892)

Fixes #876.

The `--use_rest_api` option did not work as expected and this commit fixes it.

**PR checklist:**
- [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-bigquery/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)

* fix: populate default `timeout` and retry after client-side timeout (#896)

This addresses internal issue 195337762 where sometimes query job creation can
take longer than expected and retrying the API call can be faster than waiting
for the first query job request to fail.

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-bigquery/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)

Fixes #889
Towards #779

 馃

* chore(deps): update dependency google-cloud-bigquery to v2.25.0 (#907)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-bigquery](https://togithub.com/googleapis/python-bigquery) | `==2.24.1` -> `==2.25.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.25.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.25.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.25.0/compatibility-slim/2.24.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.25.0/confidence-slim/2.24.1)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/python-bigquery</summary>

### [`v2.25.0`](https://togithub.com/googleapis/python-bigquery/blob/master/CHANGELOG.md#&#8203;2250-httpswwwgithubcomgoogleapispython-bigquerycomparev2241v2250-2021-08-24)

[Compare Source](https://togithub.com/googleapis/python-bigquery/compare/v2.24.1...v2.25.0)

##### Features

-   Support using GeoPandas for GEOGRAPHY columns ([#&#8203;848](https://www.togithub.com/googleapis/python-bigquery/issues/848)) ([16f65e6](https://www.github.com/googleapis/python-bigquery/commit/16f65e6ae15979217ceea6c6d398c9057a363a13))

##### [2.24.1](https://www.github.com/googleapis/python-bigquery/compare/v2.24.0...v2.24.1) (2021-08-13)

##### Bug Fixes

-   remove pytz dependency and require pyarrow>=3.0.0 ([#&#8203;875](https://www.togithub.com/googleapis/python-bigquery/issues/875)) ([2cb3563](https://www.github.com/googleapis/python-bigquery/commit/2cb3563ee863edef7eaf5d04d739bcfe7bc6438e))

</details>

---

### Configuration

馃搮 **Schedule**: At any time (no schedule defined).

馃殾 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

 **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

馃敃 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-bigquery).

* chore(deps): update dependency pandas to v1.3.2 (#900)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [pandas](https://pandas.pydata.org) ([source](https://togithub.com/pandas-dev/pandas)) | `==1.1.5` -> `==1.3.2` | [![age](https://badges.renovateapi.com/packages/pypi/pandas/1.3.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/pandas/1.3.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/pandas/1.3.2/compatibility-slim/1.1.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/pandas/1.3.2/confidence-slim/1.1.5)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>pandas-dev/pandas</summary>

### [`v1.3.2`](https://togithub.com/pandas-dev/pandas/releases/v1.3.2)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.3.1...v1.3.2)

This is a patch release in the 1.3.x series and includes some regression fixes and bug fixes. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.3.2/whatsnew/v1.3.2.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

### [`v1.3.1`](https://togithub.com/pandas-dev/pandas/releases/v1.3.1)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.3.0...v1.3.1)

This is the first patch release in the 1.3.x series and includes some regression fixes and bug fixes. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.3.1/whatsnew/v1.3.1.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

### [`v1.3.0`](https://togithub.com/pandas-dev/pandas/releases/v1.3.0)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.2.5...v1.3.0)

This release includes some new features, bug fixes, and performance improvements. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.3.0/whatsnew/v1.3.0.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install -c conda-forge pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

### [`v1.2.5`](https://togithub.com/pandas-dev/pandas/releases/v1.2.5)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.2.4...v1.2.5)

This is a patch release in the 1.2.x series and includes some regression fixes. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.2.5/whatsnew/v1.2.5.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

### [`v1.2.4`](https://togithub.com/pandas-dev/pandas/releases/v1.2.4)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.2.3...v1.2.4)

This is a patch release in the 1.2.x series and includes some regression fixes. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.2.4/whatsnew/v1.2.4.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

### [`v1.2.3`](https://togithub.com/pandas-dev/pandas/releases/v1.2.3)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.2.2...v1.2.3)

This is a patch release in the 1.2.x series and includes some regression fixes. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.2.3/whatsnew/v1.2.3.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

### [`v1.2.2`](https://togithub.com/pandas-dev/pandas/releases/v1.2.2)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.2.1...v1.2.2)

This is a patch release in the 1.2.x series and includes some regression fixes
and bug fixes. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.2.2/whatsnew/v1.2.2.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

### [`v1.2.1`](https://togithub.com/pandas-dev/pandas/releases/v1.2.1)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.2.0...v1.2.1)

This is the first patch release in the 1.2.x series and includes some regression fixes
and bug fixes. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.2.1/whatsnew/v1.2.1.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

### [`v1.2.0`](https://togithub.com/pandas-dev/pandas/releases/v1.2.0)

[Compare Source](https://togithub.com/pandas-dev/pandas/compare/v1.1.5...v1.2.0)

This release includes some new features, bug fixes, and performance improvements. We recommend that all users upgrade to this version.

See the [full whatsnew](https://pandas.pydata.org/pandas-docs/version/1.2.0/whatsnew/v1.2.0.html) for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

    conda install -c conda-forge pandas

Or via PyPI:

    python3 -m pip install --upgrade pandas

Please report any issues with the release on the [pandas issue tracker](https://togithub.com/pandas-dev/pandas/issues).

</details>

---

### Configuration

馃搮 **Schedule**: At any time (no schedule defined).

馃殾 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

 **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found.

馃敃 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-bigquery).

* chore: group all renovate PRs together (#911)

This excludes `renovate.json` from templated updates. If this works well, we
can update the core templates (perhaps with a configuration option to
`py_library`).

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-bigquery/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 馃

* chore: release 2.25.1 (#912)

馃 I have created a release \*beep\* \*boop\*
---
### [2.25.1](https://www.github.com/googleapis/python-bigquery/compare/v2.25.0...v2.25.1) (2021-08-25)


### Bug Fixes

* populate default `timeout` and retry after client-side timeout ([#896](https://www.github.com/googleapis/python-bigquery/issues/896)) ([b508809](https://www.github.com/googleapis/python-bigquery/commit/b508809c0f887575274309a463e763c56ddd017d))
* use REST API in cell magic when requested ([#892](https://www.github.com/googleapis/python-bigquery/issues/892)) ([1cb3e55](https://www.github.com/googleapis/python-bigquery/commit/1cb3e55253e824e3a1da5201f6ec09065fb6b627))
---


This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).

* docs: update docstring for bigquery_create_routine sample (#883) (#917)

Fixed language issues.

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-bigquery/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 馃

Co-authored-by: pallabiwrites <87546424+pallabiwrites@users.noreply.github.com>

* chore: migrate default branch to main (#910)

* chore: migrate default branch to main

* 馃 Updates from OwlBot

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* Add owlbot replacements to persist changes

* Manually apply new replacements from owlbot.py

* Move temp replacement rules after s.move()

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>

* chore: invalid docstrings broke docfx (#924)

* chore(deps): update all dependencies (#914)

* chore(deps): update all dependencies

* Python version modifiers for pyproj

Co-authored-by: Tim Swast <swast@google.com>

* fix: error inserting DataFrame with REPEATED field (#925)

Co-authored-by: Tim Swast <swast@google.com>

* chore(deps): update all dependencies (#926)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-bigquery](https://togithub.com/googleapis/python-bigquery) | `==2.25.0` -> `==2.25.1` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.25.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.25.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.25.1/compatibility-slim/2.25.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery/2.25.1/confidence-slim/2.25.0)](https://docs.renovatebot.com/merge-confidence/) |
| [google-cloud-testutils](https://togithub.com/googleapis/python-test-utils) | `==1.0.0` -> `==1.1.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-testutils/1.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-testutils/1.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-testutils/1.1.0/compatibility-slim/1.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-testutils/1.1.0/confidence-slim/1.0.0)](https://docs.renovatebot.com/merge-confidence/) |
| [google-crc32c](https://togithub.com/googleapis/python-crc32c) | `==1.1.2` -> `==1.1.3` | [![age](https://badges.renovateapi.com/packages/pypi/google-crc32c/1.1.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-crc32c/1.1.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-crc32c/1.1.3/compatibility-slim/1.1.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-crc32c/1.1.3/confidence-slim/1.1.2)](https://docs.renovatebot.com/merge-confidence/) |
| [importlib-metadata](https://togithub.com/python/importlib_metadata) | `==4.6.4` -> `==4.8.1` | [![age](https://badges.renovateapi.com/packages/pypi/importlib-metadata/4.8.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/importlib-metadata/4.8.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/importlib-metadata/4.8.1/compatibility-slim/4.6.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/importlib-metadata/4.8.1/confidence-slim/4.6.4)](https://docs.renovatebot.com/merge-confidence/) |
| [pytest](https://docs.pytest.org/en/latest/) ([source](https://togithub.com/pytest-dev/pytest), [changelog](https://docs.pytest.org/en/stable/changelog.html)) | `==6.2.4` -> `==6.2.5` | [![age](https://badges.renovateapi.com/packages/pypi/pytest/6.2.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/pytest/6.2.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/pytest/6.2.5/compatibility-slim/6.2.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/pytest/6.2.5/confidence-slim/6.2.4)](https://docs.renovatebot.com/merge-confidence/) |
| [typing-extensions](https://togithub.com/python/typing) | `==3.10.0.0` -> `==3.10.0.2` | [![age](https://badges.renovateapi.com/packages/pypi/typing-extensions/3.10.0.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/typing-extensions/3.10.0.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/typing-extensions/3.10.0.2/compatibility-slim/3.10.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/typing-extensions/3.10.0.2/confidence-slim/3.10.0.0)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/python-bigquery</summary>

### [`v2.25.1`](https://togithub.com/googleapis/python-bigquery/blob/master/CHANGELOG.md#&#8203;2251-httpswwwgithubcomgoogleapispython-bigquerycomparev2250v2251-2021-08-25)

[Compare Source](https://togithub.com/googleapis/python-bigquery/compare/v2.25.0...v2.25.1)

</details>

<details>
<summary>googleapis/python-test-utils</summary>

### [`v1.1.0`](https://togithub.com/googleapis/python-test-utils/compare/v1.0.0...v1.1.0)

[Compare Source](https://togithub.com/googleapis/python-test-utils/compare/v1.0.0...v1.1.0)

</details>

<details>
<summary>googleapis/python-crc32c</summary>

### [`v1.1.3`](https://togithub.com/googleapis/python-crc32c/blob/master/CHANGELOG.md#&#8203;113-httpswwwgithubcomgoogleapispython-crc32ccomparev112v113-2021-08-30)

[Compare Source](https://togithub.com/googleapis/python-crc32c/compare/v1.1.2...v1.1.3)

</details>

<details>
<summary>python/importlib_metadata</summary>

### [`v4.8.1`](https://togithub.com/python/importlib_metadata/blob/master/CHANGES.rst#v481)

[Compare Source](https://togithub.com/python/importlib_metadata/compare/v4.8.0...v4.8.1)

\======

-   [#&#8203;348](https://togithub.com/python/importlib_metadata/issues/348): Restored support for `EntryPoint` access by item,
    deprecating support in the process. Users are advised
    to use direct member access instead of item-based access::

    -   ep\[0] -> ep.name
    -   ep\[1] -> ep.value
    -   ep\[2] -> ep.group
    -   ep\[:] -> ep.name, ep.value, ep.group

### [`v4.8.0`](https://togithub.com/python/importlib_metadata/blob/master/CHANGES.rst#v480)

[Compare Source](https://togithub.com/python/importlib_metadata/compare/v4.7.1...v4.8.0)

\======

-   [#&#8203;337](https://togithub.com/python/importlib_metadata/issues/337): Rewrote `EntryPoint` as a simple class, still
    immutable and still with the attributes, but without any
    expectation for `namedtuple` functionality such as
    `_asdict`.

### [`v4.7.1`](https://togithub.com/python/importlib_metadata/blob/master/CHANGES.rst#v471)

[Compare Source](https://togithub.com/python/importlib_metadata/compare/v4.7.0...v4.7.1)

\======

-   [#&#8203;344](https://togithub.com/python/importlib_metadata/issues/344): Fixed regression in `packages_distributions` when
    neither top-level.txt nor a files manifest is present.

### [`v4.7.0`](https://togithub.com/python/importlib_metadata/blob/master/CHANGES.rst#v470)

[Compare Source](https://togithub.com/python/importlib_metadata/compare/v4.6.4...v4.7.0)

\======

-   [#&#8203;330](https://togithub.com/python/importlib_metadata/issues/330): In `packages_distributions`, now infer top-level
    names from `.files()` when a `top-level.txt`
    (Setuptools-specific metadata) is not present.

</details>

<details>
<summary>pytest-dev/pytest</summary>

### [`v6.2.5`](https://togithub.com/pytest-dev/pytest/compare/6.2.4...6.2.5)

[Compare Source](https://togithub.com/pytest-dev/pytest/compare/6.2.4...6.2.5)

</details>

<details>
<summary>python/typing</summary>

### [`v3.10.0.2`](https://togithub.com/python/typing/compare/3.10.0.1...3.10.0.2)

[Compare Source](https://togithub.com/python/typing/compare/3.10.0.1...3.10.0.2)

### [`v3.10.0.1`](https://togithub.com/python/typing/compare/3.10.0.0...3.10.0.1)

[Compare Source](https://togithub.com/python/typing/compare/3.10.0.0...3.10.0.1)

</details>

---

### Configuration

馃搮 **Schedule**: At any time (no schedule defined).

馃殾 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

 **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

馃懟 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-bigquery).

* fix: underscores weren't allowed in struct field names when passing parameters to the DB API (#930)

* chore: release 2.25.2 (#916)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore(deps): update all dependencies (#928)

* fix: guard imports against unsupported pyarrow versions (#934)

* fix: guard imports against unsupported pyarrow versions

* add unit tests

* fix pytype

* second try at fixing pytype

* feat: set the X-Server-Timeout header when timeout is set (#927)

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-bigquery/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)

Fixes #919 馃

* chore: release 2.26.0 (#937)

馃 I have created a release \*beep\* \*boop\*
---
## [2.26.0](https://www.github.com/googleapis/python-bigquery/compare/v2.25.2...v2.26.0) (2021-09-01)


### Features

* set the X-Server-Timeout header when timeout is set ([#927](https://www.github.com/googleapis/python-bigquery/issues/927)) ([ba02f24](https://www.github.com/googleapis/python-bigquery/commit/ba02f248ba9c449c34859579a4011f4bfd2f4a93))


### Bug Fixes

* guard imports against unsupported pyarrow versions ([#934](https://www.github.com/googleapis/python-bigquery/issues/934)) ([b289076](https://www.github.com/googleapis/python-bigquery/commit/b28907693bbe889becc1b9c8963f0a7e1ee6c35a))
---


This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).

* chore(deps): update dependency google-cloud-bigquery to v2.26.0 (#938)

* chore: update system tests and samples to use and @google.com email address (#942)

* chore: update system tests and samples to use and @google.com email address

* Add group prefix

* fixed access entry some more

* chore(python): rename default branch to main (#935)

Source-Link: googleapis/synthtool@5c0fa62
Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:0ffe3bdd6c7159692df5f7744da74e5ef19966288a6bf76023e8e04e0c424d7d

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Co-authored-by: Tim Swast <swast@google.com>
Co-authored-by: Peter Lamut <plamut@users.noreply.github.com>
Co-authored-by: Anthonios Partheniou <partheniou@google.com>

* chore: Reduce duplicated code betweem tests/unit and tests/unit/job (#940)

* chore: Reduce duplicated code betweem tests/unit and tests/unit/job

* reuse parent make_client

* test: fix routine DDL sample test exits too early (#932)

Co-authored-by: Tres Seaver <tseaver@palladion.com>
Co-authored-by: Tim Swast <swast@google.com>

* chore(deps): update all dependencies (#939)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-bigquery-storage](https://togithub.com/googleapis/python-bigquery-storage) | `==2.6.3` -> `==2.7.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery-storage/2.7.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery-storage/2.7.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery-storage/2.7.0/compatibility-slim/2.6.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-bigquery-storage/2.7.0/confidence-slim/2.6.3)](https://docs.renovatebot.com/merge-confidence/) |
| [google-crc32c](https://togithub.com/googleapis/python-crc32c) | `==1.1.3` -> `==1.1.4` | [![age](https://badges.renovateapi.com/packages/pypi/google-crc32c/1.1.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-crc32c/1.1.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-crc32c/1.1.4/compatibility-slim/1.1.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-crc32c/1.1.4/confidence-slim/1.1.3)](https://docs.renovatebot.com/merge-confidence/) |
| [google-resumable-media](https://togithub.com/googleapis/google-resumable-media-python) | `==2.0.1` -> `==2.0.2` | [![age](https://badges.renovateapi.com/packages/pypi/google-resumable-media/2.0.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-resumable-media/2.0.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-resumable-media/2.0.2/compatibility-slim/2.0.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-resumable-media/2.0.2/confidence-slim/2.0.1)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/python-bigquery-storage</summary>

### [`v2.7.0`](https://togithub.com/googleapis/python-bigquery-storage/blob/master/CHANGELOG.md#&#8203;270-httpswwwgithubcomgoogleapispython-bigquery-storagecomparev263v270-2021-09-02)

[Compare Source](https://togithub.com/googleapis/python-bigquery-storage/compare/v2.6.3...v2.7.0)

##### Features

-   **v1beta2:** Align ReadRows timeout with other versions of the API ([#&#8203;293](https://www.togithub.com/googleapis/python-bigquery-storage/issues/293)) ([43e36a1](https://www.github.com/googleapis/python-bigquery-storage/commit/43e36a13ece8d876763d88bad0252a1b2421c52a))

##### Documentation

-   **v1beta2:** Align session length with public documentation ([43e36a1](https://www.github.com/googleapis/python-bigquery-storage/commit/43e36a13ece8d876763d88bad0252a1b2421c52a))

##### [2.6.3](https://www.github.com/googleapis/python-bigquery-storage/compare/v2.6.2...v2.6.3) (2021-08-06)

##### Bug Fixes

-   resume read stream on `Unknown` transport-layer exception ([#&#8203;263](https://www.togithub.com/googleapis/python-bigquery-storage/issues/263)) ([127caa0](https://www.github.com/googleapis/python-bigquery-storage/commit/127caa06144b9cec04b23914b561be6a264bcb36))

##### [2.6.2](https://www.github.com/googleapis/python-bigquery-storage/compare/v2.6.1...v2.6.2) (2021-07-28)

##### Bug Fixes

-   enable self signed jwt for grpc ([#&#8203;249](https://www.togithub.com/googleapis/python-bigquery-storage/issues/249)) ([a7e8d91](https://www.github.com/googleapis/python-bigquery-storage/commit/a7e8d913fc3de67a3f38ecbd35af2f9d1a33aa8d))

##### Documentation

-   remove duplicate code samples ([#&#8203;246](https://www.togithub.com/googleapis/python-bigquery-storage/issues/246)) ([303f273](https://www.github.com/googleapis/python-bigquery-storage/commit/303f2732ced38e491df92e965dd37bac24a61d2f))
-   add Samples section to CONTRIBUTING.rst ([#&#8203;241](https://www.togithub.com/googleapis/python-bigquery-storage/issues/241)) ([5d02358](https://www.github.com/googleapis/python-bigquery-storage/commit/5d02358fbd397cafcc1169d829859fe2dd568645))

##### [2.6.1](https://www.github.com/googleapis/python-bigquery-storage/compare/v2.6.0...v2.6.1) (2021-07-20)

##### Bug Fixes

-   **deps:** pin 'google-{api,cloud}-core', 'google-auth' to allow 2.x versions ([#&#8203;240](https://www.togithub.com/googleapis/python-bigquery-storage/issues/240)) ([8f848e1](https://www.github.com/googleapis/python-bigquery-storage/commit/8f848e18379085160492cdd2d12dc8de50a46c8e))

##### Documentation

-   pandas DataFrame samples are more standalone ([#&#8203;224](https://www.togithub.com/googleapis/python-bigquery-storage/issues/224)) ([4026997](https://www.github.com/googleapis/python-bigquery-storage/commit/4026997d7a286b63ed2b969c0bd49de59635326d))

</details>

<details>
<summary>googleapis/python-crc32c</summary>

### [`v1.1.4`](https://togithub.com/googleapis/python-crc32c/blob/master/CHANGELOG.md#&#8203;114-httpswwwgithubcomgoogleapispython-crc32ccomparev114v114-2021-09-02)

[Compare Source](https://togithub.com/googleapis/python-crc32c/compare/v1.1.3...v1.1.4)

</details>

<details>
<summary>googleapis/google-resumable-media-python</summary>

### [`v2.0.2`](https://togithub.com/googleapis/google-resumable-media-python/blob/master/CHANGELOG.md#&#8203;202-httpswwwgithubcomgoogleapisgoogle-resumable-media-pythoncomparev201v202-2021-09-02)

[Compare Source](https://togithub.com/googleapis/google-resumable-media-python/compare/v2.0.1...v2.0.2)

</details>

---

### Configuration

馃搮 **Schedule**: At any time (no schedule defined).

馃殾 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

 **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found.

馃懟 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/python-bigquery).

* Remove unneeded file

* Remove unneeded legacy pyarrow import in noxfile

Co-authored-by: Tim Swast <swast@google.com>
Co-authored-by: gcf-owl-bot[bot] <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: WhiteSource Renovate <bot@renovateapp.com>
Co-authored-by: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com>
Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Co-authored-by: Jim Fulton <jim@jimfulton.info>
Co-authored-by: Grimmer <grimmer0125@gmail.com>
Co-authored-by: Tres Seaver <tseaver@palladion.com>
Co-authored-by: Dina Graves Portman <dinagraves@google.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: pallabiwrites <87546424+pallabiwrites@users.noreply.github.com>
Co-authored-by: Anthonios Partheniou <partheniou@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

3 participants