From 3db9e7fc51f25b81c6740f0dd78c2d57fad20817 Mon Sep 17 00:00:00 2001 From: Steffany Brown <30247553+steffnay@users.noreply.github.com> Date: Fri, 17 Jun 2022 14:11:32 -0700 Subject: [PATCH] docs(samples): add table snapshot sample (#1274) * docs(samples): add table snapshot sample * docs(samples): fix region tag --- samples/snippets/conftest.py | 15 ++++++- samples/snippets/create_table_snapshot.py | 43 +++++++++++++++++++ .../snippets/create_table_snapshot_test.py | 33 ++++++++++++++ 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 samples/snippets/create_table_snapshot.py create mode 100644 samples/snippets/create_table_snapshot_test.py diff --git a/samples/snippets/conftest.py b/samples/snippets/conftest.py index 37b52256b..f53509d44 100644 --- a/samples/snippets/conftest.py +++ b/samples/snippets/conftest.py @@ -18,7 +18,6 @@ import pytest import test_utils.prefixer - prefixer = test_utils.prefixer.Prefixer("python-bigquery", "samples/snippets") @@ -52,6 +51,20 @@ def dataset_id(bigquery_client: bigquery.Client, project_id: str) -> Iterator[st bigquery_client.delete_dataset(dataset, delete_contents=True, not_found_ok=True) +@pytest.fixture +def table_id( + bigquery_client: bigquery.Client, project_id: str, dataset_id: str +) -> Iterator[str]: + table_id = prefixer.create_prefix() + full_table_id = f"{project_id}.{dataset_id}.{table_id}" + table = bigquery.Table( + full_table_id, schema=[bigquery.SchemaField("string_col", "STRING")] + ) + bigquery_client.create_table(table) + yield full_table_id + bigquery_client.delete_table(table, not_found_ok=True) + + @pytest.fixture(scope="session") def entity_id(bigquery_client: bigquery.Client, dataset_id: str) -> str: return "cloud-developer-relations@google.com" diff --git a/samples/snippets/create_table_snapshot.py b/samples/snippets/create_table_snapshot.py new file mode 100644 index 000000000..846495e5c --- /dev/null +++ b/samples/snippets/create_table_snapshot.py @@ -0,0 +1,43 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +def create_table_snapshot(source_table_id: str, snapshot_table_id: str) -> None: + original_source_table_id = source_table_id + original_snapshot_table_id = snapshot_table_id + # [START bigquery_create_table_snapshot] + from google.cloud import bigquery + + # TODO(developer): Set table_id to the ID of the table to create. + source_table_id = "your-project.your_dataset.your_table_name" + snapshot_table_id = "your-project.your_dataset.snapshot_table_name" + # [END bigquery_create_table_snapshot] + source_table_id = original_source_table_id + snapshot_table_id = original_snapshot_table_id + # [START bigquery_create_table_snapshot] + + # Construct a BigQuery client object. + client = bigquery.Client() + copy_config = bigquery.CopyJobConfig() + copy_config.operation_type = bigquery.OperationType.SNAPSHOT + + copy_job = client.copy_table( + sources=source_table_id, + destination=snapshot_table_id, + job_config=copy_config, + ) + copy_job.result() + + print("Created table snapshot {}".format(snapshot_table_id)) + # [END bigquery_create_table_snapshot] diff --git a/samples/snippets/create_table_snapshot_test.py b/samples/snippets/create_table_snapshot_test.py new file mode 100644 index 000000000..f1d8d0f7b --- /dev/null +++ b/samples/snippets/create_table_snapshot_test.py @@ -0,0 +1,33 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import typing + +import create_table_snapshot + +if typing.TYPE_CHECKING: + import pytest + + +def test_create_table_snapshot( + capsys: "pytest.CaptureFixture[str]", + table_id: str, + random_table_id: str, +) -> None: + + create_table_snapshot.create_table_snapshot(table_id, random_table_id) + + out, _ = capsys.readouterr() + + assert "Created table snapshot {}".format(random_table_id) in out