Skip to content

Commit b49cdc5

Browse files
committed
docs
1 parent 0b1ca60 commit b49cdc5

File tree

2 files changed

+161
-10
lines changed

2 files changed

+161
-10
lines changed

MIGRATION_v2_v3.md

Lines changed: 76 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
3. [Connect to `YDB` using connection string](#connect-dsn)
99
4. [Make table client and session pool](#table-client)
1010
5. [Execute query with table client and session pool](#execute-queries)
11-
6. [Scan query result into local variables](#scan-result)
12-
7. [Logging SDK's events](#logs)
13-
8. [Add metrics about SDK's events](#metrics)
14-
9. [Add `Jaeger` traces about SDK's events](#jaeger)
11+
6. [About truncated result](#truncated)
12+
7. [Scan query result into local variables](#scan-result)
13+
8. [Logging SDK's events](#logs)
14+
9. [Add metrics about SDK's events](#metrics)
15+
10. [Add `Jaeger` traces about SDK's events](#jaeger)
1516

1617
## Imports <a name="imports"></a>
1718
- in `v2`:
@@ -141,7 +142,74 @@
141142
if err != nil {
142143
// error fallback
143144
}
144-
```
145+
```
146+
147+
## About truncated result <a name="truncated"></a>
148+
149+
Call of `session.Execute` may returns a result with a flag `Truncated` because `YDB` have a default limit of rows is a 1000.
150+
In this case query must be changed for supporting pagination. Trucated flag in result must be checks explicitly.
151+
- in `v2`:
152+
```go
153+
var res *table.Result
154+
err := table.Retry(ctx, sp,
155+
table.OperationFunc(
156+
func(ctx context.Context, s *table.Session) (err error) {
157+
_, res, err = s.Execute(ctx, readTx, "SELECT 1+1")
158+
if err != nil {
159+
// error fallback
160+
}
161+
for res.NextStreamSet(ctx) {
162+
for res.NextRow() {
163+
// process column values
164+
}
165+
}
166+
if err := res.Err(); err != nil {
167+
// error fallback
168+
}
169+
if res.Trucated() {
170+
// alarm to query developers
171+
}
172+
return nil
173+
},
174+
),
175+
}
176+
if err != nil {
177+
// error fallback
178+
}
179+
```
180+
- in `v3`:
181+
By default, truncated result wraps as non-retryable error
182+
```go
183+
import (
184+
"github.com/ydb-platform/ydb-go-sdk/v3/table/result"
185+
)
186+
...
187+
var res result.Result
188+
err := db.Table().Do(ctx,
189+
func(ctx context.Context, s table.Session) (err error) {
190+
_, res, err = s.Execute(ctx, readTx, "SELECT 1+1")
191+
if err != nil {
192+
// error fallback
193+
}
194+
for res.NextStreamSet(ctx) {
195+
for res.NextRow() {
196+
// process column values
197+
}
198+
}
199+
// no need to check truncated result explicitly
200+
// if res.Truncated() {
201+
// // alarm to query developers
202+
// }
203+
return res.Err()
204+
},
205+
table.WithIdempotent(), // only idempotent queries
206+
)
207+
if err != nil {
208+
// error fallback
209+
}
210+
```
211+
But if default behaviour are not allowed, wrapping truncated result as error may be disabled with option `ydb.WithIgnoreTruncated`
212+
145213

146214
## Scan query result into local variables <a name="scan-result"></a>
147215
- in `v2`:
@@ -276,9 +344,10 @@
276344
ydbMetrics "github.com/ydb-platform/ydb-go-sdk-prometheus"
277345
)
278346
...
347+
registry := prometheus.NewRegistry()
279348
db, err := ydb.Open(ctx, connectionString,
280349
...
281-
ydbMetrics.WithTraces(log, trace.DriverConnEvents | trace.DriverClusterEvents),
350+
ydbMetrics.WithTraces(registry, ydbMetrics.WithDetails(trace.DetailsAll)),
282351
)
283352
```
284353
* metrics to other monitoring systems may be add with common package `"github.com/ydb-platform/ydb-go-sdk-metrics"`
@@ -301,7 +370,7 @@
301370
...
302371
db, err := ydb.Open(ctx, connectionString,
303372
...
304-
ydbTracing.WithTraces(log, trace.DriverConnEvents | trace.DriverClusterEvents | trace.DriverRepeaterEvents | trace.DiscoveryEvents),
373+
ydbTracing.WithTraces(trace.DriverConnEvents | trace.DriverClusterEvents | trace.DriverRepeaterEvents | trace.DiscoveryEvents),
305374
)
306375
```
307376

SQL.md

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,30 @@ Package `ydb-go-sdk` provides usage `database/sql` API also.
1717
* [Over `sql.Tx`](#retry-tx)
1818
6. [Query args types](#arg-types)
1919
7. [Get native driver from `*sql.DB`](#unwrap)
20+
8. [Logging SDK's events](#logs)
21+
9. [Add metrics about SDK's events](#metrics)
22+
10. [Add `Jaeger` traces about driver events](#jaeger)
2023

2124
## Initialization of `database/sql` driver <a name="init"></a>
2225

2326
### Configure driver with `ydb.Connector` (recommended way) <a name="init-connector"></a>
2427
```go
2528
import (
29+
"database/sql"
30+
2631
"github.com/ydb-platform/ydb-go-sdk/v3"
2732
)
2833

2934
func main() {
3035
// init native ydb-go-sdk driver
3136
nativeDriver, err := ydb.Open(context.TODO(), "grpcs://localhost:2135/local",
32-
// See many ydb.Option's for configure driver
37+
// See many ydb.Option's for configure driver https://pkg.go.dev/github.com/ydb-platform/ydb-go-sdk/v3#Option
3338
)
3439
if err != nil {
3540
// fallback on error
3641
}
3742
connector, err := ydb.Connector(nativeDriver,
38-
// See ydb.ConnectorOption's for configure connector
43+
// See ydb.ConnectorOption's for configure connector https://pkg.go.dev/github.com/ydb-platform/ydb-go-sdk/v3#ConnectorOption
3944
)
4045
if err != nil {
4146
// fallback on error
@@ -46,6 +51,8 @@ func main() {
4651
### Configure driver only with data source name (connection string) <a name="init-dsn"></a>
4752
```go
4853
import (
54+
"database/sql"
55+
4956
_ "github.com/ydb-platform/ydb-go-sdk/v3"
5057
)
5158

@@ -259,7 +266,7 @@ err := retry.DoTx(context.TODO(), db, func(ctx context.Context, tx *sql.Tx) erro
259266
```
260267
## Get native driver from `*sql.DB` <a name="unwrap"></a>
261268

262-
```
269+
```go
263270
db, err := sql.Open("ydb", "grpcs://localhost:2135/local")
264271
if err != nil {
265272
t.Fatal(err)
@@ -273,3 +280,78 @@ nativeDriver.Table().Do(ctx, func(ctx context.Context, s table.Session) error {
273280
return nil
274281
})
275282
```
283+
284+
## Logging driver events <a name="logging"></a>
285+
286+
Adding a logging driver events allowed only if connection to `YDB` opens over [connector](##init-connector).
287+
Adding of logging provides with [debug adapters](README.md#debug) and wrotes in [migration notes](MIGRATION_v2_v3.md#logs)
288+
Example of adding `zap` logging:
289+
```go
290+
import (
291+
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
292+
ydbZap "github.com/ydb-platform/ydb-go-sdk-zap"
293+
)
294+
...
295+
nativeDriver, err := ydb.Open(ctx, connectionString,
296+
...
297+
ydbZap.WithTraces(log, trace.DetailsAll),
298+
)
299+
if err != nil {
300+
// fallback on error
301+
}
302+
connector, err := ydb.Connector(nativeDriver)
303+
if err != nil {
304+
// fallback on error
305+
}
306+
db := sql.OpenDB(connector)
307+
```
308+
309+
## Add metrics about SDK's events <a name="metrics"></a>
310+
311+
Adding of driver events monitoring allowed only if connection to `YDB` opens over [connector](##init-connector).
312+
Monitoring of driver events provides with [debug adapters](README.md#debug) and wrotes in [migration notes](MIGRATION_v2_v3.md#metrics)
313+
Example of adding `Prometheus` monitoring:
314+
```go
315+
import (
316+
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
317+
ydbMetrics "github.com/ydb-platform/ydb-go-sdk-prometheus"
318+
)
319+
...
320+
nativeDriver, err := ydb.Open(ctx, connectionString,
321+
...
322+
ydbMetrics.WithTraces(registry, ydbMetrics.WithDetails(trace.DetailsAll)),
323+
)
324+
if err != nil {
325+
// fallback on error
326+
}
327+
connector, err := ydb.Connector(nativeDriver)
328+
if err != nil {
329+
// fallback on error
330+
}
331+
db := sql.OpenDB(connector)
332+
```
333+
334+
## Add `Jaeger` traces about driver events <a name="jaeger"></a>
335+
336+
Adding of `Jaeger` traces about driver events allowed only if connection to `YDB` opens over [connector](##init-connector).
337+
`Jaeger` tracing provides with [debug adapters](README.md#debug) and wrotes in [migration notes](MIGRATION_v2_v3.md#jaeger)
338+
Example of adding `Jaeger` tracing:
339+
```go
340+
import (
341+
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
342+
ydbOpentracing "github.com/ydb-platform/ydb-go-sdk-opentracing"
343+
)
344+
...
345+
nativeDriver, err := ydb.Open(ctx, connectionString,
346+
...
347+
ydbOpentracing.WithTraces(trace.DriverConnEvents | trace.DriverClusterEvents | trace.DriverRepeaterEvents | trace.DiscoveryEvents),
348+
)
349+
if err != nil {
350+
// fallback on error
351+
}
352+
connector, err := ydb.Connector(nativeDriver)
353+
if err != nil {
354+
// fallback on error
355+
}
356+
db := sql.OpenDB(connector)
357+
```

0 commit comments

Comments
 (0)