-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathdatabase-add-split-points.js
123 lines (111 loc) · 3.72 KB
/
database-add-split-points.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* Copyright 2025 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
*
* http://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.
*/
// sample-metadata:
// title: Adds split points to a database.
// usage: node database-add-split-points.js <INSTANCE_ID> <DATABASE_ID> <PROJECT_ID>
'use strict';
function main(
instanceId = 'my-instance-id',
databaseId = 'my-database-id',
projectId = 'my-project-id',
) {
async function addSplitPoints() {
// [START spanner_database_add_split_points]
// Import the Google Cloud client library for Spanner.
const {Spanner} = require('@google-cloud/spanner');
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// const projectId = 'my-project-id';
// const instanceId = 'my-instance-id';
// const databaseId = 'my-database-id';
// Create a Spanner database admin client.
const spanner = new Spanner({projectId});
const databaseAdminClient = spanner.getDatabaseAdminClient();
try {
// Add split points to table and index
// first is a table level split that takes table primary key value
// second is index level split with index key parts
// third is index level split having index key part and table key part
// Assume the following table and index structure
// CREATE TABLE Singers (
// SingerId INT64 NOT NULL,
// FirstName STRING(1024),
// LastName STRING(1024),
// SingerInfo BYTES(MAX),
// ) PRIMARY KEY(SingerId);
//
// CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName);
const request = [
'CREATE INDEX IF NOT EXISTS SingersByFirstLastName ON Singers(FirstName, LastName)',
];
const [operation] = await databaseAdminClient.updateDatabaseDdl({
database: databaseAdminClient.databasePath(
projectId,
instanceId,
databaseId,
),
statements: request,
});
console.log('Waiting for operation to complete...');
await operation.promise();
console.log('Added the SingersByFirstLastName index.');
databaseAdminClient.addSplitPoints({
database: databaseAdminClient.databasePath(
projectId,
instanceId,
databaseId,
),
splitPoints: [
{
table: 'Singers',
keys: [{keyParts: {values: [{stringValue: '42'}]}}],
},
{
index: 'SingersByFirstLastName',
keys: [
{
keyParts: {
values: [{stringValue: 'John'}, {stringValue: 'Doe'}],
},
},
],
},
{
index: 'SingersByFirstLastName',
keys: [
{
keyParts: {
values: [{stringValue: 'Jane'}, {stringValue: 'Doe'}],
},
},
{keyParts: {values: [{stringValue: '38'}]}},
],
},
],
});
console.log('Added Split Points');
} catch (err) {
console.error('ERROR:', err);
}
// [END spanner_database_add_split_points]
}
addSplitPoints();
}
process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
main(...process.argv.slice(2));