From 2946eff67fe3f56a5bc1141c33340fdd7ae6781e Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Fri, 4 Apr 2025 15:40:21 +0000 Subject: [PATCH 01/16] feat: add sample for pre-split feature --- samples/samples/snippets.py | 72 ++++++++++++++++++++++++++++++++ samples/samples/snippets_test.py | 6 +++ 2 files changed, 78 insertions(+) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 6650ebe88d..61fb636b0d 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3508,6 +3508,72 @@ def query_data_with_proto_types_parameter(instance_id, database_id): ) # [END spanner_query_with_proto_types_parameter] +# [START spanner_database_add_split_points] +def add_split_points(instance_id, database_id): + """Adds split points to table and index.""" + + from google.cloud.spanner_admin_database_v1.types import spanner_database_admin + + spanner_client = spanner.Client() + database_admin_api = spanner_client.database_admin_api + + request = spanner_database_admin.UpdateDatabaseDdlRequest( + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), + statements=["CREATE INDEX IF NOT EXISTS SingersByFirstLastName ON Singers(FirstName, LastName)"], + ) + + operation = database_admin_api.update_database_ddl(request) + + print("Waiting for operation to complete...") + operation.result(OPERATION_TIMEOUT_SECONDS) + + print("Added the SingersByFirstLastName index.") + + addSplitPointRequest = spanner_database_admin.addSplitPointRequest( + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), + # Table split + # Index split without table key part + # Index split with table key part + split_points=[ + spanner_database_admin.SplitPoints( + table="Singers" + keys=[ + spanner_database_admin.SplitPoints.Key( + key_parts=struct_pb2.ListValue("42") + ) + ] + ), + spanner_database_admin.SplitPoints( + index="SingersByFirstLastName" + keys=[ + spanner_database_admin.SplitPoints.Key( + key_parts=struct_pb2.ListValue("John","Doe") + ) + ] + ), + spanner_database_admin.SplitPoints( + index="SingersByFirstLastName" + keys=[ + spanner_database_admin.SplitPoints.Key( + key_parts=struct_pb2.ListValue("38") + ), + spanner_database_admin.SplitPoints.Key( + key_parts=struct_pb2.ListValue("Jane","Doe") + ) + ] + ), + + ] + ) + + operation = database_admin_api.add_split_points(request) + + print("Added split points.") +# [END spanner_database_add_split_points] if __name__ == "__main__": # noqa: C901 parser = argparse.ArgumentParser( @@ -3666,6 +3732,10 @@ def query_data_with_proto_types_parameter(instance_id, database_id): "query_data_with_proto_types_parameter", help=query_data_with_proto_types_parameter.__doc__, ) + subparsers.add_parser( + "add_split_points", + help=add_split_points.__doc__, + ) args = parser.parse_args() @@ -3815,3 +3885,5 @@ def query_data_with_proto_types_parameter(instance_id, database_id): update_data_with_proto_types_with_dml(args.instance_id, args.database_id) elif args.command == "query_data_with_proto_types_parameter": query_data_with_proto_types_parameter(args.instance_id, args.database_id) + elif args.command == "add_split_points": + add_split_points(args.instance_id, args.database_id) diff --git a/samples/samples/snippets_test.py b/samples/samples/snippets_test.py index 87fa7a43a2..a3cdb7f1e6 100644 --- a/samples/samples/snippets_test.py +++ b/samples/samples/snippets_test.py @@ -1009,3 +1009,9 @@ def test_query_data_with_proto_types_parameter( ) out, _ = capsys.readouterr() assert "SingerId: 2, SingerInfo: singer_id: 2" in out + +@pytest.mark.dependency(name="add_split_points") +def test_insert_data(capsys, instance_id, sample_database): + snippets.add_split_points(instance_id, sample_database.database_id) + out, _ = capsys.readouterr() + assert "Added split points." in out From 55a085f824d31906ab8b9611e8feac311535bc94 Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Mon, 7 Apr 2025 15:21:49 +0000 Subject: [PATCH 02/16] build error fixes --- samples/samples/snippets.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 61fb636b0d..24a7c713f5 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -33,6 +33,7 @@ from google.cloud.spanner_v1 import DirectedReadOptions, param_types from google.cloud.spanner_v1.data_types import JsonObject from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import struct_pb2 # type: ignore from testdata import singer_pb2 @@ -3540,7 +3541,7 @@ def add_split_points(instance_id, database_id): # Index split with table key part split_points=[ spanner_database_admin.SplitPoints( - table="Singers" + table="Singers", keys=[ spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue("42") @@ -3548,7 +3549,7 @@ def add_split_points(instance_id, database_id): ] ), spanner_database_admin.SplitPoints( - index="SingersByFirstLastName" + index="SingersByFirstLastName", keys=[ spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue("John","Doe") @@ -3556,7 +3557,7 @@ def add_split_points(instance_id, database_id): ] ), spanner_database_admin.SplitPoints( - index="SingersByFirstLastName" + index="SingersByFirstLastName", keys=[ spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue("38") @@ -3565,9 +3566,8 @@ def add_split_points(instance_id, database_id): key_parts=struct_pb2.ListValue("Jane","Doe") ) ] - ), - - ] + ) + ] ) operation = database_admin_api.add_split_points(request) From 8c7c51c8451ab558ac019cc6a10c7f4f025e534a Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Tue, 8 Apr 2025 09:00:06 +0000 Subject: [PATCH 03/16] build failure fixes --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 24a7c713f5..9a05d3b7e3 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3532,7 +3532,7 @@ def add_split_points(instance_id, database_id): print("Added the SingersByFirstLastName index.") - addSplitPointRequest = spanner_database_admin.addSplitPointRequest( + addSplitPointRequest = spanner_database_admin.AddSplitPointsRequest( database=database_admin_api.database_path( spanner_client.project, instance_id, database_id ), From f77df1d24e6f49e42dba1bdca87e2822d959b1f4 Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Tue, 8 Apr 2025 10:53:27 +0000 Subject: [PATCH 04/16] build fixes --- samples/samples/snippets.py | 12 +++++++----- samples/samples/snippets_test.py | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 9a05d3b7e3..c29e43f2db 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3509,6 +3509,7 @@ def query_data_with_proto_types_parameter(instance_id, database_id): ) # [END spanner_query_with_proto_types_parameter] + # [START spanner_database_add_split_points] def add_split_points(instance_id, database_id): """Adds split points to table and index.""" @@ -3552,9 +3553,9 @@ def add_split_points(instance_id, database_id): index="SingersByFirstLastName", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue("John","Doe") + key_parts=struct_pb2.ListValue("John", "Doe") ) - ] + ] ), spanner_database_admin.SplitPoints( index="SingersByFirstLastName", @@ -3563,18 +3564,19 @@ def add_split_points(instance_id, database_id): key_parts=struct_pb2.ListValue("38") ), spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue("Jane","Doe") + key_parts=struct_pb2.ListValue("Jane", "Doe") ) - ] + ] ) ] ) - operation = database_admin_api.add_split_points(request) + operation = database_admin_api.add_split_points(addSplitPointRequest) print("Added split points.") # [END spanner_database_add_split_points] + if __name__ == "__main__": # noqa: C901 parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter diff --git a/samples/samples/snippets_test.py b/samples/samples/snippets_test.py index a3cdb7f1e6..3e157fadc7 100644 --- a/samples/samples/snippets_test.py +++ b/samples/samples/snippets_test.py @@ -1010,8 +1010,8 @@ def test_query_data_with_proto_types_parameter( out, _ = capsys.readouterr() assert "SingerId: 2, SingerInfo: singer_id: 2" in out -@pytest.mark.dependency(name="add_split_points") -def test_insert_data(capsys, instance_id, sample_database): +@pytest.mark.dependency(name="add_split_points", depends=["insert_data"]) +def test_add_split_points(capsys, instance_id, sample_database): snippets.add_split_points(instance_id, sample_database.database_id) out, _ = capsys.readouterr() assert "Added split points." in out From 9ce67336bb693898d010533ab28a5c0c760f15f8 Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Tue, 8 Apr 2025 11:33:28 +0000 Subject: [PATCH 05/16] lint fixes --- samples/samples/snippets.py | 6 +++--- samples/samples/snippets_test.py | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index c29e43f2db..02cbf4d8b5 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3555,7 +3555,7 @@ def add_split_points(instance_id, database_id): spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue("John", "Doe") ) - ] + ] ), spanner_database_admin.SplitPoints( index="SingersByFirstLastName", @@ -3568,7 +3568,7 @@ def add_split_points(instance_id, database_id): ) ] ) - ] + ] ) operation = database_admin_api.add_split_points(addSplitPointRequest) @@ -3737,7 +3737,7 @@ def add_split_points(instance_id, database_id): subparsers.add_parser( "add_split_points", help=add_split_points.__doc__, - ) + ) args = parser.parse_args() diff --git a/samples/samples/snippets_test.py b/samples/samples/snippets_test.py index 3e157fadc7..eb61e8bd1f 100644 --- a/samples/samples/snippets_test.py +++ b/samples/samples/snippets_test.py @@ -1010,6 +1010,7 @@ def test_query_data_with_proto_types_parameter( out, _ = capsys.readouterr() assert "SingerId: 2, SingerInfo: singer_id: 2" in out + @pytest.mark.dependency(name="add_split_points", depends=["insert_data"]) def test_add_split_points(capsys, instance_id, sample_database): snippets.add_split_points(instance_id, sample_database.database_id) From 8267891c4be353e728b3a6ed2baf7401560525bb Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Tue, 8 Apr 2025 12:26:10 +0000 Subject: [PATCH 06/16] fixes lint --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 02cbf4d8b5..5683cbcb91 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3555,7 +3555,7 @@ def add_split_points(instance_id, database_id): spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue("John", "Doe") ) - ] + ] ), spanner_database_admin.SplitPoints( index="SingersByFirstLastName", From 7059408260a4a8d1d6e5bee662416e8a62ae2735 Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Wed, 9 Apr 2025 08:17:22 +0000 Subject: [PATCH 07/16] fixed the build error --- samples/samples/snippets.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 5683cbcb91..135fc3c874 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3545,7 +3545,7 @@ def add_split_points(instance_id, database_id): table="Singers", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue("42") + key_parts=struct_pb2.ListValue().values.add(string_value="42") ) ] ), @@ -3553,7 +3553,10 @@ def add_split_points(instance_id, database_id): index="SingersByFirstLastName", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue("John", "Doe") + key_parts=struct_pb2.ListValue().values.extend([ + struct_pb2.Value(string_value="John"), + struct_pb2.Value(string_value="Doe") + ]) ) ] ), @@ -3561,10 +3564,13 @@ def add_split_points(instance_id, database_id): index="SingersByFirstLastName", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue("38") + key_parts=struct_pb2.ListValue().values.add(string_value="38") ), spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue("Jane", "Doe") + key_parts=struct_pb2.ListValue().values.extend([ + struct_pb2.Value(string_value="Jane"), + struct_pb2.Value(string_value="Doe") + ]) ) ] ) From 5270eddbe919531503cfd0d5813183c347f02e3c Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Wed, 9 Apr 2025 11:32:42 +0000 Subject: [PATCH 08/16] fixed the build error --- samples/samples/snippets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 135fc3c874..ef0d8910cb 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3545,7 +3545,7 @@ def add_split_points(instance_id, database_id): table="Singers", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue().values.add(string_value="42") + key_parts=struct_pb2.ListValue().values.add(struct_pb2.Value(string_value="42")) ) ] ), @@ -3564,7 +3564,7 @@ def add_split_points(instance_id, database_id): index="SingersByFirstLastName", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue().values.add(string_value="38") + key_parts=struct_pb2.ListValue().values.add(struct_pb2.Value(string_value="38")) ), spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue().values.extend([ From 7f4dfdf037b7d302939a748e2aa5d8557562350f Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Thu, 10 Apr 2025 05:07:43 +0000 Subject: [PATCH 09/16] chore: fix positional argument issue Signed-off-by: Sri Harsha CH --- samples/samples/snippets.py | 42 +++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index ef0d8910cb..7395cd8695 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3545,41 +3545,51 @@ def add_split_points(instance_id, database_id): table="Singers", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue().values.add(struct_pb2.Value(string_value="42")) + key_parts=struct_pb2.ListValue( + values=[struct_pb2.Value(string_value="42")] + ) ) - ] + ], ), spanner_database_admin.SplitPoints( index="SingersByFirstLastName", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue().values.extend([ - struct_pb2.Value(string_value="John"), - struct_pb2.Value(string_value="Doe") - ]) + key_parts=struct_pb2.ListValue( + values=[ + struct_pb2.Value(string_value="John"), + struct_pb2.Value(string_value="Doe"), + ] + ) ) - ] + ], ), spanner_database_admin.SplitPoints( index="SingersByFirstLastName", keys=[ spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue().values.add(struct_pb2.Value(string_value="38")) + key_parts=struct_pb2.ListValue( + values=[struct_pb2.Value(string_value="38")] + ) ), spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue().values.extend([ - struct_pb2.Value(string_value="Jane"), - struct_pb2.Value(string_value="Doe") - ]) - ) - ] - ) - ] + key_parts=struct_pb2.ListValue( + values=[ + struct_pb2.Value(string_value="Jane"), + struct_pb2.Value(string_value="Doe"), + ] + ) + ), + ], + ), + ], ) operation = database_admin_api.add_split_points(addSplitPointRequest) print("Added split points.") + + # [END spanner_database_add_split_points] From 280e0b4060e553f950d6feba0e93b8036ce2f153 Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Thu, 10 Apr 2025 05:28:34 +0000 Subject: [PATCH 10/16] fixed the index test case --- samples/samples/snippets.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 7395cd8695..155b8b7bb1 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3567,11 +3567,6 @@ def add_split_points(instance_id, database_id): spanner_database_admin.SplitPoints( index="SingersByFirstLastName", keys=[ - spanner_database_admin.SplitPoints.Key( - key_parts=struct_pb2.ListValue( - values=[struct_pb2.Value(string_value="38")] - ) - ), spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue( values=[ @@ -3579,7 +3574,13 @@ def add_split_points(instance_id, database_id): struct_pb2.Value(string_value="Doe"), ] ) + ), + spanner_database_admin.SplitPoints.Key( + key_parts=struct_pb2.ListValue( + values=[struct_pb2.Value(string_value="38")] + ) ), + ], ), ], From f33174390075375e29e4b43b74fdc12728d8e73c Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Thu, 10 Apr 2025 05:31:56 +0000 Subject: [PATCH 11/16] added comment on the splits for idex keys --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 155b8b7bb1..8406195738 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3539,7 +3539,7 @@ def add_split_points(instance_id, database_id): ), # Table split # Index split without table key part - # Index split with table key part + # Index split with table key part: first key is the index key and second the table key split_points=[ spanner_database_admin.SplitPoints( table="Singers", From df90391b34cf253cc06139e395afbc27cae3606b Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Thu, 10 Apr 2025 10:26:44 +0000 Subject: [PATCH 12/16] fixed indent --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 8406195738..86d9f6f594 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3574,7 +3574,7 @@ def add_split_points(instance_id, database_id): struct_pb2.Value(string_value="Doe"), ] ) - ), + ), spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue( values=[struct_pb2.Value(string_value="38")] From a6671f9b07a160361fc3d8c465afab2515b0221b Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Thu, 10 Apr 2025 11:18:22 +0000 Subject: [PATCH 13/16] lint fixes --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 86d9f6f594..f2e16a32d8 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3574,7 +3574,7 @@ def add_split_points(instance_id, database_id): struct_pb2.Value(string_value="Doe"), ] ) - ), + ), spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue( values=[struct_pb2.Value(string_value="38")] From b12951df7466e05e777771739ef58d8850c8602e Mon Sep 17 00:00:00 2001 From: Akshara Uke Date: Fri, 11 Apr 2025 05:21:26 +0000 Subject: [PATCH 14/16] lint fixes --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index f2e16a32d8..536c57f4f1 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3574,7 +3574,7 @@ def add_split_points(instance_id, database_id): struct_pb2.Value(string_value="Doe"), ] ) - ), + ), spanner_database_admin.SplitPoints.Key( key_parts=struct_pb2.ListValue( values=[struct_pb2.Value(string_value="38")] From 516e66ff1d62d06fb77f11996d99a2abf76f0ef4 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Mon, 21 Apr 2025 12:43:54 +0000 Subject: [PATCH 15/16] chore: tests fix Signed-off-by: Sri Harsha CH --- samples/samples/snippets.py | 1 + 1 file changed, 1 insertion(+) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 536c57f4f1..4aeb4ab542 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3205,6 +3205,7 @@ def create_instance_with_autoscaling_config(instance_id): "sample_name": "snippets-create_instance_with_autoscaling_config", "created": str(int(time.time())), }, + edition=spanner_instance_admin.Instance.Edition.ENTERPRISE, # Optional ), ) From 3789025b05191b922dd96e81b0b700caa8abf612 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Tue, 22 Apr 2025 04:34:26 +0000 Subject: [PATCH 16/16] chore: update sample to not change editions due to failing test case Signed-off-by: Sri Harsha CH --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 4aeb4ab542..e8e82ad920 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -91,7 +91,7 @@ def update_instance(instance_id): labels={ "sample_name": "snippets-update_instance-explicit", }, - edition=spanner_instance_admin.Instance.Edition.ENTERPRISE, # Optional + edition=spanner_instance_admin.Instance.Edition.STANDARD, # Optional ), field_mask=field_mask_pb2.FieldMask(paths=["labels", "edition"]), )