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’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: update all public documents to use auto-generated admin clients. #1109

Merged
merged 6 commits into from Mar 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view

Large diffs are not rendered by default.

Expand Up @@ -18,122 +18,22 @@
Spanner PostgreSql dialect.
For more information, see the README.rst under /spanner.
"""
from google.cloud import spanner
from google.cloud import spanner, spanner_admin_database_v1
from google.cloud.spanner_admin_database_v1.types.common import DatabaseDialect

OPERATION_TIMEOUT_SECONDS = 240


# [START spanner_postgresql_create_database]
def create_database(instance_id, database_id):
"""Creates a PostgreSql database and tables for sample data."""

from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)

request = spanner_database_admin.CreateDatabaseRequest(
parent=instance.name,
create_statement=f'CREATE DATABASE "{database_id}"',
database_dialect=DatabaseDialect.POSTGRESQL,
)

operation = spanner_client.database_admin_api.create_database(request=request)

print("Waiting for operation to complete...")
database = operation.result(OPERATION_TIMEOUT_SECONDS)

create_table_using_ddl(database.name)
print("Created database {} on instance {}".format(database_id, instance_id))


def create_table_using_ddl(database_name):
from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

spanner_client = spanner.Client()
request = spanner_database_admin.UpdateDatabaseDdlRequest(
database=database_name,
statements=[
"""CREATE TABLE Singers (
SingerId bigint NOT NULL,
FirstName character varying(1024),
LastName character varying(1024),
SingerInfo bytea,
FullName character varying(2048)
GENERATED ALWAYS AS (FirstName || ' ' || LastName) STORED,
PRIMARY KEY (SingerId)
)""",
"""CREATE TABLE Albums (
SingerId bigint NOT NULL,
AlbumId bigint NOT NULL,
AlbumTitle character varying(1024),
PRIMARY KEY (SingerId, AlbumId)
) INTERLEAVE IN PARENT Singers ON DELETE CASCADE""",
],
)
operation = spanner_client.database_admin_api.update_database_ddl(request)
operation.result(OPERATION_TIMEOUT_SECONDS)


# [END spanner_postgresql_create_database]


def create_table_with_datatypes(instance_id, database_id):
"""Creates a table with supported datatypes."""
# [START spanner_postgresql_create_table_with_datatypes]
# instance_id = "your-spanner-instance"
# database_id = "your-spanner-db-id"

from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

request = spanner_database_admin.UpdateDatabaseDdlRequest(
database=database.name,
statements=[
"""CREATE TABLE Venues (
VenueId BIGINT NOT NULL,
VenueName character varying(100),
VenueInfo BYTEA,
Capacity BIGINT,
OutdoorVenue BOOL,
PopularityScore FLOAT8,
Revenue NUMERIC,
LastUpdateTime SPANNER.COMMIT_TIMESTAMP NOT NULL,
PRIMARY KEY (VenueId))"""
],
)
operation = spanner_client.database_admin_api.update_database_ddl(request)

print("Waiting for operation to complete...")
operation.result(OPERATION_TIMEOUT_SECONDS)

print(
"Created Venues table on database {} on instance {}".format(
database_id, instance_id
)
)
# [END spanner_postgresql_create_table_with_datatypes]


# [START spanner_postgresql_add_column]
def add_column(instance_id, database_id):
"""Adds a new column to the Albums table in the example database."""

from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

request = spanner_database_admin.UpdateDatabaseDdlRequest(
database=database.name,
statements=["ALTER TABLE Albums ADD COLUMN MarketingBudget BIGINT"],
operation = database.update_ddl(
["ALTER TABLE Albums ADD COLUMN MarketingBudget BIGINT"]
)
operation = spanner_client.database_admin_api.update_database_ddl(request)

print("Waiting for operation to complete...")
operation.result(OPERATION_TIMEOUT_SECONDS)
Expand Down Expand Up @@ -164,19 +64,14 @@ def add_jsonb_column(instance_id, database_id):
# instance_id = "your-spanner-instance"
# database_id = "your-spanner-db-id"

from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

request = spanner_database_admin.UpdateDatabaseDdlRequest(
database=database.name,
statements=["ALTER TABLE Venues ADD COLUMN VenueDetails JSONB"],
operation = database.update_ddl(
["ALTER TABLE Venues ADD COLUMN VenueDetails JSONB"]
)

operation = spanner_client.database_admin_api.update_database_ddl(request)

print("Waiting for operation to complete...")
operation.result(OPERATION_TIMEOUT_SECONDS)

Expand All @@ -190,46 +85,103 @@ def add_jsonb_column(instance_id, database_id):
# [END spanner_postgresql_jsonb_add_column]


# [START spanner_postgresql_create_storing_index]
def add_storing_index(instance_id, database_id):
"""Adds an storing index to the example database."""
# [START spanner_postgresql_alter_sequence]
def alter_sequence(instance_id, database_id):
"""Alters the Sequence and insert data"""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

operation = database.update_ddl(["ALTER SEQUENCE Seq SKIP RANGE 1000 5000000"])

print("Waiting for operation to complete...")
operation.result(OPERATION_TIMEOUT_SECONDS)

print(
"Altered Seq sequence to skip an inclusive range between 1000 and 5000000 on database {} on instance {}".format(
database_id, instance_id
)
)

def insert_customers(transaction):
results = transaction.execute_sql(
"INSERT INTO Customers (CustomerName) VALUES "
"('Lea'), "
"('Cataline'), "
"('Smith') "
"RETURNING CustomerId"
)
for result in results:
print("Inserted customer record with Customer Id: {}".format(*result))
print(
"Number of customer records inserted is {}".format(
results.stats.row_count_exact
)
)

database.run_in_transaction(insert_customers)


# [END spanner_postgresql_alter_sequence]

from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

# [START spanner_postgresql_create_database]
def create_database(instance_id, database_id):
"""Creates a PostgreSql database and tables for sample data."""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

request = spanner_database_admin.UpdateDatabaseDdlRequest(
database=database.name,
statements=[
"CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle)"
"INCLUDE (MarketingBudget)"
],
database = instance.database(
database_id,
database_dialect=DatabaseDialect.POSTGRESQL,
)

operation = spanner_client.database_admin_api.update_database_ddl(request)
operation = database.create()

print("Waiting for operation to complete...")
operation.result(OPERATION_TIMEOUT_SECONDS)

print("Added the AlbumsByAlbumTitle2 index.")
create_table_using_ddl(database.name)
print("Created database {} on instance {}".format(database_id, instance_id))


# [END spanner_postgresql_create_storing_index]
def create_table_using_ddl(database_name):
spanner_client = spanner.Client()
request = spanner_admin_database_v1.UpdateDatabaseDdlRequest(
database=database_name,
statements=[
"""CREATE TABLE Singers (
SingerId bigint NOT NULL,
FirstName character varying(1024),
LastName character varying(1024),
SingerInfo bytea,
FullName character varying(2048)
GENERATED ALWAYS AS (FirstName || ' ' || LastName) STORED,
PRIMARY KEY (SingerId)
)""",
"""CREATE TABLE Albums (
SingerId bigint NOT NULL,
AlbumId bigint NOT NULL,
AlbumTitle character varying(1024),
PRIMARY KEY (SingerId, AlbumId)
) INTERLEAVE IN PARENT Singers ON DELETE CASCADE""",
],
)
operation = spanner_client.database_admin_api.update_database_ddl(request)
operation.result(OPERATION_TIMEOUT_SECONDS)


# [END spanner_postgresql_create_database]


# [START spanner_postgresql_create_sequence]
def create_sequence(instance_id, database_id):
"""Creates the Sequence and insert data"""

from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

request = spanner_database_admin.UpdateDatabaseDdlRequest(
request = spanner_admin_database_v1.UpdateDatabaseDdlRequest(
database=database.name,
statements=[
"CREATE SEQUENCE Seq BIT_REVERSED_POSITIVE",
Expand Down Expand Up @@ -272,68 +224,78 @@ def insert_customers(transaction):
# [END spanner_postgresql_create_sequence]


# [START spanner_postgresql_alter_sequence]
def alter_sequence(instance_id, database_id):
"""Alters the Sequence and insert data"""
# [START spanner_postgresql_create_storing_index]
def add_storing_index(instance_id, database_id):
"""Adds an storing index to the example database."""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

operation = database.update_ddl(
[
"CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle)"
"INCLUDE (MarketingBudget)"
]
)

from google.cloud.spanner_admin_database_v1.types import spanner_database_admin
print("Waiting for operation to complete...")
operation.result(OPERATION_TIMEOUT_SECONDS)

print("Added the AlbumsByAlbumTitle2 index.")


# [END spanner_postgresql_create_storing_index]


# [START spanner_postgresql_drop_sequence]
def drop_sequence(instance_id, database_id):
"""Drops the Sequence"""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

request = spanner_database_admin.UpdateDatabaseDdlRequest(
database=database.name,
statements=["ALTER SEQUENCE Seq SKIP RANGE 1000 5000000"],
operation = database.update_ddl(
[
"ALTER TABLE Customers ALTER COLUMN CustomerId DROP DEFAULT",
"DROP SEQUENCE Seq",
]
)
operation = spanner_client.database_admin_api.update_database_ddl(request)

print("Waiting for operation to complete...")
operation.result(OPERATION_TIMEOUT_SECONDS)

print(
"Altered Seq sequence to skip an inclusive range between 1000 and 5000000 on database {} on instance {}".format(
"Altered Customers table to drop DEFAULT from CustomerId column and dropped the Seq sequence on database {} on instance {}".format(
database_id, instance_id
)
)

def insert_customers(transaction):
results = transaction.execute_sql(
"INSERT INTO Customers (CustomerName) VALUES "
"('Lea'), "
"('Cataline'), "
"('Smith') "
"RETURNING CustomerId"
)
for result in results:
print("Inserted customer record with Customer Id: {}".format(*result))
print(
"Number of customer records inserted is {}".format(
results.stats.row_count_exact
)
)

database.run_in_transaction(insert_customers)

# [END spanner_postgresql_drop_sequence]

# [END spanner_postgresql_alter_sequence]


# [START spanner_postgresql_drop_sequence]
def drop_sequence(instance_id, database_id):
"""Drops the Sequence"""

from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

def create_table_with_datatypes(instance_id, database_id):
"""Creates a table with supported datatypes."""
# [START spanner_postgresql_create_table_with_datatypes]
# instance_id = "your-spanner-instance"
# database_id = "your-spanner-db-id"
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

request = spanner_database_admin.UpdateDatabaseDdlRequest(
request = spanner_admin_database_v1.UpdateDatabaseDdlRequest(
database=database.name,
statements=[
"ALTER TABLE Customers ALTER COLUMN CustomerId DROP DEFAULT",
"DROP SEQUENCE Seq",
"""CREATE TABLE Venues (
VenueId BIGINT NOT NULL,
VenueName character varying(100),
VenueInfo BYTEA,
Capacity BIGINT,
OutdoorVenue BOOL,
PopularityScore FLOAT8,
Revenue NUMERIC,
LastUpdateTime SPANNER.COMMIT_TIMESTAMP NOT NULL,
PRIMARY KEY (VenueId))"""
],
)
operation = spanner_client.database_admin_api.update_database_ddl(request)
Expand All @@ -342,10 +304,8 @@ def drop_sequence(instance_id, database_id):
operation.result(OPERATION_TIMEOUT_SECONDS)

print(
"Altered Customers table to drop DEFAULT from CustomerId column and dropped the Seq sequence on database {} on instance {}".format(
"Created Venues table on database {} on instance {}".format(
database_id, instance_id
)
)


# [END spanner_postgresql_drop_sequence]
# [END spanner_postgresql_create_table_with_datatypes]