From 96c9878fbe46f0ff48a2c21066a31337edf65c23 Mon Sep 17 00:00:00 2001 From: Li Ya Qiang Date: Fri, 10 Mar 2023 12:07:10 +0800 Subject: [PATCH] add zh cloud docs to taosdata.com --- docs/en/02-intro.md | 4 +- docs/en/07-data-in/20-telegraf.md | 2 +- docs/en/09-data-out/04-taosdump.md | 2 +- docs/en/09-data-out/_sub_c.mdx | 3 - docs/en/09-data-out/_sub_cs.mdx | 3 - docs/en/09-data-out/_sub_go.mdx | 3 - docs/en/09-data-out/_sub_java.mdx | 11 - docs/en/09-data-out/_sub_node.mdx | 3 - docs/en/09-data-out/_sub_python.mdx | 3 - docs/en/09-data-out/_sub_rust.mdx | 3 - .../en/10-programming/01-connect/01-python.md | 8 +- docs/en/10-programming/01-connect/02-java.md | 2 +- docs/en/10-programming/01-connect/04-rust.md | 2 +- .../en/10-programming/01-connect/06-csharp.md | 2 + docs/en/10-programming/02-model.md | 4 +- docs/en/10-programming/03-insert.md | 2 +- docs/en/10-programming/04-query.md | 3 +- .../10-programming/06-connector/01-python.md | 51 +- .../en/10-programming/06-connector/02-java.md | 98 ++-- docs/en/10-programming/06-connector/03-go.md | 40 +- .../en/10-programming/06-connector/04-rust.md | 199 ++++--- .../en/10-programming/06-connector/05-node.md | 38 +- .../10-programming/06-connector/06-csharp.md | 45 +- .../06-connector/09-rest-api.md | 3 +- docs/en/11-visual/01-grafana.md | 2 +- docs/en/11-visual/02-gds.md | 13 +- docs/en/12-data-subscription/index.md | 2 +- docs/en/12-stream.md | 2 +- docs/en/13-replication/index.md | 2 +- docs/en/19-tools/01-cli.md | 24 +- docs/en/19-tools/03-taosbenchmark.md | 20 +- docs/en/19-tools/06-taosdump.md | 13 +- docs/en/22-user-management/01-orgs/index.md | 2 +- docs/en/22-user-management/index.md | 6 +- docs/examples/c/tmq.c | 282 ++++++++++ .../Program.cs} | 27 +- .../asyncquery.csproj | 2 +- .../ConnectExample.cs => connect/Program.cs} | 2 +- .../connect.csproj | 2 +- docs/examples/csharp/csharp.sln | 94 ++++ .../Program.cs} | 20 +- .../influxdbline.csproj | 2 +- .../csharp/native-example/QueryExample.cs | 82 --- .../csharp/native-example/SQLInsertExample.cs | 69 --- .../csharp/native-example/SubscribeDemo.cs | 100 ---- .../csharp/native-example/subscribe.csproj | 15 - .../Program.cs} | 47 +- .../optsJSON.csproj} | 2 +- .../Program.cs} | 47 +- .../optstelnet.csproj | 2 +- docs/examples/csharp/query/Program.cs | 80 +++ .../{native-example => query}/query.csproj | 2 +- docs/examples/csharp/sqlInsert/Program.cs | 69 +++ .../sqlinsert.csproj | 2 +- .../Program.cs} | 78 ++- .../stmtinsert.csproj | 2 +- .../csharp/subscribe/subscribe.csproj | 2 +- docs/examples/csharp/wsConnect/Program.cs | 28 + .../csharp/wsConnect/wsConnect.csproj | 18 + docs/examples/csharp/wsInsert/Program.cs | 61 +++ docs/examples/csharp/wsInsert/wsInsert.csproj | 17 + docs/examples/csharp/wsQuery/Program.cs | 79 +++ docs/examples/csharp/wsQuery/wsQuery.csproj | 19 + docs/examples/csharp/wsStmt/Program.cs | 98 ++++ docs/examples/csharp/wsStmt/wsStmt.csproj | 19 + .../com/taos/example/RestInsertExample.java | 16 +- .../java/com/taos/example/SubscribeDemo.java | 10 +- .../example/highvolume/DataBaseMonitor.java | 63 +++ .../example/highvolume/FastWriteExample.java | 70 +++ .../example/highvolume/MockDataSource.java | 53 ++ .../com/taos/example/highvolume/ReadTask.java | 58 +++ .../taos/example/highvolume/SQLWriter.java | 205 ++++++++ .../taos/example/highvolume/StmtWriter.java | 4 + .../taos/example/highvolume/WriteTask.java | 58 +++ docs/examples/python/conn_native_pandas.py | 7 +- docs/examples/python/conn_rest_pandas.py | 6 +- docs/examples/python/connect_rest_examples.py | 23 +- .../connection_usage_native_reference.py | 8 +- docs/examples/python/fast_write_example.py | 225 ++++++++ docs/examples/python/kafka_example_common.py | 65 +++ .../examples/python/kafka_example_consumer.py | 231 ++++++++ docs/examples/python/kafka_example_perform.py | 103 ++++ .../examples/python/kafka_example_producer.py | 97 ++++ docs/examples/python/mockdatasource.py | 61 +++ docs/examples/python/native_insert_example.py | 8 +- docs/examples/python/sql_writer.py | 111 ++++ docs/examples/python/tmq_example.py | 107 ++-- docs/examples/python/tmq_websocket_example.py | 31 ++ docs/zh/01-index.md | 34 +- docs/zh/02-intro.md | 101 ++++ docs/zh/04-concept/_category_.yml | 1 + docs/zh/04-concept/index.md | 183 +++++++ docs/zh/04-concept/supertable.webp | Bin 0 -> 33420 bytes docs/zh/07-data-in/02-prometheus.md | 72 +++ docs/zh/07-data-in/03-telegraf.md | 88 ++++ docs/zh/07-data-in/30-schemaless-influxdb.md | 75 +++ .../07-data-in/35-schemaless-opentsdb-json.md | 62 +++ .../38-schemaless-opentsdb-telnet.md | 65 +++ docs/zh/07-data-in/index.md | 13 + docs/zh/07-data-in/prometheus_data.webp | Bin 0 -> 28074 bytes docs/zh/07-data-in/prometheus_read.webp | Bin 0 -> 16040 bytes .../07-data-in/telegraf-show-databases.webp | Bin 0 -> 12408 bytes docs/zh/07-data-in/telegraf-show-stables.webp | Bin 0 -> 10880 bytes docs/zh/09-data-out/04-taosdump.md | 122 +++++ docs/zh/09-data-out/05-prometheus.md | 34 ++ docs/zh/09-data-out/index.md | 7 + docs/zh/09-data-out/prometheus_data.webp | Bin 0 -> 28074 bytes docs/zh/09-data-out/prometheus_read.webp | Bin 0 -> 16040 bytes .../zh/10-programming/01-connect/01-python.md | 130 +++++ docs/zh/10-programming/01-connect/02-java.md | 80 +++ docs/zh/10-programming/01-connect/03-go.md | 85 +++ docs/zh/10-programming/01-connect/04-rust.md | 80 +++ docs/zh/10-programming/01-connect/05-node.md | 63 +++ .../zh/10-programming/01-connect/06-csharp.md | 90 ++++ .../10-programming/01-connect/09-rest-api.md | 57 ++ .../10-programming/01-connect/_category_.yml | 1 + docs/zh/10-programming/01-connect/index.md | 14 + docs/zh/10-programming/02-model.md | 72 +++ docs/zh/10-programming/03-insert.md | 106 ++++ docs/zh/10-programming/04-query.md | 261 ++++++++++ .../10-programming/06-connector/01-python.md | 109 ++++ .../zh/10-programming/06-connector/02-java.md | 347 ++++++++++++ docs/zh/10-programming/06-connector/03-go.md | 200 +++++++ .../zh/10-programming/06-connector/04-rust.md | 226 ++++++++ .../zh/10-programming/06-connector/05-node.md | 75 +++ .../10-programming/06-connector/06-csharp.md | 100 ++++ .../06-connector/09-rest-api.md | 306 +++++++++++ .../06-connector/_category_.yml | 1 + docs/zh/10-programming/06-connector/index.md | 14 + docs/zh/10-programming/_category_.yml | 1 + docs/zh/10-programming/create-database.png | Bin 0 -> 41379 bytes docs/zh/10-programming/index.md | 27 + docs/zh/11-visual/01-grafana.md | 54 ++ docs/zh/11-visual/02-gds.md | 71 +++ docs/zh/11-visual/gds/gds_cloud_login.webp | Bin 0 -> 53198 bytes docs/zh/11-visual/gds/gds_data_source.webp | Bin 0 -> 67036 bytes .../zh/11-visual/grafana/add_datasource1.webp | Bin 0 -> 55188 bytes .../zh/11-visual/grafana/add_datasource2.webp | Bin 0 -> 43774 bytes .../zh/11-visual/grafana/add_datasource3.webp | Bin 0 -> 34680 bytes .../zh/11-visual/grafana/add_datasource4.webp | Bin 0 -> 37054 bytes .../click-plugin-menu-from-config.webp | Bin 0 -> 5588 bytes .../11-visual/grafana/create_dashboard1.webp | Bin 0 -> 77164 bytes .../11-visual/grafana/create_dashboard2.webp | Bin 0 -> 99050 bytes .../grafana/search-tdengine-from-config.webp | Bin 0 -> 12700 bytes .../verifying-tdengine-datasource.webp | Bin 0 -> 37006 bytes docs/zh/11-visual/index.md | 7 + .../example/share-topic-example.webp | Bin 0 -> 72960 bytes docs/zh/12-data-subscription/index.md | 492 ++++++++++++++++++ .../share/share-topic-adduser.webp | Bin 0 -> 6210 bytes .../share/share-topic-addusergroup.webp | Bin 0 -> 6210 bytes .../share/share-topic-usergroup.webp | Bin 0 -> 21424 bytes .../share/share-topic-users.webp | Bin 0 -> 30634 bytes .../topic/add-topic-db.webp | Bin 0 -> 8428 bytes .../topic/add-topic-stable.webp | Bin 0 -> 9204 bytes .../topic/add-topic-sub-stable.webp | Bin 0 -> 18432 bytes .../topic/add-topic-sub-table.webp | Bin 0 -> 18454 bytes docs/zh/12-stream.md | 112 ++++ docs/zh/13-replication/index.md | 9 + docs/zh/19-tools/01-cli.md | 126 +++++ docs/zh/19-tools/03-taosbenchmark.md | 398 ++++++++++++++ docs/zh/19-tools/06-taosdump.md | 135 +++++ docs/zh/19-tools/index.md | 7 + .../01-orgs/images/neworg.webp | Bin 0 -> 11114 bytes .../01-orgs/images/orglist.webp | Bin 0 -> 57194 bytes .../01-orgs/images/orgname.webp | Bin 0 -> 10176 bytes .../01-orgs/images/orgprivileges.webp | Bin 0 -> 43624 bytes .../01-orgs/images/orgtransfer.webp | Bin 0 -> 12026 bytes docs/zh/22-user-management/01-orgs/index.md | 33 ++ .../22-user-management/02-users/01-users.md | 11 + docs/zh/22-user-management/02-users/index.md | 14 + docs/zh/22-user-management/index.md | 28 + docs/zh/eco_system.webp | Bin 0 -> 37718 bytes examples/c/tmq.c | 282 ++++++++++ tests/script/sh/abs_max.c | 95 ---- tests/script/sh/add_one.c | 31 -- tests/script/sh/add_one_64232.c | 31 -- tests/script/sh/bit_and.c | 61 +++ tests/script/sh/cfg.bat | 4 +- tests/script/sh/cfg.sh | 6 +- tests/script/sh/checkAsan.sh | 74 +++ tests/script/sh/checkValgrind.sh | 59 +++ tests/script/sh/clear.sh | 6 +- tests/script/sh/compile_udf.sh | 11 + tests/script/sh/copy_udf.bat | 23 + tests/script/sh/copy_udf.sh | 36 ++ tests/script/sh/demo.c | 112 ---- tests/script/sh/demo.lua | 43 -- tests/script/sh/deploy.bat | 54 +- tests/script/sh/deploy.sh | 78 ++- tests/script/sh/exec-default.sh | 6 +- tests/script/sh/exec-no-random-fail.sh | 6 +- tests/script/sh/exec-random-fail.sh | 6 +- tests/script/sh/exec.bat | 54 +- tests/script/sh/exec.sh | 48 +- tests/script/sh/exec_tarbitrator.sh | 6 +- tests/script/sh/gpd.c | 46 ++ tests/script/sh/l2norm.c | 80 +++ tests/script/sh/move_dnode.sh | 56 -- tests/script/sh/mv_old_data.sh | 6 +- tests/script/sh/prepare_udf.sh | 2 - tests/script/sh/sigint_stop_dnodes.sh | 16 + tests/script/sh/stop_dnodes.sh | 34 +- tests/script/sh/sub_one.c | 33 -- tests/script/sh/sum_double.c | 84 --- 204 files changed, 8521 insertions(+), 1376 deletions(-) delete mode 100644 docs/en/09-data-out/_sub_c.mdx delete mode 100644 docs/en/09-data-out/_sub_cs.mdx delete mode 100644 docs/en/09-data-out/_sub_go.mdx delete mode 100644 docs/en/09-data-out/_sub_java.mdx delete mode 100644 docs/en/09-data-out/_sub_node.mdx delete mode 100644 docs/en/09-data-out/_sub_python.mdx delete mode 100644 docs/en/09-data-out/_sub_rust.mdx create mode 100644 docs/examples/c/tmq.c rename docs/examples/csharp/{native-example/AsyncQueryExample.cs => asyncQuery/Program.cs} (81%) rename docs/examples/csharp/{native-example => asyncQuery}/asyncquery.csproj (98%) rename docs/examples/csharp/{native-example/ConnectExample.cs => connect/Program.cs} (90%) rename docs/examples/csharp/{native-example => connect}/connect.csproj (98%) create mode 100644 docs/examples/csharp/csharp.sln rename docs/examples/csharp/{native-example/InfluxDBLineExample.cs => influxdbLine/Program.cs} (73%) rename docs/examples/csharp/{native-example => influxdbLine}/influxdbline.csproj (98%) delete mode 100644 docs/examples/csharp/native-example/QueryExample.cs delete mode 100644 docs/examples/csharp/native-example/SQLInsertExample.cs delete mode 100644 docs/examples/csharp/native-example/SubscribeDemo.cs delete mode 100644 docs/examples/csharp/native-example/subscribe.csproj rename docs/examples/csharp/{native-example/OptsJsonExample.cs => optsJSON/Program.cs} (53%) rename docs/examples/csharp/{native-example/optsjson.csproj => optsJSON/optsJSON.csproj} (98%) rename docs/examples/csharp/{native-example/OptsTelnetExample.cs => optsTelnet/Program.cs} (59%) rename docs/examples/csharp/{native-example => optsTelnet}/optstelnet.csproj (98%) create mode 100644 docs/examples/csharp/query/Program.cs rename docs/examples/csharp/{native-example => query}/query.csproj (98%) create mode 100644 docs/examples/csharp/sqlInsert/Program.cs rename docs/examples/csharp/{native-example => sqlInsert}/sqlinsert.csproj (98%) rename docs/examples/csharp/{native-example/StmtInsertExample.cs => stmtInsert/Program.cs} (52%) rename docs/examples/csharp/{native-example => stmtInsert}/stmtinsert.csproj (98%) create mode 100644 docs/examples/csharp/wsConnect/Program.cs create mode 100644 docs/examples/csharp/wsConnect/wsConnect.csproj create mode 100644 docs/examples/csharp/wsInsert/Program.cs create mode 100644 docs/examples/csharp/wsInsert/wsInsert.csproj create mode 100644 docs/examples/csharp/wsQuery/Program.cs create mode 100644 docs/examples/csharp/wsQuery/wsQuery.csproj create mode 100644 docs/examples/csharp/wsStmt/Program.cs create mode 100644 docs/examples/csharp/wsStmt/wsStmt.csproj create mode 100644 docs/examples/java/src/main/java/com/taos/example/highvolume/DataBaseMonitor.java create mode 100644 docs/examples/java/src/main/java/com/taos/example/highvolume/FastWriteExample.java create mode 100644 docs/examples/java/src/main/java/com/taos/example/highvolume/MockDataSource.java create mode 100644 docs/examples/java/src/main/java/com/taos/example/highvolume/ReadTask.java create mode 100644 docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java create mode 100644 docs/examples/java/src/main/java/com/taos/example/highvolume/StmtWriter.java create mode 100644 docs/examples/java/src/main/java/com/taos/example/highvolume/WriteTask.java create mode 100644 docs/examples/python/fast_write_example.py create mode 100644 docs/examples/python/kafka_example_common.py create mode 100644 docs/examples/python/kafka_example_consumer.py create mode 100644 docs/examples/python/kafka_example_perform.py create mode 100644 docs/examples/python/kafka_example_producer.py create mode 100644 docs/examples/python/mockdatasource.py create mode 100644 docs/examples/python/sql_writer.py create mode 100644 docs/examples/python/tmq_websocket_example.py create mode 100644 docs/zh/02-intro.md create mode 100644 docs/zh/04-concept/_category_.yml create mode 100644 docs/zh/04-concept/index.md create mode 100644 docs/zh/04-concept/supertable.webp create mode 100644 docs/zh/07-data-in/02-prometheus.md create mode 100644 docs/zh/07-data-in/03-telegraf.md create mode 100644 docs/zh/07-data-in/30-schemaless-influxdb.md create mode 100644 docs/zh/07-data-in/35-schemaless-opentsdb-json.md create mode 100644 docs/zh/07-data-in/38-schemaless-opentsdb-telnet.md create mode 100644 docs/zh/07-data-in/index.md create mode 100644 docs/zh/07-data-in/prometheus_data.webp create mode 100644 docs/zh/07-data-in/prometheus_read.webp create mode 100644 docs/zh/07-data-in/telegraf-show-databases.webp create mode 100644 docs/zh/07-data-in/telegraf-show-stables.webp create mode 100644 docs/zh/09-data-out/04-taosdump.md create mode 100644 docs/zh/09-data-out/05-prometheus.md create mode 100644 docs/zh/09-data-out/index.md create mode 100644 docs/zh/09-data-out/prometheus_data.webp create mode 100644 docs/zh/09-data-out/prometheus_read.webp create mode 100644 docs/zh/10-programming/01-connect/01-python.md create mode 100644 docs/zh/10-programming/01-connect/02-java.md create mode 100644 docs/zh/10-programming/01-connect/03-go.md create mode 100644 docs/zh/10-programming/01-connect/04-rust.md create mode 100644 docs/zh/10-programming/01-connect/05-node.md create mode 100644 docs/zh/10-programming/01-connect/06-csharp.md create mode 100644 docs/zh/10-programming/01-connect/09-rest-api.md create mode 100644 docs/zh/10-programming/01-connect/_category_.yml create mode 100644 docs/zh/10-programming/01-connect/index.md create mode 100644 docs/zh/10-programming/02-model.md create mode 100644 docs/zh/10-programming/03-insert.md create mode 100644 docs/zh/10-programming/04-query.md create mode 100644 docs/zh/10-programming/06-connector/01-python.md create mode 100644 docs/zh/10-programming/06-connector/02-java.md create mode 100644 docs/zh/10-programming/06-connector/03-go.md create mode 100644 docs/zh/10-programming/06-connector/04-rust.md create mode 100644 docs/zh/10-programming/06-connector/05-node.md create mode 100644 docs/zh/10-programming/06-connector/06-csharp.md create mode 100644 docs/zh/10-programming/06-connector/09-rest-api.md create mode 100644 docs/zh/10-programming/06-connector/_category_.yml create mode 100644 docs/zh/10-programming/06-connector/index.md create mode 100644 docs/zh/10-programming/_category_.yml create mode 100644 docs/zh/10-programming/create-database.png create mode 100644 docs/zh/10-programming/index.md create mode 100644 docs/zh/11-visual/01-grafana.md create mode 100644 docs/zh/11-visual/02-gds.md create mode 100644 docs/zh/11-visual/gds/gds_cloud_login.webp create mode 100644 docs/zh/11-visual/gds/gds_data_source.webp create mode 100644 docs/zh/11-visual/grafana/add_datasource1.webp create mode 100644 docs/zh/11-visual/grafana/add_datasource2.webp create mode 100644 docs/zh/11-visual/grafana/add_datasource3.webp create mode 100644 docs/zh/11-visual/grafana/add_datasource4.webp create mode 100644 docs/zh/11-visual/grafana/click-plugin-menu-from-config.webp create mode 100644 docs/zh/11-visual/grafana/create_dashboard1.webp create mode 100644 docs/zh/11-visual/grafana/create_dashboard2.webp create mode 100644 docs/zh/11-visual/grafana/search-tdengine-from-config.webp create mode 100644 docs/zh/11-visual/grafana/verifying-tdengine-datasource.webp create mode 100644 docs/zh/11-visual/index.md create mode 100644 docs/zh/12-data-subscription/example/share-topic-example.webp create mode 100644 docs/zh/12-data-subscription/index.md create mode 100644 docs/zh/12-data-subscription/share/share-topic-adduser.webp create mode 100644 docs/zh/12-data-subscription/share/share-topic-addusergroup.webp create mode 100644 docs/zh/12-data-subscription/share/share-topic-usergroup.webp create mode 100644 docs/zh/12-data-subscription/share/share-topic-users.webp create mode 100644 docs/zh/12-data-subscription/topic/add-topic-db.webp create mode 100644 docs/zh/12-data-subscription/topic/add-topic-stable.webp create mode 100644 docs/zh/12-data-subscription/topic/add-topic-sub-stable.webp create mode 100644 docs/zh/12-data-subscription/topic/add-topic-sub-table.webp create mode 100644 docs/zh/12-stream.md create mode 100644 docs/zh/13-replication/index.md create mode 100644 docs/zh/19-tools/01-cli.md create mode 100644 docs/zh/19-tools/03-taosbenchmark.md create mode 100644 docs/zh/19-tools/06-taosdump.md create mode 100644 docs/zh/19-tools/index.md create mode 100644 docs/zh/22-user-management/01-orgs/images/neworg.webp create mode 100644 docs/zh/22-user-management/01-orgs/images/orglist.webp create mode 100644 docs/zh/22-user-management/01-orgs/images/orgname.webp create mode 100644 docs/zh/22-user-management/01-orgs/images/orgprivileges.webp create mode 100644 docs/zh/22-user-management/01-orgs/images/orgtransfer.webp create mode 100644 docs/zh/22-user-management/01-orgs/index.md create mode 100644 docs/zh/22-user-management/02-users/01-users.md create mode 100644 docs/zh/22-user-management/02-users/index.md create mode 100644 docs/zh/22-user-management/index.md create mode 100644 docs/zh/eco_system.webp create mode 100644 examples/c/tmq.c delete mode 100644 tests/script/sh/abs_max.c delete mode 100644 tests/script/sh/add_one.c delete mode 100644 tests/script/sh/add_one_64232.c create mode 100644 tests/script/sh/bit_and.c create mode 100755 tests/script/sh/checkAsan.sh create mode 100755 tests/script/sh/checkValgrind.sh create mode 100755 tests/script/sh/compile_udf.sh create mode 100644 tests/script/sh/copy_udf.bat create mode 100755 tests/script/sh/copy_udf.sh delete mode 100644 tests/script/sh/demo.c delete mode 100644 tests/script/sh/demo.lua create mode 100644 tests/script/sh/gpd.c create mode 100644 tests/script/sh/l2norm.c delete mode 100755 tests/script/sh/move_dnode.sh mode change 100755 => 100644 tests/script/sh/prepare_udf.sh create mode 100755 tests/script/sh/sigint_stop_dnodes.sh delete mode 100644 tests/script/sh/sub_one.c delete mode 100644 tests/script/sh/sum_double.c diff --git a/docs/en/02-intro.md b/docs/en/02-intro.md index f0e1bc10b2..accc393029 100644 --- a/docs/en/02-intro.md +++ b/docs/en/02-intro.md @@ -23,8 +23,8 @@ The major features are listed below: 3. Data Explorer: browse through databases and even run SQL queries once you login. 4. Visualization: - Supports [Grafana](../visual/grafana/) - - Supports Google data studio - - Supports Grafana cloud (to be released soon) + - Supports Google Data Studio + - Supports Grafana Cloud (to be released soon) 5. [Data Subscription](../data-subscription/): Application can subscribe a table or a set of tables. API is the same as Kafka, but you can specify filter conditions and you can share the topic with other users and user groups in TDengien Cloud. 6. [Stream Processing](../stream/): Not only is the continuous query is supported, but TDengine also supports event driven stream processing, so Flink or Spark is not needed for time-series data processing. 7. Enterprise diff --git a/docs/en/07-data-in/20-telegraf.md b/docs/en/07-data-in/20-telegraf.md index 51cf08bedc..d29685d082 100644 --- a/docs/en/07-data-in/20-telegraf.md +++ b/docs/en/07-data-in/20-telegraf.md @@ -55,7 +55,7 @@ Edit section "outputs.http". {{#include docs/examples/thirdparty/telegraf-conf.toml:null:nrc}} ``` -The resulting configuration will collect CPU and memory data and sends it to TDengine database named "telegraf". Database "telegraf" will be created automatically if it dose not exist in advance. +The resulting configuration will collect CPU and memory data and sends it to TDengine database named "telegraf". Database "telegraf" must be created first through TDengine Cloud explorer. ## Start Telegraf diff --git a/docs/en/09-data-out/04-taosdump.md b/docs/en/09-data-out/04-taosdump.md index 3a4198e53b..481337e5ec 100644 --- a/docs/en/09-data-out/04-taosdump.md +++ b/docs/en/09-data-out/04-taosdump.md @@ -4,7 +4,7 @@ title: Dump Data Using taosDump description: Dump data from TDengine into files using taosDump --- -# taosDump +## Overview taosdump is a tool that supports backing up data from a running TDengine cluster and restoring the backed up data to the same, or another running TDengine cluster. diff --git a/docs/en/09-data-out/_sub_c.mdx b/docs/en/09-data-out/_sub_c.mdx deleted file mode 100644 index b0667268e9..0000000000 --- a/docs/en/09-data-out/_sub_c.mdx +++ /dev/null @@ -1,3 +0,0 @@ -```c -{{#include docs/examples/c/tmq_example.c}} -``` diff --git a/docs/en/09-data-out/_sub_cs.mdx b/docs/en/09-data-out/_sub_cs.mdx deleted file mode 100644 index a09e91422b..0000000000 --- a/docs/en/09-data-out/_sub_cs.mdx +++ /dev/null @@ -1,3 +0,0 @@ -```csharp -{{#include docs/examples/csharp/native-example/SubscribeDemo.cs}} -``` \ No newline at end of file diff --git a/docs/en/09-data-out/_sub_go.mdx b/docs/en/09-data-out/_sub_go.mdx deleted file mode 100644 index 34b2aefd92..0000000000 --- a/docs/en/09-data-out/_sub_go.mdx +++ /dev/null @@ -1,3 +0,0 @@ -```go -{{#include docs/examples/go/sub/main.go}} -``` \ No newline at end of file diff --git a/docs/en/09-data-out/_sub_java.mdx b/docs/en/09-data-out/_sub_java.mdx deleted file mode 100644 index d14b5fd609..0000000000 --- a/docs/en/09-data-out/_sub_java.mdx +++ /dev/null @@ -1,11 +0,0 @@ -```java -{{#include docs/examples/java/src/main/java/com/taos/example/SubscribeDemo.java}} -{{#include docs/examples/java/src/main/java/com/taos/example/MetersDeserializer.java}} -{{#include docs/examples/java/src/main/java/com/taos/example/Meters.java}} -``` -```java -{{#include docs/examples/java/src/main/java/com/taos/example/MetersDeserializer.java}} -``` -```java -{{#include docs/examples/java/src/main/java/com/taos/example/Meters.java}} -``` \ No newline at end of file diff --git a/docs/en/09-data-out/_sub_node.mdx b/docs/en/09-data-out/_sub_node.mdx deleted file mode 100644 index 3eeff0922a..0000000000 --- a/docs/en/09-data-out/_sub_node.mdx +++ /dev/null @@ -1,3 +0,0 @@ -```js -{{#include docs/examples/node/nativeexample/subscribe_demo.js}} -``` \ No newline at end of file diff --git a/docs/en/09-data-out/_sub_python.mdx b/docs/en/09-data-out/_sub_python.mdx deleted file mode 100644 index 1309da5b41..0000000000 --- a/docs/en/09-data-out/_sub_python.mdx +++ /dev/null @@ -1,3 +0,0 @@ -```py -{{#include docs/examples/python/tmq_example.py}} -``` diff --git a/docs/en/09-data-out/_sub_rust.mdx b/docs/en/09-data-out/_sub_rust.mdx deleted file mode 100644 index eb06c8f18c..0000000000 --- a/docs/en/09-data-out/_sub_rust.mdx +++ /dev/null @@ -1,3 +0,0 @@ -```rust -{{#include docs/examples/rust/cloud-example/examples/subscribe_demo.rs}} -``` diff --git a/docs/en/10-programming/01-connect/01-python.md b/docs/en/10-programming/01-connect/01-python.md index f35641d16f..04b34c3241 100644 --- a/docs/en/10-programming/01-connect/01-python.md +++ b/docs/en/10-programming/01-connect/01-python.md @@ -88,7 +88,7 @@ For more details about how to write or query data via REST API, please check [RE ## Jupyter -**Step 1: Install** +### Step 1: Install For the users who are familiar with Jupyter to program in Python, both TDengine Python connector and Jupyter need to be ready in your environment. If you have not done yet, please use the commands below to install them. @@ -113,9 +113,9 @@ conda install -c conda-forge taospy -**Step 2: Configure** +### Step 2: Configure -In order for Jupyter to connect to TDengine cloud service, before launching Jupypter, the environment setting must be performed. We use Linux bash as example. +In order for Jupyter to connect to TDengine cloud service, before launching Jupyter, the environment setting must be performed. We use Linux bash as example. ```bash export TDENGINE_CLOUD_TOKEN="" @@ -123,7 +123,7 @@ export TDENGINE_CLOUD_URL="" jupyter lab ``` -**Step 3: Connect** +### Step 3: Connect Once jupyter lab is launched, Jupyter lab service is automatically connected and shown in your browser. You can create a new notebook and copy the sample code below and run it. diff --git a/docs/en/10-programming/01-connect/02-java.md b/docs/en/10-programming/01-connect/02-java.md index f9c79f1801..0f55200d08 100644 --- a/docs/en/10-programming/01-connect/02-java.md +++ b/docs/en/10-programming/01-connect/02-java.md @@ -71,7 +71,7 @@ To obtain the value of JDBC URL, please log in [TDengine Cloud](https://cloud.td ## Connect -Code bellow get JDBC URL from environment variables first and then create a `Connection` object, witch is a standard JDBC Connection object. +Code bellow get JDBC URL from environment variables first and then create a `Connection` object, which is a standard JDBC Connection object. ```java {{#include docs/examples/java/src/main/java/com/taos/example/ConnectCloudExample.java:connect}} diff --git a/docs/en/10-programming/01-connect/04-rust.md b/docs/en/10-programming/01-connect/04-rust.md index d0e0d013ef..7c6f4032b5 100644 --- a/docs/en/10-programming/01-connect/04-rust.md +++ b/docs/en/10-programming/01-connect/04-rust.md @@ -31,7 +31,7 @@ anyhow = "1.0.0" ## Config -Run this command in your terminal to save TDengine cloud token as variables: +Run this command in your terminal to save TDengine cloud DSN as variables: diff --git a/docs/en/10-programming/01-connect/06-csharp.md b/docs/en/10-programming/01-connect/06-csharp.md index 0fe7e3baa8..46e5699f67 100644 --- a/docs/en/10-programming/01-connect/06-csharp.md +++ b/docs/en/10-programming/01-connect/06-csharp.md @@ -33,7 +33,9 @@ Add following ItemGroup and Task to your project file. +``` +```bash dotnet add package TDengine.Connector ``` diff --git a/docs/en/10-programming/02-model.md b/docs/en/10-programming/02-model.md index 14f4a0b01e..6223ae84da 100644 --- a/docs/en/10-programming/02-model.md +++ b/docs/en/10-programming/02-model.md @@ -3,7 +3,9 @@ title: Data Model description: Typical Data Model used in TDengine --- -The data model employed by TDengine is similar to that of a relational database. You have to create databases and tables. You must design the data model based on your own business and application requirements. You should design the STable (an abbreviation for super table) schema to fit your data. This chapter will explain the big picture without getting into syntactical details. +The data model employed by TDengine is similar to that of a relational database. You have to create databases and tables. You must design the data model based on your own business and application requirements. You should design the [STable](/concept/#super-table-stable) (an abbreviation for super table) schema to fit your data. This chapter will explain the big picture without getting into syntactical details. + +Note: before you read this chapter, please make sure you have already read through [Key Concepts](/concept/), since TDengine introduces new concepts like "one table for one [data collection point](/concept/#data-collection-point)" and "[super table](/concept/#super-table-stable)". ## Create Database diff --git a/docs/en/10-programming/03-insert.md b/docs/en/10-programming/03-insert.md index b31d38a44b..86f57102b1 100644 --- a/docs/en/10-programming/03-insert.md +++ b/docs/en/10-programming/03-insert.md @@ -33,7 +33,7 @@ INSERT INTO test.d101 VALUES (1538548684000, 10.2, 220, 0.23) (1538548696650, 10 Data can be inserted into multiple tables in the same SQL statement. The example below inserts 2 rows into table "d101" and 1 row into table "d102". ```sql -INSERT INTO test.d101 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6, 218, 0.33) d102 VALUES (1538548696800, 12.3, 221, 0.31); +INSERT INTO test.d101 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6, 218, 0.33) test.d102 VALUES (1538548696800, 12.3, 221, 0.31); ``` For more details about `INSERT` please refer to [INSERT](https://docs.tdengine.com/cloud/taos-sql/insert). diff --git a/docs/en/10-programming/04-query.md b/docs/en/10-programming/04-query.md index c7ab775ca8..4b23ac6929 100644 --- a/docs/en/10-programming/04-query.md +++ b/docs/en/10-programming/04-query.md @@ -42,7 +42,7 @@ For detailed query syntax please refer to [Select](https://docs.tdengine.com/clo In most use cases, there are always multiple kinds of data collection points. A new concept, called STable (abbreviation for super table), is used in TDengine to represent one type of data collection point, and a subtable is used to represent a specific data collection point of that type. Tags are used by TDengine to represent the static properties of data collection points. A specific data collection point has its own values for static properties. By specifying filter conditions on tags, aggregation can be performed efficiently among all the subtables created via the same STable, i.e. same type of data collection points. Aggregate functions applicable for tables can be used directly on STables; the syntax is exactly the same. -In summary, records across subtables can be aggregated by a simple query on their STable. It is like a join operation. However, tables belonging to different STables can not be aggregated. +In summary, records across subtables can be aggregated by a simple query on their STable. It is like a join operation. However, tables belonging to different STables can not be aggregated. ### Example 1 @@ -106,6 +106,7 @@ Down sampling can also be used for STable. For example, the below SQL statement ```sql title="SQL" SELECT _wstart, SUM(current) FROM test.meters where location like "California%" INTERVAL(1s) limit 5; ``` + ```txt title="output" _wstart | sum(current) | ====================================================== diff --git a/docs/en/10-programming/06-connector/01-python.md b/docs/en/10-programming/06-connector/01-python.md index 7875f1ca1c..ab6da4b263 100644 --- a/docs/en/10-programming/06-connector/01-python.md +++ b/docs/en/10-programming/06-connector/01-python.md @@ -18,12 +18,12 @@ The source code for the Python connector is hosted on [GitHub](https://github.co ### Install via pip ``` -pip3 install -U taospy +pip3 install -U taospy[ws] ``` ### Install vial conda ``` -conda install -c conda-forge taospy +conda install -c conda-forge taospy taospyws ``` ### Installation verification @@ -75,16 +75,45 @@ The `RestClient` class is a direct wrapper for the [REST API](/reference/rest-ap For a more detailed description of the `sql()` method, please refer to [RestClient](https://docs.taosdata.com/api/taospy/taosrest/restclient.html). -## Important Update +## Other notes + +### Exception handling + +All errors from database operations are thrown directly as exceptions and the error message from the database is passed up the exception stack. The application is responsible for exception handling. For example: + +```python +import taos + +try: + conn = taos.connect() + conn.execute("CREATE TABLE 123") # wrong sql +except taos.Error as e: + print(e) + print("exception class: ", e.__class__.__name__) + print("error number:", e.errno) + print("error message:", e.msg) +except BaseException as other: + print("exception occur") + print(other) + +# output: +# [0x0216]: syntax error near 'Incomplete SQL statement' +# exception class: ProgrammingError +# error number: -2147483114 +# error message: syntax error near 'Incomplete SQL statement' + +``` + +[view source code](https://github.com/taosdata/TDengine/blob/3.0/docs/examples/python/handle_exception.py) + +### About nanoseconds -| Connector version | Important Update | Release date | -| ----------------- | ----------------------------------------- | ------------ | -| 2.6.2 | fix ci script | 2022-08-18 | -| 2.5.2 | fix taos-ws-py python version dependency | 2022-08-12 | -| 2.5.1 | (rest): add timezone option | 2022-08-11 | -| 2.5.0 | add taosws module | 2022-08-10 | -| 2.4.0 | add execute method to TaosRestConnection | 2022-07-18 | -| 2.3.3 | support connect to TDengine Cloud Service | 2022-06-06 | +Due to the current imperfection of Python's nanosecond support (see link below), the current implementation returns integers at nanosecond precision instead of the `datetime` type produced by `ms` and `us`, which application developers will need to handle on their own. And it is recommended to use pandas' to_datetime(). The Python Connector may modify the interface in the future if Python officially supports nanoseconds in full. + +1. https://stackoverflow.com/questions/10611328/parsing-datetime-strings-containing-nanoseconds +2. https://www.python.org/dev/peps/pep-0564/ + +## Important Update [**Release Notes**](https://github.com/taosdata/taos-connector-python/releases) diff --git a/docs/en/10-programming/06-connector/02-java.md b/docs/en/10-programming/06-connector/02-java.md index d16b21621b..9cea45d3cc 100644 --- a/docs/en/10-programming/06-connector/02-java.md +++ b/docs/en/10-programming/06-connector/02-java.md @@ -16,19 +16,19 @@ import TabItem from '@theme/TabItem'; TDengine currently supports timestamp, number, character, Boolean type, and the corresponding type conversion with Java is as follows: -| TDengine DataType | JDBCType (driver version < 2.0.24) | JDBCType (driver version > = 2.0.24) | -| ----------------- | ---------------------------------- | ------------------------------------ | -| TIMESTAMP | java.lang.Long | java.sql.Timestamp | -| INT | java.lang.Integer | java.lang.Integer | -| BIGINT | java.lang.Long | java.lang.Long | -| FLOAT | java.lang.Float | java.lang.Float | -| DOUBLE | java.lang.Double | java.lang.Double | -| SMALLINT | java.lang.Short | java.lang.Short | -| TINYINT | java.lang.Byte | java.lang.Byte | -| BOOL | java.lang.Boolean | java.lang.Boolean | -| BINARY | java.lang.String | byte array | -| NCHAR | java.lang.String | java.lang.String | -| JSON | - | java.lang.String | +| TDengine DataType | JDBCType | +| ----------------- | ---------------------------------- | +| TIMESTAMP | java.sql.Timestamp | +| INT | java.lang.Integer | +| BIGINT | java.lang.Long | +| FLOAT | java.lang.Float | +| DOUBLE | java.lang.Double | +| SMALLINT | java.lang.Short | +| TINYINT | java.lang.Byte | +| BOOL | java.lang.Boolean | +| BINARY | byte array | +| NCHAR | java.lang.String | +| JSON | java.lang.String | **Note**: Only TAG supports JSON types @@ -53,7 +53,7 @@ Add following dependency in the `pom.xml` file of your Maven project: com.taosdata.jdbc taos-jdbcdriver - 2.0.** + 3.0.0 ``` @@ -68,7 +68,7 @@ cd taos-connector-jdbc mvn clean install -Dmaven.test.skip=true ``` -After compilation, a jar package named taos-jdbcdriver-2.0.XX-dist.jar is generated in the target directory, and the compiled jar file is automatically placed in the local Maven repository. +After compilation, a jar package named taos-jdbcdriver-3.0.*-dist.jar is generated in the target directory, and the compiled jar file is automatically placed in the local Maven repository. @@ -76,8 +76,7 @@ After compilation, a jar package named taos-jdbcdriver-2.0.XX-dist.jar is genera ## Establish Connection using URL TDengine's JDBC URL specification format is: -`jdbc:[TAOS-RS]://[host_name]:[port]/[database_name]?batchfetch={true|false}&useSSL={true|false}&token={token}&httpPoolSize={httpPoolSize}&httpKeepAlive={true|false}]&httpConnectTimeout={httpTimeout}&httpSocketTimeout={socketTimeout}` - +`jdbc:TAOS-RS://[host_name]:[port]/[database_name]?batchfetch={true|false}&useSSL={true|false}&token={token}&httpPoolSize={httpPoolSize}&httpKeepAlive={true|false}]&httpConnectTimeout={httpTimeout}&httpSocketTimeout={socketTimeout}` ```java Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); @@ -85,7 +84,7 @@ String jdbcUrl = System.getenv("TDENGINE_JDBC_URL"); Connection conn = DriverManager.getConnection(jdbcUrl); ``` -Note: +:::note - REST API is stateless. When using the JDBC REST connection, you need to specify the database name of the table and super table in SQL. For example. @@ -97,7 +96,7 @@ Note: ```sql insert into test using weather(ts, temperature) tags('California.SanFrancisco') values(now, 24.6); ``` - +::: ### Establish Connection using URL and Properties @@ -120,7 +119,6 @@ If the configuration parameters are duplicated in the URL, Properties, the `prio 1. JDBC URL parameters, as described above, can be specified in the parameters of the JDBC URL. 2. Properties connProps - ## Usage Examples ### Create Database and Tables @@ -141,8 +139,8 @@ int affectedRows = stmt.executeUpdate("insert into tb values(now, 23, 10.3) (now System.out.println("insert " + affectedRows + " rows."); ``` -`now`` is an internal function. The default is the current time of the client's computer. - +> `now` is an internal function. The default is the current time of the client's computer. +> `now + 1s` represents the current time of the client plus 1 second, followed by the number representing the unit of time: a (milliseconds), s (seconds), m (minutes), h (hours), d (days), w (weeks), n (months), y (years). ### Querying data @@ -188,6 +186,9 @@ There are three types of error codes that the JDBC connector can report: - Error code of the native connection method (error code between 0x2351 and 0x2400) - Error code of other TDengine function modules +For specific error codes, please refer to. + +- [TDengine Java Connector](https://github.com/taosdata/taos-connector-jdbc/blob/main/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java) ### Closing resources @@ -197,10 +198,10 @@ stmt.close(); conn.close(); ``` -:::note +:::note Be sure to close the connection, otherwise, there will be a connection leak. - ::: + ### Use with Connection Pool #### HikariCP @@ -283,12 +284,51 @@ Please refer to: [JDBC example](https://github.com/taosdata/TDengine/tree/develo ## Recent update logs -| taos-jdbcdriver version | major changes | -| :---------------------: | :------------------------------------------: | -| 2.0.38 | JDBC REST connections add bulk pull function | -| 2.0.37 | Added support for json tags | -| 2.0.36 | Add support for schemaless writing | +| taos-jdbcdriver version | major changes | +| :---------------------: | :--------------------------------------------: | +| 3.0.3 | fix timestamp resolution error for REST connection in jdk17+ version | +| 3.0.1 - 3.0.2 | fix the resultSet data is parsed incorrectly sometimes. 3.0.1 is compiled on JDK 11, you are advised to use 3.0.2 in the JDK 8 environment | +| 3.0.0 | Support for TDengine 3.0 | +| 2.0.42 | fix wasNull interface return value in WebSocket connection | +| 2.0.41 | fix decode method of username and password in REST connection | +| 2.0.39 - 2.0.40 | Add REST connection/request timeout parameters | +| 2.0.38 | JDBC REST connections add bulk pull function | +| 2.0.37 | Support json tags | +| 2.0.36 | Support schemaless writing | + +## Frequently Asked Questions + +1. Why is there no performance improvement when using Statement's `addBatch()` and `executeBatch()` to perform `batch data writing/update`? + + **Cause**: In TDengine's JDBC implementation, SQL statements submitted by `addBatch()` method are executed sequentially in the order they are added, which does not reduce the number of interactions with the server and does not bring performance improvement. + + **Solution**: 1. splice multiple values in a single insert statement; 2. use multi-threaded concurrent insertion; 3. use parameter-bound writing + +2. java.lang.UnsatisfiedLinkError: no taos in java.library.path + + **Cause**: The program did not find the dependent native library `taos`. + + **Solution**: On Windows you can copy `C:\TDengine\driver\taos.dll` to the `C:\Windows\System32` directory, on Linux the following soft link will be created `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` will work, on macOS the lib soft link will be `/usr/local/lib/libtaos.dylib`. + +3. java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform + + **Cause**: Currently, TDengine only supports 64-bit JDK. + + **Solution**: Reinstall the 64-bit JDK. + +4. java.lang.NoSuchMethodError: setByteArray + + **Cause**: taos-jbdcdriver 3.* only supports TDengine 3.0 and later. + + **Solution**: Use taos-jdbcdriver 2.* with your TDengine 2.* deployment. + +5. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar + +**Cause**:taos-jdbcdriver 3.0.1 is compiled on JDK 11. + +**Solution**: Use taos-jdbcdriver 3.0.2. +For additional troubleshooting, see [FAQ](../../../train-faq/faq). ## API Reference diff --git a/docs/en/10-programming/06-connector/03-go.md b/docs/en/10-programming/06-connector/03-go.md index 9de2b31412..e59423b422 100644 --- a/docs/en/10-programming/06-connector/03-go.md +++ b/docs/en/10-programming/06-connector/03-go.md @@ -10,26 +10,40 @@ This article describes how to install `driver-go` and connect to TDengine cluste The source code of `driver-go` is hosted on [GitHub](https://github.com/taosdata/driver-go). -## Installation steps +## Version support + +Please refer to [version support list](/reference/connector#version-support) + +## Installation Steps + +### Pre-installation preparation + +* Install Go development environment (Go 1.14 and above, GCC 4.8.5 and above) +- If you use the native connector, please install the TDengine client driver. Please refer to [Install Client Driver](/reference/connector/#install-client-driver) for specific steps + +Configure the environment variables and check the command. + +* ```go env``` +* ```gcc -v``` + ### Use go get to install -``` -go get -u github.com/taosdata/driver-go/v2@develop -``` +`go get -u github.com/taosdata/driver-go/v3@latest` + ### Manage with go mod 1. Initialize the project with the `go mod` command. ```text go mod init taos-demo - ``` + ``` 2. Introduce taosSql ```go import ( "database/sql" - _ "github.com/taosdata/driver-go/v2/taosSql" + _ "github.com/taosdata/driver-go/v3/taosSql" ) ``` @@ -37,7 +51,7 @@ go get -u github.com/taosdata/driver-go/v2@develop ```text go mod tidy - ``` + ``` 4. Run the program with `go run taos-demo` or compile the binary with the `go build` command. @@ -46,7 +60,7 @@ go get -u github.com/taosdata/driver-go/v2@develop go build ``` -## Create a connection +## Establishing a connection ### Data source name (DSN) @@ -73,7 +87,10 @@ Use `taosRestful` as `driverName` and use a correct [DSN](#DSN) as `dataSourceNa ## Sample programs -* [sample program](https://github.com/taosdata/TDengine/tree/develop/examples/go) +### More sample programs + +* [sample program](https://github.com/taosdata/driver-go/tree/3.0/examples) + * [Video tutorial](https://www.taosdata.com/blog/2020/11/11/1951.html). ## Usage limitations @@ -92,7 +109,7 @@ import ( "fmt" "time" - _ "github.com/taosdata/driver-go/v2/taosRestful" + _ "github.com/taosdata/driver-go/v3/taosRestful" ) func main() { @@ -187,7 +204,6 @@ This API is created successfully without checking permissions, but only when you `sql.Open` Built-in method to execute query statements. - ## API Reference -Full API see [driver-go documentation](https://pkg.go.dev/github.com/taosdata/driver-go/v2) \ No newline at end of file +Full API see [driver-go documentation](https://pkg.go.dev/github.com/taosdata/driver-go/v3) \ No newline at end of file diff --git a/docs/en/10-programming/06-connector/04-rust.md b/docs/en/10-programming/06-connector/04-rust.md index 99765329f4..2e52afb6b0 100644 --- a/docs/en/10-programming/06-connector/04-rust.md +++ b/docs/en/10-programming/06-connector/04-rust.md @@ -3,13 +3,19 @@ toc_max_heading_level: 4 sidebar_position: 5 sidebar_label: Rust title: TDengine Rust Connector -description: Detailed guide for Rust Connector +description: This document describes the TDengine Rust connector. --- +[![Crates.io](https://img.shields.io/crates/v/taos)](https://crates.io/crates/taos) ![Crates.io](https://img.shields.io/crates/d/taos) [![docs.rs](https://img.shields.io/docsrs/taos)](https://docs.rs/taos) +`taos` is the official Rust connector for TDengine. Rust developers can develop applications to access the TDengine instance data. -`libtaos` is the official Rust language connector for TDengine. Rust developers can develop applications to access the TDengine instance data. +The source code for the Rust connectors is located on [GitHub](https://github.com/taosdata/taos-connector-rust). -The source code for `libtaos` is hosted on [GitHub](https://github.com/taosdata/libtaos-rs). +## Version support + +Please refer to [version support list](/reference/connector#version-support) + +The Rust Connector is still under rapid development and is not guaranteed to be backward compatible before 1.0. We recommend using TDengine version 3.0 or higher to avoid known issues. ## Installation @@ -17,74 +23,76 @@ The source code for `libtaos` is hosted on [GitHub](https://github.com/taosdata/ Install the Rust development toolchain. -### Adding libtaos dependencies - -```toml -[dependencies] -# use rest feature -libtaos = { version = "*", features = ["rest"]} -``` +### Adding taos dependencies -### Using connection pools +Depending on the connection method, add the [taos][taos] dependency in your Rust project as follows: -Please enable the `r2d2` feature in `Cargo.toml`. +In `cargo.toml`, add [taos][taos]: ```toml [dependencies] -libtaos = { version = "*", features = ["rest", "r2d2"] } +# use default feature +taos = "*" ``` -## Create a connection +## Establishing a connection -Create `TaosCfg` from TDengine cloud DSN. The DSN should be in form of `://[:port]?token=`. +[TaosBuilder] creates a connection constructor through the DSN connection description string. +The DSN should be in form of `://[:port]?token=`. ```rust -use libtaos::*; -let cfg = TaosCfg::from_dsn(DSN)?; +let builder = TaosBuilder::from_dsn(DSN)?; ``` You can now use this object to create the connection. ```rust -let conn = cfg.connect()? ; +let conn = builder.build()?; ``` The connection object can create more than one. ```rust -let conn = cfg.connect()? ; -let conn2 = cfg.connect()? ; -``` - -You can use connection pools in applications. - -```rust -let pool = r2d2::Pool::builder() - .max_size(10000) // max connections - .build(cfg)? ; - -// ... -// Use pool to get connection -let conn = pool.get()? ; +let conn1 = builder.build()?; +let conn2 = builder.build()?; ``` After that, you can perform the following operations on the database. ```rust -async fn demo() -> Result<(), Error> { - // get connection ... - - // create database - conn.exec("create database if not exists demo").await? - // create table - conn.exec("create table if not exists demo.tb1 (ts timestamp, v int)").await? - // insert - conn.exec("insert into demo.tb1 values(now, 1)").await? - // query - let rows = conn.query("select * from demo.tb1").await? - for row in rows.rows { - println!("{}", row.into_iter().join(",")); +async fn demo(taos: &Taos, db: &str) -> Result<(), Error> { + // prepare database + taos.exec_many([ + format!("DROP DATABASE IF EXISTS `{db}`"), + format!("CREATE DATABASE `{db}`"), + format!("USE `{db}`"), + ]) + .await?; + + let inserted = taos.exec_many([ + // create super table + "CREATE TABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT, `phase` FLOAT) \ + TAGS (`groupid` INT, `location` BINARY(24))", + // create child table + "CREATE TABLE `d0` USING `meters` TAGS(0, 'California.LosAngles')", + // insert into child table + "INSERT INTO `d0` values(now - 10s, 10, 116, 0.32)", + // insert with NULL values + "INSERT INTO `d0` values(now - 8s, NULL, NULL, NULL)", + // insert and automatically create table with tags if not exists + "INSERT INTO `d1` USING `meters` TAGS(1, 'California.SanFrancisco') values(now - 9s, 10.1, 119, 0.33)", + // insert many records in a single sql + "INSERT INTO `d1` values (now-8s, 10, 120, 0.33) (now - 6s, 10, 119, 0.34) (now - 4s, 11.2, 118, 0.322)", + ]).await?; + + assert_eq!(inserted, 6); + let mut result = taos.query("select * from `meters`").await?; + + for field in result.fields() { + println!("got field: {}", field.name()); } + + let values = result. } ``` @@ -92,24 +100,26 @@ async fn demo() -> Result<(), Error> { ### Connection pooling -In complex applications, we recommend enabling connection pools. Connection pool for [libtaos] is implemented using [r2d2]. +In complex applications, we recommend enabling connection pools. [taos] implements connection pools based on [r2d2]. As follows, a connection pool with default parameters can be generated. ```rust -let pool = r2d2::Pool::new(cfg)? ; +let pool = TaosBuilder::from_dsn(dsn)?.pool()?; ``` You can set the same connection pool parameters using the connection pool's constructor. ```rust - use std::time::Duration; - let pool = r2d2::Pool::builder() - .max_size(5000) // max connections - .max_lifetime(Some(Duration::from_minutes(100))) // lifetime of each connection - .min_idle(Some(1000)) // minimal idle connections - .connection_timeout(Duration::from_minutes(2)) - .build(cfg); +let dsn = std::env::var("TDENGINE_CLOUD_DSN")?;; + +let opts = PoolBuilder::new() + .max_size(5000) // max connections + .max_lifetime(Some(Duration::from_secs(60 * 60))) // lifetime of each connection + .min_idle(Some(1000)) // minimal idle connections + .connection_timeout(Duration::from_secs(2)); + +let pool = TaosBuilder::from_dsn(dsn)?.with_pool_builder(opts)?; ``` In the application code, use `pool.get()? ` to get a connection object [Taos]. @@ -117,56 +127,99 @@ In the application code, use `pool.get()? ` to get a connection object [Taos]. ```rust let taos = pool.get()? ; ``` +# Connectors -The [Taos] structure is the connection manager in [libtaos] and provides two main APIs. +The [Taos][struct.Taos] object provides an API to perform operations on multiple databases. 1. `exec`: Execute some non-query SQL statements, such as `CREATE`, `ALTER`, `INSERT`, etc. ```rust - taos.exec().await? + let affected_rows = taos.exec("INSERT INTO tb1 VALUES(now, NULL)").await?; + ``` + +2. `exec_many`: Run multiple SQL statements simultaneously or in order. + + ```rust + taos.exec_many([ + "CREATE DATABASE test", + "USE test", + "CREATE TABLE `tb1` (`ts` TIMESTAMP, `val` INT)", + ]).await?; ``` -2. `query`: Execute the query statement and return the [TaosQueryData] object. +3. `query`: Run a query statement and return a [ResultSet] object. ```rust - let q = taos.query("select * from log.logs").await? + let mut q = taos.query("select * from log.logs").await?; ``` - The [TaosQueryData] object stores the query result data and basic information about the returned columns (column name, type, length). + The [ResultSet] object stores query result data and the names, types, and lengths of returned columns - Column information is stored using [ColumnMeta]. + You can obtain column information by using [.fields()]. ```rust - let cols = &q.column_meta; + let cols = q.fields(); for col in cols { - println!("name: {}, type: {:?} , bytes: {}", col.name, col.type_, col.bytes); + println!("name: {}, type: {:?} , bytes: {}", col.name(), col.ty(), col.bytes()); } ``` It fetches data line by line. ```rust - for (i, row) in q.rows.iter().enumerate() { - for (j, cell) in row.iter().enumerate() { - println!("cell({}, {}) data: {}", i, j, cell); + let mut rows = result.rows(); + let mut nrows = 0; + while let Some(row) = rows.try_next().await? { + for (col, (name, value)) in row.enumerate() { + println!( + "[{}] got value in col {} (named `{:>8}`): {}", + nrows, col, name, value + ); } + nrows += 1; } ``` + Or use the [serde](https://serde.rs) deserialization framework. + + ```rust + #[derive(Debug, Deserialize)] + struct Record { + // deserialize timestamp to chrono::DateTime + ts: DateTime, + // float to f32 + current: Option, + // int to i32 + voltage: Option, + phase: Option, + groupid: i32, + // binary/varchar to String + location: String, + } + + let records: Vec = taos + .query("select * from `meters`") + .await? + .deserialize() + .try_collect() + .await?; + ``` + Note that Rust asynchronous functions and an asynchronous runtime are required. -[Taos] provides a few Rust methods that encapsulate SQL to reduce the frequency of `format!` code blocks. +[Taos][struct.Taos] provides Rust methods for some SQL statements to reduce the number of `format!`s. - `.describe(table: &str)`: Executes `DESCRIBE` and returns a Rust data structure. - `.create_database(database: &str)`: Executes the `CREATE DATABASE` statement. +- `.use_database(database: &str)`: Executes the `USE` statement. +In addition, this structure is also the entry point for [Parameter Binding](#Parameter Binding Interface) and [Line Protocol Interface](#Line Protocol Interface). Please refer to the specific API descriptions for usage. -Please move to the Rust documentation hosting page for other related structure API usage instructions: . +For information about other structure APIs, see the [Rust documentation](https://docs.rs/taos). -[libtaos]: https://github.com/taosdata/libtaos-rs -[tdengine]: https://github.com/taosdata/TDengine +[taos]: https://github.com/taosdata/rust-connector-taos [r2d2]: https://crates.io/crates/r2d2 -[TaosCfg]: https://docs.rs/libtaos/latest/libtaos/struct.TaosCfg.html -[Taos]: https://docs.rs/libtaos/latest/libtaos/struct.Taos.html -[TaosQueryData]: https://docs.rs/libtaos/latest/libtaos/field/struct.TaosQueryData.html -[Field]: https://docs.rs/libtaos/latest/libtaos/field/enum.Field.html +[TaosBuilder]: https://docs.rs/taos/latest/taos/struct.TaosBuilder.html +[TaosCfg]: https://docs.rs/taos/latest/taos/struct.TaosCfg.html +[struct.Taos]: https://docs.rs/taos/latest/taos/struct.Taos.html +[Stmt]: https://docs.rs/taos/latest/taos/struct.Stmt.html diff --git a/docs/en/10-programming/06-connector/05-node.md b/docs/en/10-programming/06-connector/05-node.md index 096d65c255..9d3a1de1e8 100644 --- a/docs/en/10-programming/06-connector/05-node.md +++ b/docs/en/10-programming/06-connector/05-node.md @@ -4,9 +4,13 @@ title: TDengine Node.JS Connector description: Detailed guide for Node.JS Connector --- - `td2.0-rest-connector` are the official Node.js language connectors for TDengine. Node.js developers can develop applications to access TDengine instance data. `td2.0-rest-connector` is a **REST connector** that connects to TDengine instances via the REST API. + `@tdengine/rest` are the official Node.js language connectors for TDengine. Node.js developers can develop applications to access TDengine instance data. `@tdengine/rest` is a **REST connector** that connects to TDengine instances via the REST API. -The Node.js connector source code is hosted on [GitHub](https://github.com/taosdata/taos-connector-node). +The source code for the Node.js connectors is located on [GitHub](https://github.com/taosdata/taos-connector-node/tree/3.0). + +## Version support + +Please refer to [version support list](/reference/connector#version-support) ## Installation steps @@ -16,7 +20,7 @@ Install the Node.js development environment ### Install via npm ```bash -npm i td2.0-rest-connector +npm install @tdengine/rest ``` ## Establishing a connection @@ -30,13 +34,31 @@ npm i td2.0-rest-connector {{#include docs/examples/node/reference_example.js:usage}} ``` -## Important Updates +## Frequently Asked Questions + +1. Using REST connections requires starting taosadapter. + + ```bash + sudo systemctl start taosadapter + ``` + +2. Node.js versions + + `@tdengine/client` supports Node.js v10.9.0 to 10.20.0 and 12.8.0 to 12.9.1. + +3. "Unable to establish connection", "Unable to resolve FQDN" + Usually, the root cause is an incorrect FQDN configuration. You can refer to this section in the [FAQ](https://docs.tdengine.com/2.4/train-faq/faq/#2-how-to-handle-unable-to-establish-connection) to troubleshoot. -| td2.0-rest-connector version | Description | -| ------------------------- | ---------------------------------------------------------------- | -| 1.0.5 | Support connect to TDengine cloud service +## Important update records +| package name | version | TDengine version | Description | +|----------------------|---------|---------------------|---------------------------------------------------------------------------| +| @tdengine/rest | 3.0.0 | 3.0.0 | Supports TDengine 3.0. Not compatible with TDengine 2.x. | +| td2.0-rest-connector | 1.0.7 | 2.4.x;2.5.x;2.6.x | Removed default port 6041。 | +| td2.0-rest-connector | 1.0.6 | 2.4.x;2.5.x;2.6.x | Fixed affectRows bug with create, insert, update, and alter. | +| td2.0-rest-connector | 1.0.5 | 2.4.x;2.5.x;2.6.x | Support cloud token | +| td2.0-rest-connector | 1.0.3 | 2.4.x;2.5.x;2.6.x | Supports connection management, standard queries, system information, error information, and continuous queries | ## API Reference -[API Reference](https://docs.taosdata.com/api/td2.0-connector/) \ No newline at end of file +[API Reference](https://docs.taosdata.com/api/td2.0-connector/) diff --git a/docs/en/10-programming/06-connector/06-csharp.md b/docs/en/10-programming/06-connector/06-csharp.md index 1d205f690f..2a9be8ef31 100644 --- a/docs/en/10-programming/06-connector/06-csharp.md +++ b/docs/en/10-programming/06-connector/06-csharp.md @@ -6,15 +6,23 @@ description: Detailed guide for C# Connector `TDengine.Connector` is the official C# connector for TDengine. C# developers can develop applications to access TDengine instance data. +This article describes how to install `TDengine.Connector` in a Linux or Windows environment and connect to TDengine clusters via `TDengine.Connector` to perform basic operations such as data writing and querying. + The source code for `TDengine.Connector` is hosted on [GitHub](https://github.com/taosdata/taos-connector-dotnet/tree/3.0). +## Version support + +Please refer to [version support list](/reference/connector#version-support) + ## Installation ### Pre-installation -Install the .NET deployment SDK. +* Install the [.NET SDK](https://dotnet.microsoft.com/download) +* [Nuget Client](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools) (optional installation) +* Install TDengine client driver, please refer to [Install client driver](/reference/connector/#install-client-driver) for details -### Add TDengine.Connector through Nuget +### Add `TDengine.Connector` through Nuget ```bash dotnet add package TDengine.Connector @@ -26,7 +34,7 @@ dotnet add package TDengine.Connector {{#include docs/examples/csharp/cloud-example/connect/connect.csproj}} ``` -``` C# +``` csharp {{#include docs/examples/csharp/cloud-example/connect/Program.cs}} ``` @@ -55,9 +63,34 @@ dotnet add package TDengine.Connector ## Important Updates | TDengine.Connector | Description | -| ------------------------- | ---------------------------------------------------------------- | -| 3.0.2 | Support .NET Framework 4.5 and above. Support .Net standard 2.0. Nuget package includes dynamic library for WebSocket.| -| 3.0.1 | Support connect to TDengine cloud service| +|--------------------|--------------------------------| +| 3.0.2 | Support .NET Framework 4.5 and above. Support .Net standard 2.0. Nuget package includes dynamic library for WebSocket.| +| 3.0.1 | Support WebSocket and Cloud,With function query, insert, and parameter binding| +| 3.0.0 | Supports TDengine 3.0.0.0. TDengine 2.x is not supported. Added `TDengine.Impl.GetData()` interface to deserialize query results. | +| 1.0.7 | Fixed TDengine.Query() memory leak. | +| 1.0.6 | Fix schemaless bug in 1.0.4 and 1.0.5. | +| 1.0.5 | Fix Windows sync query Chinese error bug. | 1.0.4 | Fix schemaless bug. | +| 1.0.4 | Add asynchronous query, subscription, and other functions. Fix the binding parameter bug. | +| 1.0.3 | Add parameter binding, schemaless, JSON tag, etc. | +| 1.0.2 | Add connection management, synchronous query, error messages, etc. | + +## Other descriptions + +### Third-party driver + +`Taos` is an ADO.NET connector for TDengine, supporting Linux and Windows platforms. Community contributor `Maikebing@@maikebing contributes the connector`. Please refer to: + +* Interface download: + +## Frequently Asked Questions + +1. "Unable to establish connection", "Unable to resolve FQDN" + + Usually, it's caused by an incorrect FQDN configuration. Please refer to this section in the [FAQ](https://docs.tdengine.com/2.4/train-faq/faq/#2-how-to-handle-unable-to-establish-connection) to troubleshoot. + +2. Unhandled exception. System.DllNotFoundException: Unable to load DLL 'taos' or one of its dependencies: The specified module cannot be found. + + This is usually because the program did not find the dependent client driver. The solution is to copy `C:\TDengine\driver\taos.dll` to the `C:\Windows\System32\` directory on Windows, and create the following soft link on Linux `ln -s /usr/local/taos/driver/libtaos.so.x.x .x.x /usr/lib/libtaos.so` will work. ## API Reference diff --git a/docs/en/10-programming/06-connector/09-rest-api.md b/docs/en/10-programming/06-connector/09-rest-api.md index b51d25843c..db466d1588 100644 --- a/docs/en/10-programming/06-connector/09-rest-api.md +++ b/docs/en/10-programming/06-connector/09-rest-api.md @@ -4,7 +4,7 @@ title: REST API description: Detailed guide for REST API --- -To support the development of various types of applications and platforms, TDengine provides an API that conforms to REST principles; namely REST API. To minimize the learning cost, unlike REST APIs for other database engines, TDengine allows insertion of SQL commands in the BODY of an HTTP POST request, to operate the database. +To support the development of various types of applications and platforms, TDengine provides an API that conforms to REST principles; namely REST API. To minimize the learning cost, unlike REST APIs for other database engines, TDengine allows insertion of SQL commands in the BODY of an HTTP POST request, to operate the database. :::note One difference from the native connector is that the REST interface is stateless and so the `USE db_name` command has no effect. All references to table names and super table names need to specify the database name in the prefix. TDengine supports specification of the db_name in RESTful URL. If the database name prefix is not specified in the SQL command, the `db_name` specified in the URL will be used. @@ -305,4 +305,3 @@ Description: "rows": 1 } ``` - diff --git a/docs/en/11-visual/01-grafana.md b/docs/en/11-visual/01-grafana.md index a059047ae8..e1f4870f0d 100644 --- a/docs/en/11-visual/01-grafana.md +++ b/docs/en/11-visual/01-grafana.md @@ -15,7 +15,7 @@ TDengine currently supports Grafana versions 7.5 and above. Users can go to the ### Install with GUI -The TDengine data source plugin is already published as a signed Grafana plugin. You can easily install it from Grafana Configuration GUI. In any platform you already installed Grafana, you can open the URL http://localhost:3000 then click plugin menu from left panel. +The TDengine data source plugin is already published as a signed Grafana plugin. You can easily install it from Grafana Configuration GUI. In any platform you already installed Grafana, you can open the URL `http://localhost:3000` then click plugin menu from left panel. ![click plugin menu](./grafana/click-plugin-menu-from-config.webp) diff --git a/docs/en/11-visual/02-gds.md b/docs/en/11-visual/02-gds.md index 1371434160..32069eadd8 100644 --- a/docs/en/11-visual/02-gds.md +++ b/docs/en/11-visual/02-gds.md @@ -3,7 +3,7 @@ sidebar_label: Google Data Studio title: Use Google Data Studio --- -Using its [partner connector](https://datastudio.google.com/data?search=TDengine), Google Data Studio can quickly access TDengine and create interactive reports and dashboards using its web-based reporting features.The whole process does not require any code development. Share your reports and dashboards with individuals, teams, or the world. Collaborate in real time. Embed your report on any web page. +Using its [partner connector](https://datastudio.google.com/data?search=TDengine), Google Data Studio can quickly access TDengine and create interactive reports and dashboards using its web-based reporting features.The whole process does not require any code development. Share your reports and dashboards with individuals, teams, or the world. Collaborate in real time. And embbed your report on any web page. Refer to [GitHub](https://github.com/taosdata/gds-connector/blob/master/README.md) for additional information on utilizing the Data Studio with TDengine. @@ -19,23 +19,12 @@ The current [connector](https://datastudio.google.com/data?search=TDengine) supp #### URL -TDengine Cloud URL. - - - - - To obtain the URL, please login [TDengine Cloud](https://cloud.tdengine.com) and click "Visualize" and then select "Google Data Studio". #### TDengine Cloud Token - - - - - To obtain the value of cloud token, please login [TDengine Cloud](https://cloud.tdengine.com) and click "Visualize" and then select "Google Data Studio". diff --git a/docs/en/12-data-subscription/index.md b/docs/en/12-data-subscription/index.md index 80b01810d8..c8c4eca84f 100644 --- a/docs/en/12-data-subscription/index.md +++ b/docs/en/12-data-subscription/index.md @@ -1,7 +1,7 @@ --- sidebar_label: Data Subscription title: Data Subscription -description: Using topics to do data subscription and share to others from TDengine. +description: Using topics to do data subscription and share to others from TDengine Cloud. --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; diff --git a/docs/en/12-stream.md b/docs/en/12-stream.md index 5bda5c0ce9..32d22beff4 100644 --- a/docs/en/12-stream.md +++ b/docs/en/12-stream.md @@ -33,7 +33,7 @@ It is common that smart electrical meter systems for businesses generate million ### Create a Database for Raw Data -Create database `power` using explore in cloud console. +Create database `power` using explorer in TDengine Cloud console. Then create four subtables as follows: diff --git a/docs/en/13-replication/index.md b/docs/en/13-replication/index.md index bd50feacda..8c8ad3a2a8 100644 --- a/docs/en/13-replication/index.md +++ b/docs/en/13-replication/index.md @@ -6,4 +6,4 @@ description: Replicate data between TDengine cloud services TDengine provides full support for data replication. You can replicate data from TDengine cloud to private TDengine instance, from private TDengine instance to TDengine cloud, or from one cloud platform to another one and it doesn't matter which cloud or region the two services reside in. -TDengine also provides database backup for enterprise plan. +TDengine also provides database backup for enterprise plan. diff --git a/docs/en/19-tools/01-cli.md b/docs/en/19-tools/01-cli.md index d807fca80f..8e8cebf5d9 100644 --- a/docs/en/19-tools/01-cli.md +++ b/docs/en/19-tools/01-cli.md @@ -7,7 +7,6 @@ description: Instructions and tips for using the TDengine CLI to connect TDengin import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; - The TDengine command-line interface (hereafter referred to as `TDengine CLI`) is the most simplest way for users to manipulate and interact with TDengine instances. @@ -61,22 +60,20 @@ To obtain the value of cloud DSN, please log in [TDengine Cloud](https://cloud.t ::: - - -## Connect +## Connect -To access the TDengine Cloud, you can execute `taos` if you already set the environment variable. +To access the TDengine Cloud instance, you can execute `taos` if you already set the environment variable. -``` +```bash taos ``` If you did not set environment variable for a TDengine Cloud instance, or you want to access other TDengine Cloud instances rather than the instance you already set the environment variable, you can use `taos -E ` as below. -``` +```bash taos -E $TDENGINE_CLOUD_DSN ``` @@ -85,13 +82,13 @@ taos -E $TDENGINE_CLOUD_DSN To access the TDengine Cloud, you can execute `taos` if you already set the environment variable. -``` -taos +```powershell +taos.exe ``` If you did not set environment variable for a TDengine Cloud instance, or you want to access other TDengine Cloud instances rather than the instance you already set the environment variable, you can use `taos -E ` as below. -``` +```powershell taos.exe -E $TDENGINE_CLOUD_DSN ``` @@ -100,13 +97,13 @@ taos.exe -E $TDENGINE_CLOUD_DSN To access the TDengine Cloud, you can execute `taos` if you already set the environment variable. -``` +```bash taos ``` If you did not set environment variable for a TDengine Cloud instance, or you want to access other TDengine Cloud instances rather than the instance you already set the environment variable, you can use `taos -E ` as below. -``` +```bash taos -E $TDENGINE_CLOUD_DSN ``` @@ -117,7 +114,7 @@ taos -E $TDENGINE_CLOUD_DSN TDengine CLI will display a welcome message and version information if it successfully connected to the TDengine service. If it fails, TDengine CLI will print an error message. The TDengine CLI prompts as follows: -``` +```text Welcome to the TDengine shell from Linux, Client Version:3.0.0.0 Copyright (c) 2022 by TAOS Data, Inc. All rights reserved. @@ -127,4 +124,3 @@ taos> ``` After entering the TDengine CLI, you can execute various SQL commands, including inserts, queries, or administrative commands. Please see the [official document](https://docs.tdengine.com/reference/taos-shell#execute-sql-script-file) for more details. - diff --git a/docs/en/19-tools/03-taosbenchmark.md b/docs/en/19-tools/03-taosbenchmark.md index d7317f36c7..0d4c221449 100644 --- a/docs/en/19-tools/03-taosbenchmark.md +++ b/docs/en/19-tools/03-taosbenchmark.md @@ -9,20 +9,20 @@ description: "taosBenchmark (once called taosdemo ) is a tool for testing the pe taosBenchmark (formerly taosdemo ) is a tool for testing the performance of TDengine products. taosBenchmark can test the performance of TDengine's insert, query, and subscription functions and simulate large amounts of data generated by many devices. taosBenchmark can be configured to generate user defined databases, supertables, subtables, and the time series data to populate these for performance benchmarking. taosBenchmark is highly configurable and some of the configurations include the time interval for inserting data, the number of working threads and the capability to insert disordered data. The installer provides taosdemo as a soft link to taosBenchmark for compatibility with past users. -**Please be noted that in the context of TDengine cloud service, non privileged user can't create database using any tool, including taosBenchmark. The database needs to be firstly created in the data explorer in TDengine cloud service console. For any content about creating database in this document, the user needs to ignore and create the database manually inside TDengine cloud service.** +:::note +Please be noted that in the context of TDengine cloud service, non privileged user can't create database using any tool, including taosBenchmark. The database needs to be firstly created in the data explorer in TDengine cloud service console. For any content about creating database in this document, the user needs to ignore and create the database manually inside TDengine cloud service. +::: ## Installation -To use taosBenchmark, you need to download and install [taosTools](https://www.taosdata.com/assets-download/3.0/taosTools-2.2.7-Linux-x64.tar.gz) or any later version of v2.2.7. Before installing taosTools, please firstly download and install [TDengine CLI](https://docs.tdengine.com/cloud/tools/cli/#installation). +There are two ways to install taosBenchmark: -Decompress the package and install. +- Installing the official TDengine installer will automatically install taosBenchmark. Please refer to [TDengine installation](/operation/pkg-install) for details. + +- Compile taos-tools separately and install them. Please refer to the [taos-tools](https://github.com/taosdata/taos-tools) repository for details. -``` -tar -xzf taosTools-2.2.7-Linux-x64.tar.gz -cd taosTools-2.2.7-Linux-x64.tar.gz -sudo ./install-taostools.sh -``` ## Run + ### Configuration and running methods Run this command in your Linux terminal to save cloud DSN as variable: @@ -214,6 +214,10 @@ The parameters listed in this section apply to all function modes. `filetype` must be set to `insert` in the insertion scenario. See [General Configuration Parameters](#General Configuration Parameters) +- ** keep_trying ** : Keep trying if failed to insert, default is no. Available with v3.0.9+. + +- ** trying_interval ** : Specify interval between keep trying insert. Valid value is a postive number. Only valid when keep trying be enabled. Available with v3.0.9+. + #### Stream processing related configuration parameters The parameters for creating streams are configured in `stream` in the json configuration file, as shown below. diff --git a/docs/en/19-tools/06-taosdump.md b/docs/en/19-tools/06-taosdump.md index 1385197ee4..11fc06e0a6 100644 --- a/docs/en/19-tools/06-taosdump.md +++ b/docs/en/19-tools/06-taosdump.md @@ -17,16 +17,13 @@ Users should not use taosdump to back up raw data, environment settings, hardwar ## Installation -To use taosdump, you need to download and install recent version of [taosTools](https://docs.tdengine.com/releases/tools/). Before installing taosTools, please firstly download and install the [TDengine client installation package](https://docs.tdengine.com/releases/tdengine/). +There are two ways to install taosdump: -Decompress the package and install. -``` -tar -xzf taosTools-2.2.7-Linux-x64.tar.gz -cd taosTools-2.2.7-Linux-x64.tar.gz -sudo ./install-taostools.sh -``` +- Install the taosTools official installer. Please find taosTools from [Release History](https://docs.taosdata.com/releases/tools/) page and download and install it. + +- Compile taos-tools separately and install it. Please refer to the [taos-tools](https://github.com/taosdata/taos-tools) repository for details. -Set environment variable. +Run the following command to set environment variable. ```bash export TDENGINE_CLOUD_DSN="" diff --git a/docs/en/22-user-management/01-orgs/index.md b/docs/en/22-user-management/01-orgs/index.md index ea4116ec45..bed47538ca 100644 --- a/docs/en/22-user-management/01-orgs/index.md +++ b/docs/en/22-user-management/01-orgs/index.md @@ -4,7 +4,7 @@ title: Organization Management description: 'Organization management' --- -TDengine Cloud provides a list page for the user to manage his organizations. On this page, you can get all the organizations which you can have permission to view or edit. In each line of the organization list, you can get the name of the organization, roles which you have in the organization and the actions you can operate. +TDengine Cloud provides a list page for the user to manage his organizations. On this page, you can get all the organizations which you can have permission to view or edit. In each line of the organization list, you can get the name of the organization, roles which you have in the organization and the actions you can operate. ![Organization list](./images/orglist.webp) diff --git a/docs/en/22-user-management/index.md b/docs/en/22-user-management/index.md index 5fea58f7f2..10bdc67cf1 100644 --- a/docs/en/22-user-management/index.md +++ b/docs/en/22-user-management/index.md @@ -19,10 +19,10 @@ The major features are listed below: 1. [Organization Management](./orgs/): Create new organizations, update their name and also can transfer the owner to some one in the organization. 2. [User Mgmt](./users/): Create, update or delete users or user groups. You can also create/edit/delete customized roles. - [User](./users/users) -3. [Admin](./admin/): Create, update or delete users or user groups. You can also create/edit/delete customized roles. -4. [Database Access Control](./db/): Create, update or delete users or user groups. You can also create/edit/delete customized roles. + -## User Stories + ```mdx-code-block import DocCardList from '@theme/DocCardList'; diff --git a/docs/examples/c/tmq.c b/docs/examples/c/tmq.c new file mode 100644 index 0000000000..eb41ad039a --- /dev/null +++ b/docs/examples/c/tmq.c @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include "taos.h" + +static int running = 1; + +static int32_t msg_process(TAOS_RES* msg) { + char buf[1024]; + int32_t rows = 0; + + const char* topicName = tmq_get_topic_name(msg); + const char* dbName = tmq_get_db_name(msg); + int32_t vgroupId = tmq_get_vgroup_id(msg); + + printf("topic: %s\n", topicName); + printf("db: %s\n", dbName); + printf("vgroup id: %d\n", vgroupId); + + while (1) { + TAOS_ROW row = taos_fetch_row(msg); + if (row == NULL) break; + + TAOS_FIELD* fields = taos_fetch_fields(msg); + int32_t numOfFields = taos_field_count(msg); + // int32_t* length = taos_fetch_lengths(msg); + int32_t precision = taos_result_precision(msg); + rows++; + taos_print_row(buf, row, fields, numOfFields); + printf("precision: %d, row content: %s\n", precision, buf); + } + + return rows; +} + +static int32_t init_env() { + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + TAOS_RES* pRes; + // drop database if exists + printf("create database\n"); + pRes = taos_query(pConn, "drop topic topicname"); + if (taos_errno(pRes) != 0) { + printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes)); + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "drop database if exists tmqdb"); + if (taos_errno(pRes) != 0) { + printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes)); + } + taos_free_result(pRes); + + // create database + pRes = taos_query(pConn, "create database tmqdb precision 'ns'"); + if (taos_errno(pRes) != 0) { + printf("error in create tmqdb, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // create super table + printf("create super table\n"); + pRes = taos_query( + pConn, "create table tmqdb.stb (ts timestamp, c1 int, c2 float, c3 varchar(16)) tags(t1 int, t3 varchar(16))"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table stb, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // create sub tables + printf("create sub tables\n"); + pRes = taos_query(pConn, "create table tmqdb.ctb0 using tmqdb.stb tags(0, 'subtable0')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb1 using tmqdb.stb tags(1, 'subtable1')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb1, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb2 using tmqdb.stb tags(2, 'subtable2')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb2, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb3 using tmqdb.stb tags(3, 'subtable3')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb3, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // insert data + printf("insert data into sub tables\n"); + pRes = taos_query(pConn, "insert into tmqdb.ctb0 values(now, 0, 0, 'a0')(now+1s, 0, 0, 'a00')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb1 values(now, 1, 1, 'a1')(now+1s, 11, 11, 'a11')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb2 values(now, 2, 2, 'a1')(now+1s, 22, 22, 'a22')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb3 values(now, 3, 3, 'a1')(now+1s, 33, 33, 'a33')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + taos_close(pConn); + return 0; + +END: + taos_free_result(pRes); + taos_close(pConn); + return -1; +} + +int32_t create_topic() { + printf("create topic\n"); + TAOS_RES* pRes; + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + pRes = taos_query(pConn, "use tmqdb"); + if (taos_errno(pRes) != 0) { + printf("error in use tmqdb, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create topic topicname as select ts, c1, c2, c3, tbname from tmqdb.stb where c1 > 1"); + if (taos_errno(pRes) != 0) { + printf("failed to create topic topicname, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + taos_close(pConn); + return 0; +} + +void tmq_commit_cb_print(tmq_t* tmq, int32_t code, void* param) { + printf("tmq_commit_cb_print() code: %d, tmq: %p, param: %p\n", code, tmq, param); +} + +tmq_t* build_consumer() { + tmq_conf_res_t code; + tmq_conf_t* conf = tmq_conf_new(); + code = tmq_conf_set(conf, "enable.auto.commit", "true"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "auto.commit.interval.ms", "1000"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "group.id", "cgrpName"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "client.id", "user defined name"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "td.connect.user", "root"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "td.connect.pass", "taosdata"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "auto.offset.reset", "earliest"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "experimental.snapshot.enable", "false"); + if (TMQ_CONF_OK != code) return NULL; + + tmq_conf_set_auto_commit_cb(conf, tmq_commit_cb_print, NULL); + + tmq_t* tmq = tmq_consumer_new(conf, NULL, 0); + tmq_conf_destroy(conf); + return tmq; +} + +tmq_list_t* build_topic_list() { + tmq_list_t* topicList = tmq_list_new(); + int32_t code = tmq_list_append(topicList, "topicname"); + if (code) { + tmq_list_destroy(topicList); + return NULL; + } + return topicList; +} + +void basic_consume_loop(tmq_t* tmq) { + int32_t totalRows = 0; + int32_t msgCnt = 0; + int32_t timeout = 5000; + while (running) { + TAOS_RES* tmqmsg = tmq_consumer_poll(tmq, timeout); + if (tmqmsg) { + msgCnt++; + totalRows += msg_process(tmqmsg); + taos_free_result(tmqmsg); + } else { + break; + } + } + + fprintf(stderr, "%d msg consumed, include %d rows\n", msgCnt, totalRows); +} + +int main(int argc, char* argv[]) { + int32_t code; + + if (init_env() < 0) { + return -1; + } + + if (create_topic() < 0) { + return -1; + } + + tmq_t* tmq = build_consumer(); + if (NULL == tmq) { + fprintf(stderr, "build_consumer() fail!\n"); + return -1; + } + + tmq_list_t* topic_list = build_topic_list(); + if (NULL == topic_list) { + return -1; + } + + if ((code = tmq_subscribe(tmq, topic_list))) { + fprintf(stderr, "Failed to tmq_subscribe(): %s\n", tmq_err2str(code)); + } + tmq_list_destroy(topic_list); + + basic_consume_loop(tmq); + + code = tmq_consumer_close(tmq); + if (code) { + fprintf(stderr, "Failed to close consumer: %s\n", tmq_err2str(code)); + } else { + fprintf(stderr, "Consumer closed\n"); + } + + return 0; +} diff --git a/docs/examples/csharp/native-example/AsyncQueryExample.cs b/docs/examples/csharp/asyncQuery/Program.cs similarity index 81% rename from docs/examples/csharp/native-example/AsyncQueryExample.cs rename to docs/examples/csharp/asyncQuery/Program.cs index 0d47325932..864f06a15e 100644 --- a/docs/examples/csharp/native-example/AsyncQueryExample.cs +++ b/docs/examples/csharp/asyncQuery/Program.cs @@ -11,11 +11,17 @@ namespace TDengineExample static void Main() { IntPtr conn = GetConnection(); - QueryAsyncCallback queryAsyncCallback = new QueryAsyncCallback(QueryCallback); - TDengine.QueryAsync(conn, "select * from meters", queryAsyncCallback, IntPtr.Zero); - Thread.Sleep(2000); - TDengine.Close(conn); - TDengine.Cleanup(); + try + { + QueryAsyncCallback queryAsyncCallback = new QueryAsyncCallback(QueryCallback); + TDengine.QueryAsync(conn, "select * from meters", queryAsyncCallback, IntPtr.Zero); + Thread.Sleep(2000); + } + finally + { + TDengine.Close(conn); + } + } static void QueryCallback(IntPtr param, IntPtr taosRes, int code) @@ -27,11 +33,11 @@ namespace TDengineExample } else { - Console.WriteLine($"async query data failed, failed code {code}"); + throw new Exception($"async query data failed,code:{code},reason:{TDengine.Error(taosRes)}"); } } - // Iteratively call this interface until "numOfRows" is no greater than 0. + // Iteratively call this interface until "numOfRows" is no greater than 0. static void FetchRawBlockCallback(IntPtr param, IntPtr taosRes, int numOfRows) { if (numOfRows > 0) @@ -43,7 +49,7 @@ namespace TDengineExample for (int i = 0; i < dataList.Count; i++) { - if (i != 0 && (i+1) % metaList.Count == 0) + if (i != 0 && (i + 1) % metaList.Count == 0) { Console.WriteLine("{0}\t|", dataList[i]); } @@ -63,7 +69,7 @@ namespace TDengineExample } else { - Console.WriteLine($"FetchRawBlockCallback callback error, error code {numOfRows}"); + throw new Exception($"FetchRawBlockCallback callback error, error code {numOfRows}"); } TDengine.FreeResult(taosRes); } @@ -79,8 +85,7 @@ namespace TDengineExample var conn = TDengine.Connect(host, username, password, dbname, port); if (conn == IntPtr.Zero) { - Console.WriteLine("Connect to TDengine failed"); - Environment.Exit(0); + throw new Exception("Connect to TDengine failed"); } else { diff --git a/docs/examples/csharp/native-example/asyncquery.csproj b/docs/examples/csharp/asyncQuery/asyncquery.csproj similarity index 98% rename from docs/examples/csharp/native-example/asyncquery.csproj rename to docs/examples/csharp/asyncQuery/asyncquery.csproj index 045969edd7..7c5b693f28 100644 --- a/docs/examples/csharp/native-example/asyncquery.csproj +++ b/docs/examples/csharp/asyncQuery/asyncquery.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/native-example/ConnectExample.cs b/docs/examples/csharp/connect/Program.cs similarity index 90% rename from docs/examples/csharp/native-example/ConnectExample.cs rename to docs/examples/csharp/connect/Program.cs index f3548ee65d..955db40c7c 100644 --- a/docs/examples/csharp/native-example/ConnectExample.cs +++ b/docs/examples/csharp/connect/Program.cs @@ -16,7 +16,7 @@ namespace TDengineExample var conn = TDengine.Connect(host, username, password, dbname, port); if (conn == IntPtr.Zero) { - Console.WriteLine("Connect to TDengine failed"); + throw new Exception("Connect to TDengine failed"); } else { diff --git a/docs/examples/csharp/native-example/connect.csproj b/docs/examples/csharp/connect/connect.csproj similarity index 98% rename from docs/examples/csharp/native-example/connect.csproj rename to docs/examples/csharp/connect/connect.csproj index 3a912f8987..a08e86d4b4 100644 --- a/docs/examples/csharp/native-example/connect.csproj +++ b/docs/examples/csharp/connect/connect.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/csharp.sln b/docs/examples/csharp/csharp.sln new file mode 100644 index 0000000000..560dde55cb --- /dev/null +++ b/docs/examples/csharp/csharp.sln @@ -0,0 +1,94 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "asyncquery", "asyncQuery\asyncquery.csproj", "{E2A5F00C-14E7-40E1-A2DE-6AB2975616D3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "connect", "connect\connect.csproj", "{CCC5042D-93FC-4AE0-B2F6-7E692FD476B7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "influxdbline", "influxdbLine\influxdbline.csproj", "{6A24FB80-1E3C-4E2D-A5AB-914FA583874D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "optsJSON", "optsJSON\optsJSON.csproj", "{6725A961-0C66-4196-AC98-8D3F3D757D6C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "optstelnet", "optsTelnet\optstelnet.csproj", "{B3B50D25-688B-44D4-8683-482ABC52FFCA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "query", "query\query.csproj", "{F2B7D13B-FE04-4C5C-BB6D-C12E0A9D9970}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "stmtinsert", "stmtInsert\stmtinsert.csproj", "{B40D6BED-BE3C-4B44-9B12-28BE441311BA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "subscribe", "subscribe\subscribe.csproj", "{C3D45A8E-AFC0-4547-9F3C-467B0B583DED}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "wsConnect", "wsConnect\wsConnect.csproj", "{51E19494-845E-49ED-97C7-749AE63111BD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "wsInsert", "wsInsert\wsInsert.csproj", "{13E2233B-4AFF-40D9-AF42-AB3F01617540}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "wsQuery", "wsQuery\wsQuery.csproj", "{0F394169-C456-442C-929D-C2D43A0EEC7B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "wsStmt", "wsStmt\wsStmt.csproj", "{27B9C9AB-9055-4BF2-8A14-4E59F09D5985}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sqlinsert", "sqlInsert\sqlinsert.csproj", "{CD24BD12-8550-4627-A11D-707B446F48C3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E2A5F00C-14E7-40E1-A2DE-6AB2975616D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2A5F00C-14E7-40E1-A2DE-6AB2975616D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2A5F00C-14E7-40E1-A2DE-6AB2975616D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2A5F00C-14E7-40E1-A2DE-6AB2975616D3}.Release|Any CPU.Build.0 = Release|Any CPU + {CCC5042D-93FC-4AE0-B2F6-7E692FD476B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCC5042D-93FC-4AE0-B2F6-7E692FD476B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCC5042D-93FC-4AE0-B2F6-7E692FD476B7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCC5042D-93FC-4AE0-B2F6-7E692FD476B7}.Release|Any CPU.Build.0 = Release|Any CPU + {6A24FB80-1E3C-4E2D-A5AB-914FA583874D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A24FB80-1E3C-4E2D-A5AB-914FA583874D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A24FB80-1E3C-4E2D-A5AB-914FA583874D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A24FB80-1E3C-4E2D-A5AB-914FA583874D}.Release|Any CPU.Build.0 = Release|Any CPU + {6725A961-0C66-4196-AC98-8D3F3D757D6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6725A961-0C66-4196-AC98-8D3F3D757D6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6725A961-0C66-4196-AC98-8D3F3D757D6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6725A961-0C66-4196-AC98-8D3F3D757D6C}.Release|Any CPU.Build.0 = Release|Any CPU + {B3B50D25-688B-44D4-8683-482ABC52FFCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3B50D25-688B-44D4-8683-482ABC52FFCA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3B50D25-688B-44D4-8683-482ABC52FFCA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3B50D25-688B-44D4-8683-482ABC52FFCA}.Release|Any CPU.Build.0 = Release|Any CPU + {F2B7D13B-FE04-4C5C-BB6D-C12E0A9D9970}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2B7D13B-FE04-4C5C-BB6D-C12E0A9D9970}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2B7D13B-FE04-4C5C-BB6D-C12E0A9D9970}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2B7D13B-FE04-4C5C-BB6D-C12E0A9D9970}.Release|Any CPU.Build.0 = Release|Any CPU + {B40D6BED-BE3C-4B44-9B12-28BE441311BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B40D6BED-BE3C-4B44-9B12-28BE441311BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B40D6BED-BE3C-4B44-9B12-28BE441311BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B40D6BED-BE3C-4B44-9B12-28BE441311BA}.Release|Any CPU.Build.0 = Release|Any CPU + {C3D45A8E-AFC0-4547-9F3C-467B0B583DED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3D45A8E-AFC0-4547-9F3C-467B0B583DED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3D45A8E-AFC0-4547-9F3C-467B0B583DED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3D45A8E-AFC0-4547-9F3C-467B0B583DED}.Release|Any CPU.Build.0 = Release|Any CPU + {51E19494-845E-49ED-97C7-749AE63111BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {51E19494-845E-49ED-97C7-749AE63111BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {51E19494-845E-49ED-97C7-749AE63111BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {51E19494-845E-49ED-97C7-749AE63111BD}.Release|Any CPU.Build.0 = Release|Any CPU + {13E2233B-4AFF-40D9-AF42-AB3F01617540}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13E2233B-4AFF-40D9-AF42-AB3F01617540}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13E2233B-4AFF-40D9-AF42-AB3F01617540}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13E2233B-4AFF-40D9-AF42-AB3F01617540}.Release|Any CPU.Build.0 = Release|Any CPU + {0F394169-C456-442C-929D-C2D43A0EEC7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F394169-C456-442C-929D-C2D43A0EEC7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F394169-C456-442C-929D-C2D43A0EEC7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F394169-C456-442C-929D-C2D43A0EEC7B}.Release|Any CPU.Build.0 = Release|Any CPU + {27B9C9AB-9055-4BF2-8A14-4E59F09D5985}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27B9C9AB-9055-4BF2-8A14-4E59F09D5985}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27B9C9AB-9055-4BF2-8A14-4E59F09D5985}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27B9C9AB-9055-4BF2-8A14-4E59F09D5985}.Release|Any CPU.Build.0 = Release|Any CPU + {CD24BD12-8550-4627-A11D-707B446F48C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD24BD12-8550-4627-A11D-707B446F48C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD24BD12-8550-4627-A11D-707B446F48C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD24BD12-8550-4627-A11D-707B446F48C3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/docs/examples/csharp/native-example/InfluxDBLineExample.cs b/docs/examples/csharp/influxdbLine/Program.cs similarity index 73% rename from docs/examples/csharp/native-example/InfluxDBLineExample.cs rename to docs/examples/csharp/influxdbLine/Program.cs index 7b4453f4ac..fa3cb21fe0 100644 --- a/docs/examples/csharp/native-example/InfluxDBLineExample.cs +++ b/docs/examples/csharp/influxdbLine/Program.cs @@ -17,8 +17,7 @@ namespace TDengineExample IntPtr res = TDengine.SchemalessInsert(conn, lines, lines.Length, (int)TDengineSchemalessProtocol.TSDB_SML_LINE_PROTOCOL, (int)TDengineSchemalessPrecision.TSDB_SML_TIMESTAMP_MILLI_SECONDS); if (TDengine.ErrorNo(res) != 0) { - Console.WriteLine("SchemalessInsert failed since " + TDengine.Error(res)); - ExitProgram(conn, 1); + throw new Exception("SchemalessInsert failed since " + TDengine.Error(res)); } else { @@ -26,7 +25,6 @@ namespace TDengineExample Console.WriteLine($"SchemalessInsert success, affected {affectedRows} rows"); } TDengine.FreeResult(res); - ExitProgram(conn, 0); } static IntPtr GetConnection() @@ -39,9 +37,7 @@ namespace TDengineExample var conn = TDengine.Connect(host, username, password, dbname, port); if (conn == IntPtr.Zero) { - Console.WriteLine("Connect to TDengine failed"); - TDengine.Cleanup(); - Environment.Exit(1); + throw new Exception("Connect to TDengine failed"); } else { @@ -55,23 +51,15 @@ namespace TDengineExample IntPtr res = TDengine.Query(conn, "CREATE DATABASE test"); if (TDengine.ErrorNo(res) != 0) { - Console.WriteLine("failed to create database, reason: " + TDengine.Error(res)); - ExitProgram(conn, 1); + throw new Exception("failed to create database, reason: " + TDengine.Error(res)); } res = TDengine.Query(conn, "USE test"); if (TDengine.ErrorNo(res) != 0) { - Console.WriteLine("failed to change database, reason: " + TDengine.Error(res)); - ExitProgram(conn, 1); + throw new Exception("failed to change database, reason: " + TDengine.Error(res)); } } - static void ExitProgram(IntPtr conn, int exitCode) - { - TDengine.Close(conn); - TDengine.Cleanup(); - Environment.Exit(exitCode); - } } } diff --git a/docs/examples/csharp/native-example/influxdbline.csproj b/docs/examples/csharp/influxdbLine/influxdbline.csproj similarity index 98% rename from docs/examples/csharp/native-example/influxdbline.csproj rename to docs/examples/csharp/influxdbLine/influxdbline.csproj index 58bca48508..4889f8fde9 100644 --- a/docs/examples/csharp/native-example/influxdbline.csproj +++ b/docs/examples/csharp/influxdbLine/influxdbline.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/native-example/QueryExample.cs b/docs/examples/csharp/native-example/QueryExample.cs deleted file mode 100644 index d75bb8d661..0000000000 --- a/docs/examples/csharp/native-example/QueryExample.cs +++ /dev/null @@ -1,82 +0,0 @@ -using TDengineDriver; -using TDengineDriver.Impl; -using System.Runtime.InteropServices; - -namespace TDengineExample -{ - internal class QueryExample - { - static void Main() - { - IntPtr conn = GetConnection(); - // run query - IntPtr res = TDengine.Query(conn, "SELECT * FROM meters LIMIT 2"); - if (TDengine.ErrorNo(res) != 0) - { - Console.WriteLine("Failed to query since: " + TDengine.Error(res)); - TDengine.Close(conn); - TDengine.Cleanup(); - return; - } - - // get filed count - int fieldCount = TDengine.FieldCount(res); - Console.WriteLine("fieldCount=" + fieldCount); - - // print column names - List metas = LibTaos.GetMeta(res); - for (int i = 0; i < metas.Count; i++) - { - Console.Write(metas[i].name + "\t"); - } - Console.WriteLine(); - - // print values - List resData = LibTaos.GetData(res); - for (int i = 0; i < resData.Count; i++) - { - Console.Write($"|{resData[i].ToString()} \t"); - if (((i + 1) % metas.Count == 0)) - { - Console.WriteLine(""); - } - } - Console.WriteLine(); - - if (TDengine.ErrorNo(res) != 0) - { - Console.WriteLine($"Query is not complete, Error {TDengine.ErrorNo(res)} {TDengine.Error(res)}"); - } - // exit - TDengine.FreeResult(res); - TDengine.Close(conn); - TDengine.Cleanup(); - } - static IntPtr GetConnection() - { - string host = "localhost"; - short port = 6030; - string username = "root"; - string password = "taosdata"; - string dbname = "power"; - var conn = TDengine.Connect(host, username, password, dbname, port); - if (conn == IntPtr.Zero) - { - Console.WriteLine("Connect to TDengine failed"); - System.Environment.Exit(0); - } - else - { - Console.WriteLine("Connect to TDengine success"); - } - return conn; - } - } -} - -// output: -// Connect to TDengine success -// fieldCount=6 -// ts current voltage phase location groupid -// 1648432611249 10.3 219 0.31 California.SanFrancisco 2 -// 1648432611749 12.6 218 0.33 California.SanFrancisco 2 \ No newline at end of file diff --git a/docs/examples/csharp/native-example/SQLInsertExample.cs b/docs/examples/csharp/native-example/SQLInsertExample.cs deleted file mode 100644 index 192ea96d57..0000000000 --- a/docs/examples/csharp/native-example/SQLInsertExample.cs +++ /dev/null @@ -1,69 +0,0 @@ -using TDengineDriver; - - -namespace TDengineExample -{ - internal class SQLInsertExample - { - - static void Main() - { - IntPtr conn = GetConnection(); - IntPtr res = TDengine.Query(conn, "CREATE DATABASE power"); - CheckRes(conn, res, "failed to create database"); - res = TDengine.Query(conn, "USE power"); - CheckRes(conn, res, "failed to change database"); - res = TDengine.Query(conn, "CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)"); - CheckRes(conn, res, "failed to create stable"); - var sql = "INSERT INTO d1001 USING meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000) " + - "d1002 USING power.meters TAGS('California.SanFrancisco', 3) VALUES('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000) " + - "d1003 USING power.meters TAGS('California.LosAngeles', 2) VALUES('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000)('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000) " + - "d1004 USING power.meters TAGS('California.LosAngeles', 3) VALUES('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000)('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)"; - res = TDengine.Query(conn, sql); - CheckRes(conn, res, "failed to insert data"); - int affectedRows = TDengine.AffectRows(res); - Console.WriteLine("affectedRows " + affectedRows); - ExitProgram(conn, 0); - } - - static IntPtr GetConnection() - { - string host = "localhost"; - short port = 6030; - string username = "root"; - string password = "taosdata"; - string dbname = ""; - var conn = TDengine.Connect(host, username, password, dbname, port); - if (conn == IntPtr.Zero) - { - Console.WriteLine("Connect to TDengine failed"); - Environment.Exit(0); - } - else - { - Console.WriteLine("Connect to TDengine success"); - } - return conn; - } - - static void CheckRes(IntPtr conn, IntPtr res, String errorMsg) - { - if (TDengine.ErrorNo(res) != 0) - { - Console.Write(errorMsg + " since: " + TDengine.Error(res)); - ExitProgram(conn, 1); - } - } - - static void ExitProgram(IntPtr conn, int exitCode) - { - TDengine.Close(conn); - TDengine.Cleanup(); - Environment.Exit(exitCode); - } - } -} - -// output: -// Connect to TDengine success -// affectedRows 8 diff --git a/docs/examples/csharp/native-example/SubscribeDemo.cs b/docs/examples/csharp/native-example/SubscribeDemo.cs deleted file mode 100644 index b62ff12e5e..0000000000 --- a/docs/examples/csharp/native-example/SubscribeDemo.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using TDengineTMQ; -using TDengineDriver; -using System.Runtime.InteropServices; - -namespace TMQExample -{ - internal class SubscribeDemo - { - static void Main(string[] args) - { - IntPtr conn = GetConnection(); - string topic = "topic_example"; - Console.WriteLine($"create topic if not exist {topic} as select * from meters"); - //create topic - IntPtr res = TDengine.Query(conn, $"create topic if not exists {topic} as select * from meters"); - - if (res == IntPtr.Zero) - { - throw new Exception($"create topic failed, reason:{TDengine.Error(res)}"); - } - - var cfg = new ConsumerConfig - { - GourpId = "group_1", - TDConnectUser = "root", - TDConnectPasswd = "taosdata", - MsgWithTableName = "true", - TDConnectIp = "127.0.0.1", - }; - - // create consumer - var consumer = new ConsumerBuilder(cfg) - .Build(); - - // subscribe - consumer.Subscribe(topic); - - // consume - for (int i = 0; i < 5; i++) - { - var consumeRes = consumer.Consume(300); - // print consumeResult - foreach (KeyValuePair kv in consumeRes.Message) - { - Console.WriteLine("topic partitions:\n{0}", kv.Key.ToString()); - - kv.Value.Metas.ForEach(meta => - { - Console.Write("{0} {1}({2}) \t|", meta.name, meta.TypeName(), meta.size); - }); - Console.WriteLine(""); - kv.Value.Datas.ForEach(data => - { - Console.WriteLine(data.ToString()); - }); - } - - consumer.Commit(consumeRes); - Console.WriteLine("\n================ {0} done ", i); - - } - - // retrieve topic list - List topics = consumer.Subscription(); - topics.ForEach(t => Console.WriteLine("topic name:{0}", t)); - - - // unsubscribe - consumer.Unsubscribe(); - - // close consumer after use.Otherwise will lead memory leak. - consumer.Close(); - TDengine.Close(conn); - - - } - - static IntPtr GetConnection() - { - string host = "localhost"; - short port = 6030; - string username = "root"; - string password = "taosdata"; - string dbname = "power"; - var conn = TDengine.Connect(host, username, password, dbname, port); - if (conn == IntPtr.Zero) - { - Console.WriteLine("Connect to TDengine failed"); - System.Environment.Exit(0); - } - else - { - Console.WriteLine("Connect to TDengine success"); - } - return conn; - } - } - -} diff --git a/docs/examples/csharp/native-example/subscribe.csproj b/docs/examples/csharp/native-example/subscribe.csproj deleted file mode 100644 index eff29b3bf4..0000000000 --- a/docs/examples/csharp/native-example/subscribe.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net6.0 - enable - enable - TMQExample.SubscribeDemo - - - - - - - diff --git a/docs/examples/csharp/native-example/OptsJsonExample.cs b/docs/examples/csharp/optsJSON/Program.cs similarity index 53% rename from docs/examples/csharp/native-example/OptsJsonExample.cs rename to docs/examples/csharp/optsJSON/Program.cs index 2c41acc5c9..b67b5af62b 100644 --- a/docs/examples/csharp/native-example/OptsJsonExample.cs +++ b/docs/examples/csharp/optsJSON/Program.cs @@ -7,27 +7,31 @@ namespace TDengineExample static void Main() { IntPtr conn = GetConnection(); - PrepareDatabase(conn); - string[] lines = { "[{\"metric\": \"meters.current\", \"timestamp\": 1648432611249, \"value\": 10.3, \"tags\": {\"location\": \"California.SanFrancisco\", \"groupid\": 2}}," + + try + { + PrepareDatabase(conn); + string[] lines = { "[{\"metric\": \"meters.current\", \"timestamp\": 1648432611249, \"value\": 10.3, \"tags\": {\"location\": \"California.SanFrancisco\", \"groupid\": 2}}," + " {\"metric\": \"meters.voltage\", \"timestamp\": 1648432611249, \"value\": 219, \"tags\": {\"location\": \"California.LosAngeles\", \"groupid\": 1}}, " + "{\"metric\": \"meters.current\", \"timestamp\": 1648432611250, \"value\": 12.6, \"tags\": {\"location\": \"California.SanFrancisco\", \"groupid\": 2}}," + " {\"metric\": \"meters.voltage\", \"timestamp\": 1648432611250, \"value\": 221, \"tags\": {\"location\": \"California.LosAngeles\", \"groupid\": 1}}]" }; - IntPtr res = TDengine.SchemalessInsert(conn, lines, 1, (int)TDengineSchemalessProtocol.TSDB_SML_JSON_PROTOCOL, (int)TDengineSchemalessPrecision.TSDB_SML_TIMESTAMP_NOT_CONFIGURED); - if (TDengine.ErrorNo(res) != 0) - { - Console.WriteLine("SchemalessInsert failed since " + TDengine.Error(res)); - ExitProgram(conn, 1); + IntPtr res = TDengine.SchemalessInsert(conn, lines, 1, (int)TDengineSchemalessProtocol.TSDB_SML_JSON_PROTOCOL, (int)TDengineSchemalessPrecision.TSDB_SML_TIMESTAMP_NOT_CONFIGURED); + if (TDengine.ErrorNo(res) != 0) + { + throw new Exception("SchemalessInsert failed since " + TDengine.Error(res)); + } + else + { + int affectedRows = TDengine.AffectRows(res); + Console.WriteLine($"SchemalessInsert success, affected {affectedRows} rows"); + } + TDengine.FreeResult(res); } - else + finally { - int affectedRows = TDengine.AffectRows(res); - Console.WriteLine($"SchemalessInsert success, affected {affectedRows} rows"); + TDengine.Close(conn); } - TDengine.FreeResult(res); - ExitProgram(conn, 0); - } static IntPtr GetConnection() { @@ -39,9 +43,7 @@ namespace TDengineExample var conn = TDengine.Connect(host, username, password, dbname, port); if (conn == IntPtr.Zero) { - Console.WriteLine("Connect to TDengine failed"); - TDengine.Cleanup(); - Environment.Exit(1); + throw new Exception("Connect to TDengine failed"); } else { @@ -55,22 +57,13 @@ namespace TDengineExample IntPtr res = TDengine.Query(conn, "CREATE DATABASE test"); if (TDengine.ErrorNo(res) != 0) { - Console.WriteLine("failed to create database, reason: " + TDengine.Error(res)); - ExitProgram(conn, 1); + throw new Exception("failed to create database, reason: " + TDengine.Error(res)); } res = TDengine.Query(conn, "USE test"); if (TDengine.ErrorNo(res) != 0) { - Console.WriteLine("failed to change database, reason: " + TDengine.Error(res)); - ExitProgram(conn, 1); + throw new Exception("failed to change database, reason: " + TDengine.Error(res)); } } - - static void ExitProgram(IntPtr conn, int exitCode) - { - TDengine.Close(conn); - TDengine.Cleanup(); - Environment.Exit(exitCode); - } } } diff --git a/docs/examples/csharp/native-example/optsjson.csproj b/docs/examples/csharp/optsJSON/optsJSON.csproj similarity index 98% rename from docs/examples/csharp/native-example/optsjson.csproj rename to docs/examples/csharp/optsJSON/optsJSON.csproj index da16025dcd..208f04c82d 100644 --- a/docs/examples/csharp/native-example/optsjson.csproj +++ b/docs/examples/csharp/optsJSON/optsJSON.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/native-example/OptsTelnetExample.cs b/docs/examples/csharp/optsTelnet/Program.cs similarity index 59% rename from docs/examples/csharp/native-example/OptsTelnetExample.cs rename to docs/examples/csharp/optsTelnet/Program.cs index bb752db1af..e73ceb041a 100644 --- a/docs/examples/csharp/native-example/OptsTelnetExample.cs +++ b/docs/examples/csharp/optsTelnet/Program.cs @@ -7,8 +7,10 @@ namespace TDengineExample static void Main() { IntPtr conn = GetConnection(); - PrepareDatabase(conn); - string[] lines = { + try + { + PrepareDatabase(conn); + string[] lines = { "meters.current 1648432611249 10.3 location=California.SanFrancisco groupid=2", "meters.current 1648432611250 12.6 location=California.SanFrancisco groupid=2", "meters.current 1648432611249 10.8 location=California.LosAngeles groupid=3", @@ -18,20 +20,22 @@ namespace TDengineExample "meters.voltage 1648432611249 221 location=California.LosAngeles groupid=3", "meters.voltage 1648432611250 217 location=California.LosAngeles groupid=3", }; - IntPtr res = TDengine.SchemalessInsert(conn, lines, lines.Length, (int)TDengineSchemalessProtocol.TSDB_SML_TELNET_PROTOCOL, (int)TDengineSchemalessPrecision.TSDB_SML_TIMESTAMP_NOT_CONFIGURED); - if (TDengine.ErrorNo(res) != 0) - { - Console.WriteLine("SchemalessInsert failed since " + TDengine.Error(res)); - ExitProgram(conn, 1); + IntPtr res = TDengine.SchemalessInsert(conn, lines, lines.Length, (int)TDengineSchemalessProtocol.TSDB_SML_TELNET_PROTOCOL, (int)TDengineSchemalessPrecision.TSDB_SML_TIMESTAMP_NOT_CONFIGURED); + if (TDengine.ErrorNo(res) != 0) + { + throw new Exception("SchemalessInsert failed since " + TDengine.Error(res)); + } + else + { + int affectedRows = TDengine.AffectRows(res); + Console.WriteLine($"SchemalessInsert success, affected {affectedRows} rows"); + } + TDengine.FreeResult(res); } - else + catch { - int affectedRows = TDengine.AffectRows(res); - Console.WriteLine($"SchemalessInsert success, affected {affectedRows} rows"); + TDengine.Close(conn); } - TDengine.FreeResult(res); - ExitProgram(conn, 0); - } static IntPtr GetConnection() { @@ -43,9 +47,7 @@ namespace TDengineExample var conn = TDengine.Connect(host, username, password, dbname, port); if (conn == IntPtr.Zero) { - Console.WriteLine("Connect to TDengine failed"); - TDengine.Cleanup(); - Environment.Exit(1); + throw new Exception("Connect to TDengine failed"); } else { @@ -59,22 +61,13 @@ namespace TDengineExample IntPtr res = TDengine.Query(conn, "CREATE DATABASE test"); if (TDengine.ErrorNo(res) != 0) { - Console.WriteLine("failed to create database, reason: " + TDengine.Error(res)); - ExitProgram(conn, 1); + throw new Exception("failed to create database, reason: " + TDengine.Error(res)); } res = TDengine.Query(conn, "USE test"); if (TDengine.ErrorNo(res) != 0) { - Console.WriteLine("failed to change database, reason: " + TDengine.Error(res)); - ExitProgram(conn, 1); + throw new Exception("failed to change database, reason: " + TDengine.Error(res)); } } - - static void ExitProgram(IntPtr conn, int exitCode) - { - TDengine.Close(conn); - TDengine.Cleanup(); - Environment.Exit(exitCode); - } } } diff --git a/docs/examples/csharp/native-example/optstelnet.csproj b/docs/examples/csharp/optsTelnet/optstelnet.csproj similarity index 98% rename from docs/examples/csharp/native-example/optstelnet.csproj rename to docs/examples/csharp/optsTelnet/optstelnet.csproj index 194de21bcc..32c76ec418 100644 --- a/docs/examples/csharp/native-example/optstelnet.csproj +++ b/docs/examples/csharp/optsTelnet/optstelnet.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/query/Program.cs b/docs/examples/csharp/query/Program.cs new file mode 100644 index 0000000000..84c7f9db1f --- /dev/null +++ b/docs/examples/csharp/query/Program.cs @@ -0,0 +1,80 @@ +using TDengineDriver; +using TDengineDriver.Impl; +using System.Runtime.InteropServices; + +namespace TDengineExample +{ + internal class QueryExample + { + static void Main() + { + IntPtr conn = GetConnection(); + try + { + // run query + IntPtr res = TDengine.Query(conn, "SELECT * FROM meters LIMIT 2"); + if (TDengine.ErrorNo(res) != 0) + { + throw new Exception("Failed to query since: " + TDengine.Error(res)); + } + + // get filed count + int fieldCount = TDengine.FieldCount(res); + Console.WriteLine("fieldCount=" + fieldCount); + + // print column names + List metas = LibTaos.GetMeta(res); + for (int i = 0; i < metas.Count; i++) + { + Console.Write(metas[i].name + "\t"); + } + Console.WriteLine(); + + // print values + List resData = LibTaos.GetData(res); + for (int i = 0; i < resData.Count; i++) + { + Console.Write($"|{resData[i].ToString()} \t"); + if (((i + 1) % metas.Count == 0)) + { + Console.WriteLine(""); + } + } + Console.WriteLine(); + + // Free result after use + TDengine.FreeResult(res); + } + finally + { + TDengine.Close(conn); + } + + } + static IntPtr GetConnection() + { + string host = "localhost"; + short port = 6030; + string username = "root"; + string password = "taosdata"; + string dbname = "power"; + var conn = TDengine.Connect(host, username, password, dbname, port); + if (conn == IntPtr.Zero) + { + throw new Exception("Connect to TDengine failed"); + } + else + { + Console.WriteLine("Connect to TDengine success"); + } + return conn; + } + } +} + +// output: +// Connect to TDengine success +// fieldCount=6 +// ts current voltage phase location groupid +// 1648432611249 10.3 219 0.31 California.SanFrancisco 2 +// 1648432611749 12.6 218 0.33 California.SanFrancisco 2 \ No newline at end of file diff --git a/docs/examples/csharp/native-example/query.csproj b/docs/examples/csharp/query/query.csproj similarity index 98% rename from docs/examples/csharp/native-example/query.csproj rename to docs/examples/csharp/query/query.csproj index 39fc135d5a..360d73b2c0 100644 --- a/docs/examples/csharp/native-example/query.csproj +++ b/docs/examples/csharp/query/query.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/sqlInsert/Program.cs b/docs/examples/csharp/sqlInsert/Program.cs new file mode 100644 index 0000000000..f23a6e1663 --- /dev/null +++ b/docs/examples/csharp/sqlInsert/Program.cs @@ -0,0 +1,69 @@ +using TDengineDriver; + + +namespace TDengineExample +{ + internal class SQLInsertExample + { + + static void Main() + { + IntPtr conn = GetConnection(); + try + { + IntPtr res = TDengine.Query(conn, "CREATE DATABASE power"); + CheckRes(conn, res, "failed to create database"); + res = TDengine.Query(conn, "USE power"); + CheckRes(conn, res, "failed to change database"); + res = TDengine.Query(conn, "CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)"); + CheckRes(conn, res, "failed to create stable"); + var sql = "INSERT INTO d1001 USING meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000) " + + "d1002 USING power.meters TAGS('California.SanFrancisco', 3) VALUES('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000) " + + "d1003 USING power.meters TAGS('California.LosAngeles', 2) VALUES('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000)('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000) " + + "d1004 USING power.meters TAGS('California.LosAngeles', 3) VALUES('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000)('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)"; + res = TDengine.Query(conn, sql); + CheckRes(conn, res, "failed to insert data"); + int affectedRows = TDengine.AffectRows(res); + Console.WriteLine("affectedRows " + affectedRows); + TDengine.FreeResult(res); + } + finally + { + TDengine.Close(conn); + } + + } + + static IntPtr GetConnection() + { + string host = "localhost"; + short port = 6030; + string username = "root"; + string password = "taosdata"; + string dbname = ""; + var conn = TDengine.Connect(host, username, password, dbname, port); + if (conn == IntPtr.Zero) + { + throw new Exception("Connect to TDengine failed"); + } + else + { + Console.WriteLine("Connect to TDengine success"); + } + return conn; + } + + static void CheckRes(IntPtr conn, IntPtr res, String errorMsg) + { + if (TDengine.ErrorNo(res) != 0) + { + throw new Exception($"{errorMsg} since: {TDengine.Error(res)}"); + } + } + + } +} + +// output: +// Connect to TDengine success +// affectedRows 8 diff --git a/docs/examples/csharp/native-example/sqlinsert.csproj b/docs/examples/csharp/sqlInsert/sqlinsert.csproj similarity index 98% rename from docs/examples/csharp/native-example/sqlinsert.csproj rename to docs/examples/csharp/sqlInsert/sqlinsert.csproj index ab0e5e717a..1b6f745c82 100644 --- a/docs/examples/csharp/native-example/sqlinsert.csproj +++ b/docs/examples/csharp/sqlInsert/sqlinsert.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/native-example/StmtInsertExample.cs b/docs/examples/csharp/stmtInsert/Program.cs similarity index 52% rename from docs/examples/csharp/native-example/StmtInsertExample.cs rename to docs/examples/csharp/stmtInsert/Program.cs index 41a557ebd4..80cadb2ff8 100644 --- a/docs/examples/csharp/native-example/StmtInsertExample.cs +++ b/docs/examples/csharp/stmtInsert/Program.cs @@ -9,45 +9,50 @@ namespace TDengineExample static void Main() { conn = GetConnection(); - PrepareSTable(); - // 1. init and prepare - stmt = TDengine.StmtInit(conn); - if (stmt == IntPtr.Zero) + try { - Console.WriteLine("failed to init stmt, " + TDengine.Error(stmt)); - ExitProgram(); - } - int res = TDengine.StmtPrepare(stmt, "INSERT INTO ? USING meters TAGS(?, ?) VALUES(?, ?, ?, ?)"); - CheckStmtRes(res, "failed to prepare stmt"); + PrepareSTable(); + // 1. init and prepare + stmt = TDengine.StmtInit(conn); + if (stmt == IntPtr.Zero) + { + throw new Exception("failed to init stmt."); + } + int res = TDengine.StmtPrepare(stmt, "INSERT INTO ? USING meters TAGS(?, ?) VALUES(?, ?, ?, ?)"); + CheckStmtRes(res, "failed to prepare stmt"); - // 2. bind table name and tags - TAOS_MULTI_BIND[] tags = new TAOS_MULTI_BIND[2] { TaosMultiBind.MultiBindBinary(new string[]{"California.SanFrancisco"}), TaosMultiBind.MultiBindInt(new int?[] {2}) }; - res = TDengine.StmtSetTbnameTags(stmt, "d1001", tags); - CheckStmtRes(res, "failed to bind table name and tags"); + // 2. bind table name and tags + TAOS_MULTI_BIND[] tags = new TAOS_MULTI_BIND[2] { TaosMultiBind.MultiBindBinary(new string[] { "California.SanFrancisco" }), TaosMultiBind.MultiBindInt(new int?[] { 2 }) }; + res = TDengine.StmtSetTbnameTags(stmt, "d1001", tags); + CheckStmtRes(res, "failed to bind table name and tags"); - // 3. bind values - TAOS_MULTI_BIND[] values = new TAOS_MULTI_BIND[4] { + // 3. bind values + TAOS_MULTI_BIND[] values = new TAOS_MULTI_BIND[4] { TaosMultiBind.MultiBindTimestamp(new long[2] { 1648432611249, 1648432611749}), TaosMultiBind.MultiBindFloat(new float?[2] { 10.3f, 12.6f}), TaosMultiBind.MultiBindInt(new int?[2] { 219, 218}), TaosMultiBind.MultiBindFloat(new float?[2]{ 0.31f, 0.33f}) }; - res = TDengine.StmtBindParamBatch(stmt, values); - CheckStmtRes(res, "failed to bind params"); + res = TDengine.StmtBindParamBatch(stmt, values); + CheckStmtRes(res, "failed to bind params"); - // 4. add batch - res = TDengine.StmtAddBatch(stmt); - CheckStmtRes(res, "failed to add batch"); + // 4. add batch + res = TDengine.StmtAddBatch(stmt); + CheckStmtRes(res, "failed to add batch"); - // 5. execute - res = TDengine.StmtExecute(stmt); - CheckStmtRes(res, "failed to execute"); + // 5. execute + res = TDengine.StmtExecute(stmt); + CheckStmtRes(res, "failed to execute"); + + // 6. free + TaosMultiBind.FreeTaosBind(tags); + TaosMultiBind.FreeTaosBind(values); + } + finally + { + TDengine.Close(conn); + } - // 6. free - TaosMultiBind.FreeTaosBind(tags); - TaosMultiBind.FreeTaosBind(values); - TDengine.Close(conn); - TDengine.Cleanup(); } static IntPtr GetConnection() @@ -60,8 +65,7 @@ namespace TDengineExample var conn = TDengine.Connect(host, username, password, dbname, port); if (conn == IntPtr.Zero) { - Console.WriteLine("Connect to TDengine failed"); - Environment.Exit(0); + throw new Exception("Connect to TDengine failed"); } else { @@ -70,8 +74,6 @@ namespace TDengineExample return conn; } - - static void PrepareSTable() { IntPtr res = TDengine.Query(conn, "CREATE DATABASE power"); @@ -90,9 +92,8 @@ namespace TDengineExample int code = TDengine.StmtClose(stmt); if (code != 0) { - Console.WriteLine($"failed to close stmt, {code} reason: {TDengine.StmtErrorStr(stmt)} "); + throw new Exception($"failed to close stmt, {code} reason: {TDengine.StmtErrorStr(stmt)} "); } - ExitProgram(); } } @@ -100,16 +101,9 @@ namespace TDengineExample { if (TDengine.ErrorNo(res) != 0) { - Console.WriteLine(errorMsg + " since:" + TDengine.Error(res)); - ExitProgram(); + throw new Exception(errorMsg + " since:" + TDengine.Error(res)); } } - static void ExitProgram() - { - TDengine.Close(conn); - TDengine.Cleanup(); - Environment.Exit(1); - } } } diff --git a/docs/examples/csharp/native-example/stmtinsert.csproj b/docs/examples/csharp/stmtInsert/stmtinsert.csproj similarity index 98% rename from docs/examples/csharp/native-example/stmtinsert.csproj rename to docs/examples/csharp/stmtInsert/stmtinsert.csproj index 3d459fbeda..f5b2b67397 100644 --- a/docs/examples/csharp/native-example/stmtinsert.csproj +++ b/docs/examples/csharp/stmtInsert/stmtinsert.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/subscribe/subscribe.csproj b/docs/examples/csharp/subscribe/subscribe.csproj index 8ae1cf6bc6..191b3f9e9b 100644 --- a/docs/examples/csharp/subscribe/subscribe.csproj +++ b/docs/examples/csharp/subscribe/subscribe.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/examples/csharp/wsConnect/Program.cs b/docs/examples/csharp/wsConnect/Program.cs new file mode 100644 index 0000000000..a534bb8a65 --- /dev/null +++ b/docs/examples/csharp/wsConnect/Program.cs @@ -0,0 +1,28 @@ +using System; +using TDengineWS.Impl; + +namespace Examples +{ + public class WSConnExample + { + static int Main(string[] args) + { + string DSN = "ws://root:taosdata@127.0.0.1:6041/test"; + IntPtr wsConn = LibTaosWS.WSConnectWithDSN(DSN); + + if (wsConn == IntPtr.Zero) + { + Console.WriteLine("get WS connection failed"); + return -1; + } + else + { + Console.WriteLine("Establish connect success."); + // close connection. + LibTaosWS.WSClose(wsConn); + } + + return 0; + } + } +} diff --git a/docs/examples/csharp/wsConnect/wsConnect.csproj b/docs/examples/csharp/wsConnect/wsConnect.csproj new file mode 100644 index 0000000000..c7988b6e9c --- /dev/null +++ b/docs/examples/csharp/wsConnect/wsConnect.csproj @@ -0,0 +1,18 @@ + + + + Exe + net6.0 + + + + + + + + + + + + + diff --git a/docs/examples/csharp/wsInsert/Program.cs b/docs/examples/csharp/wsInsert/Program.cs new file mode 100644 index 0000000000..7fa6af805c --- /dev/null +++ b/docs/examples/csharp/wsInsert/Program.cs @@ -0,0 +1,61 @@ +using System; +using TDengineWS.Impl; + +namespace Examples +{ + public class WSInsertExample + { + static int Main(string[] args) + { + string DSN = "ws://root:taosdata@127.0.0.1:6041/test"; + IntPtr wsConn = LibTaosWS.WSConnectWithDSN(DSN); + + // Assert if connection is validate + if (wsConn == IntPtr.Zero) + { + Console.WriteLine("get WS connection failed"); + return -1; + } + else + { + Console.WriteLine("Establish connect success."); + } + + string createTable = "CREATE STABLE test.meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);"; + string insert = "INSERT INTO test.d1001 USING test.meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000)" + + "test.d1002 USING test.meters TAGS('California.SanFrancisco', 3) VALUES('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000)" + + "test.d1003 USING test.meters TAGS('California.LosAngeles', 2) VALUES('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000)('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000) " + + "test.d1004 USING test.meters TAGS('California.LosAngeles', 3) VALUES('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000)('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)"; + + IntPtr wsRes = LibTaosWS.WSQuery(wsConn, createTable); + ValidInsert("create table", wsRes); + LibTaosWS.WSFreeResult(wsRes); + + wsRes = LibTaosWS.WSQuery(wsConn, insert); + ValidInsert("insert data", wsRes); + LibTaosWS.WSFreeResult(wsRes); + + // close connection. + LibTaosWS.WSClose(wsConn); + + return 0; + } + + static void ValidInsert(string desc, IntPtr wsRes) + { + int code = LibTaosWS.WSErrorNo(wsRes); + if (code != 0) + { + Console.WriteLine($"execute SQL failed: reason: {LibTaosWS.WSErrorStr(wsRes)}, code:{code}"); + } + else + { + Console.WriteLine("{0} success affect {2} rows, cost {1} nanoseconds", desc, LibTaosWS.WSTakeTiming(wsRes), LibTaosWS.WSAffectRows(wsRes)); + } + } + } + +} +// Establish connect success. +// create table success affect 0 rows, cost 3717542 nanoseconds +// insert data success affect 8 rows, cost 2613637 nanoseconds diff --git a/docs/examples/csharp/wsInsert/wsInsert.csproj b/docs/examples/csharp/wsInsert/wsInsert.csproj new file mode 100644 index 0000000000..5aa419b2c8 --- /dev/null +++ b/docs/examples/csharp/wsInsert/wsInsert.csproj @@ -0,0 +1,17 @@ + + + + Exe + net6.0 + enable + + + + + + + + + + + diff --git a/docs/examples/csharp/wsQuery/Program.cs b/docs/examples/csharp/wsQuery/Program.cs new file mode 100644 index 0000000000..8ee900a05a --- /dev/null +++ b/docs/examples/csharp/wsQuery/Program.cs @@ -0,0 +1,79 @@ +using System; +using TDengineWS.Impl; +using System.Collections.Generic; +using TDengineDriver; + +namespace Examples +{ + public class WSQueryExample + { + static int Main(string[] args) + { + string DSN = "ws://root:taosdata@127.0.0.1:6041/test"; + IntPtr wsConn = LibTaosWS.WSConnectWithDSN(DSN); + if (wsConn == IntPtr.Zero) + { + Console.WriteLine("get WS connection failed"); + return -1; + } + else + { + Console.WriteLine("Establish connect success."); + } + + string select = "select * from test.meters"; + + // optional:wsRes = LibTaosWS.WSQuery(wsConn, select); + IntPtr wsRes = LibTaosWS.WSQueryTimeout(wsConn, select, 1); + // Assert if query execute success. + int code = LibTaosWS.WSErrorNo(wsRes); + if (code != 0) + { + Console.WriteLine($"execute SQL failed: reason: {LibTaosWS.WSErrorStr(wsRes)}, code:{code}"); + LibTaosWS.WSFreeResult(wsRes); + return -1; + } + + // get meta data + List metas = LibTaosWS.WSGetFields(wsRes); + // get retrieved data + List dataSet = LibTaosWS.WSGetData(wsRes); + + // do something with result. + foreach (var meta in metas) + { + Console.Write("{0} {1}({2}) \t|\t", meta.name, meta.TypeName(), meta.size); + } + Console.WriteLine(""); + + for (int i = 0; i < dataSet.Count;) + { + for (int j = 0; j < metas.Count; j++) + { + Console.Write("{0}\t|\t", dataSet[i]); + i++; + } + Console.WriteLine(""); + } + + // Free result after use. + LibTaosWS.WSFreeResult(wsRes); + + // close connection. + LibTaosWS.WSClose(wsConn); + + return 0; + } + } +} + +// Establish connect success. +// ts TIMESTAMP(8) | current FLOAT(4) | voltage INT(4) | phase FLOAT(4) | location BINARY(64) | groupid INT(4) | +// 1538548685000 | 10.8 | 223 | 0.29 | California.LosAngeles | 3 | +// 1538548686500 | 11.5 | 221 | 0.35 | California.LosAngeles | 3 | +// 1538548685500 | 11.8 | 221 | 0.28 | California.LosAngeles | 2 | +// 1538548696600 | 13.4 | 223 | 0.29 | California.LosAngeles | 2 | +// 1538548685000 | 10.3 | 219 | 0.31 | California.SanFrancisco | 2 | +// 1538548695000 | 12.6 | 218 | 0.33 | California.SanFrancisco | 2 | +// 1538548696800 | 12.3 | 221 | 0.31 | California.SanFrancisco | 2 | +// 1538548696650 | 10.3 | 218 | 0.25 | California.SanFrancisco | 3 | diff --git a/docs/examples/csharp/wsQuery/wsQuery.csproj b/docs/examples/csharp/wsQuery/wsQuery.csproj new file mode 100644 index 0000000000..bcc7c19a59 --- /dev/null +++ b/docs/examples/csharp/wsQuery/wsQuery.csproj @@ -0,0 +1,19 @@ + + + + Exe + net6.0 + enable + + + + + + + + + + + + + diff --git a/docs/examples/csharp/wsStmt/Program.cs b/docs/examples/csharp/wsStmt/Program.cs new file mode 100644 index 0000000000..f8673357db --- /dev/null +++ b/docs/examples/csharp/wsStmt/Program.cs @@ -0,0 +1,98 @@ +using System; +using TDengineWS.Impl; +using TDengineDriver; +using System.Runtime.InteropServices; + +namespace Examples +{ + public class WSStmtExample + { + static int Main(string[] args) + { + const string DSN = "ws://root:taosdata@127.0.0.1:6041/test"; + const string table = "meters"; + const string database = "test"; + const string childTable = "d1005"; + string insert = $"insert into ? using {database}.{table} tags(?,?) values(?,?,?,?)"; + const int numOfTags = 2; + const int numOfColumns = 4; + + // Establish connection + IntPtr wsConn = LibTaosWS.WSConnectWithDSN(DSN); + if (wsConn == IntPtr.Zero) + { + Console.WriteLine($"get WS connection failed"); + return -1; + } + else + { + Console.WriteLine("Establish connect success..."); + } + + // init stmt + IntPtr wsStmt = LibTaosWS.WSStmtInit(wsConn); + if (wsStmt != IntPtr.Zero) + { + int code = LibTaosWS.WSStmtPrepare(wsStmt, insert); + ValidStmtStep(code, wsStmt, "WSStmtPrepare"); + + TAOS_MULTI_BIND[] wsTags = new TAOS_MULTI_BIND[] { WSMultiBind.WSBindNchar(new string[] { "California.SanDiego" }), WSMultiBind.WSBindInt(new int?[] { 4 }) }; + code = LibTaosWS.WSStmtSetTbnameTags(wsStmt, $"{database}.{childTable}", wsTags, numOfTags); + ValidStmtStep(code, wsStmt, "WSStmtSetTbnameTags"); + + TAOS_MULTI_BIND[] data = new TAOS_MULTI_BIND[4]; + data[0] = WSMultiBind.WSBindTimestamp(new long[] { 1538548687000, 1538548688000, 1538548689000, 1538548690000, 1538548691000 }); + data[1] = WSMultiBind.WSBindFloat(new float?[] { 10.30F, 10.40F, 10.50F, 10.60F, 10.70F }); + data[2] = WSMultiBind.WSBindInt(new int?[] { 223, 221, 222, 220, 219 }); + data[3] = WSMultiBind.WSBindFloat(new float?[] { 0.31F, 0.32F, 0.33F, 0.35F, 0.28F }); + code = LibTaosWS.WSStmtBindParamBatch(wsStmt, data, numOfColumns); + ValidStmtStep(code, wsStmt, "WSStmtBindParamBatch"); + + code = LibTaosWS.WSStmtAddBatch(wsStmt); + ValidStmtStep(code, wsStmt, "WSStmtAddBatch"); + + IntPtr stmtAffectRowPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Int32))); + code = LibTaosWS.WSStmtExecute(wsStmt, stmtAffectRowPtr); + ValidStmtStep(code, wsStmt, "WSStmtExecute"); + Console.WriteLine("WS STMT insert {0} rows...", Marshal.ReadInt32(stmtAffectRowPtr)); + Marshal.FreeHGlobal(stmtAffectRowPtr); + + LibTaosWS.WSStmtClose(wsStmt); + + // Free unmanaged memory + WSMultiBind.WSFreeTaosBind(wsTags); + WSMultiBind.WSFreeTaosBind(data); + + //check result with SQL "SELECT * FROM test.d1005;" + } + else + { + Console.WriteLine("Init STMT failed..."); + } + + // close connection. + LibTaosWS.WSClose(wsConn); + + return 0; + } + + static void ValidStmtStep(int code, IntPtr wsStmt, string desc) + { + if (code != 0) + { + Console.WriteLine($"{desc} failed,reason: {LibTaosWS.WSErrorStr(wsStmt)}, code: {code}"); + } + else + { + Console.WriteLine("{0} success...", desc); + } + } + } +} + +// WSStmtPrepare success... +// WSStmtSetTbnameTags success... +// WSStmtBindParamBatch success... +// WSStmtAddBatch success... +// WSStmtExecute success... +// WS STMT insert 5 rows... diff --git a/docs/examples/csharp/wsStmt/wsStmt.csproj b/docs/examples/csharp/wsStmt/wsStmt.csproj new file mode 100644 index 0000000000..bcc7c19a59 --- /dev/null +++ b/docs/examples/csharp/wsStmt/wsStmt.csproj @@ -0,0 +1,19 @@ + + + + Exe + net6.0 + enable + + + + + + + + + + + + + diff --git a/docs/examples/java/src/main/java/com/taos/example/RestInsertExample.java b/docs/examples/java/src/main/java/com/taos/example/RestInsertExample.java index af97fe4373..9d85bf2a94 100644 --- a/docs/examples/java/src/main/java/com/taos/example/RestInsertExample.java +++ b/docs/examples/java/src/main/java/com/taos/example/RestInsertExample.java @@ -16,14 +16,14 @@ public class RestInsertExample { private static List getRawData() { return Arrays.asList( - "d1001,2018-10-03 14:38:05.000,10.30000,219,0.31000,California.SanFrancisco,2", - "d1001,2018-10-03 14:38:15.000,12.60000,218,0.33000,California.SanFrancisco,2", - "d1001,2018-10-03 14:38:16.800,12.30000,221,0.31000,California.SanFrancisco,2", - "d1002,2018-10-03 14:38:16.650,10.30000,218,0.25000,California.SanFrancisco,3", - "d1003,2018-10-03 14:38:05.500,11.80000,221,0.28000,California.LosAngeles,2", - "d1003,2018-10-03 14:38:16.600,13.40000,223,0.29000,California.LosAngeles,2", - "d1004,2018-10-03 14:38:05.000,10.80000,223,0.29000,California.LosAngeles,3", - "d1004,2018-10-03 14:38:06.500,11.50000,221,0.35000,California.LosAngeles,3" + "d1001,2018-10-03 14:38:05.000,10.30000,219,0.31000,'California.SanFrancisco',2", + "d1001,2018-10-03 14:38:15.000,12.60000,218,0.33000,'California.SanFrancisco',2", + "d1001,2018-10-03 14:38:16.800,12.30000,221,0.31000,'California.SanFrancisco',2", + "d1002,2018-10-03 14:38:16.650,10.30000,218,0.25000,'California.SanFrancisco',3", + "d1003,2018-10-03 14:38:05.500,11.80000,221,0.28000,'California.LosAngeles',2", + "d1003,2018-10-03 14:38:16.600,13.40000,223,0.29000,'California.LosAngeles',2", + "d1004,2018-10-03 14:38:05.000,10.80000,223,0.29000,'California.LosAngeles',3", + "d1004,2018-10-03 14:38:06.500,11.50000,221,0.35000,'California.LosAngeles',3" ); } diff --git a/docs/examples/java/src/main/java/com/taos/example/SubscribeDemo.java b/docs/examples/java/src/main/java/com/taos/example/SubscribeDemo.java index 50e8b35771..e9af5e9ce0 100644 --- a/docs/examples/java/src/main/java/com/taos/example/SubscribeDemo.java +++ b/docs/examples/java/src/main/java/com/taos/example/SubscribeDemo.java @@ -38,12 +38,12 @@ public class SubscribeDemo { statement.executeUpdate("create database " + DB_NAME); statement.executeUpdate("use " + DB_NAME); statement.executeUpdate( - "CREATE TABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT) TAGS (`groupid` INT, `location` BINARY(16))"); - statement.executeUpdate("CREATE TABLE `d0` USING `meters` TAGS(0, 'Los Angles')"); + "CREATE TABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT) TAGS (`groupid` INT, `location` BINARY(24))"); + statement.executeUpdate("CREATE TABLE `d0` USING `meters` TAGS(0, 'California.LosAngles')"); statement.executeUpdate("INSERT INTO `d0` values(now - 10s, 0.32, 116)"); statement.executeUpdate("INSERT INTO `d0` values(now - 8s, NULL, NULL)"); statement.executeUpdate( - "INSERT INTO `d1` USING `meters` TAGS(1, 'San Francisco') values(now - 9s, 10.1, 119)"); + "INSERT INTO `d1` USING `meters` TAGS(1, 'California.SanFrancisco') values(now - 9s, 10.1, 119)"); statement.executeUpdate( "INSERT INTO `d1` values (now-8s, 10, 120) (now - 6s, 10, 119) (now - 4s, 11.2, 118)"); // create topic @@ -57,7 +57,7 @@ public class SubscribeDemo { properties.setProperty(TMQConstants.ENABLE_AUTO_COMMIT, "true"); properties.setProperty(TMQConstants.GROUP_ID, "test"); properties.setProperty(TMQConstants.VALUE_DESERIALIZER, - "com.taosdata.jdbc.MetersDeserializer"); + "com.taos.example.MetersDeserializer"); // poll data try (TaosConsumer consumer = new TaosConsumer<>(properties)) { @@ -75,4 +75,4 @@ public class SubscribeDemo { } timer.cancel(); } -} \ No newline at end of file +} diff --git a/docs/examples/java/src/main/java/com/taos/example/highvolume/DataBaseMonitor.java b/docs/examples/java/src/main/java/com/taos/example/highvolume/DataBaseMonitor.java new file mode 100644 index 0000000000..04b149a4b9 --- /dev/null +++ b/docs/examples/java/src/main/java/com/taos/example/highvolume/DataBaseMonitor.java @@ -0,0 +1,63 @@ +package com.taos.example.highvolume; + +import java.sql.*; + +/** + * Prepare target database. + * Count total records in database periodically so that we can estimate the writing speed. + */ +public class DataBaseMonitor { + private Connection conn; + private Statement stmt; + + public DataBaseMonitor init() throws SQLException { + if (conn == null) { + String jdbcURL = System.getenv("TDENGINE_JDBC_URL"); + conn = DriverManager.getConnection(jdbcURL); + stmt = conn.createStatement(); + } + return this; + } + + public void close() { + try { + stmt.close(); + } catch (SQLException e) { + } + try { + conn.close(); + } catch (SQLException e) { + } + } + + public void prepareDatabase() throws SQLException { + stmt.execute("DROP DATABASE IF EXISTS test"); + stmt.execute("CREATE DATABASE test"); + stmt.execute("CREATE STABLE test.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)"); + } + + public Long count() throws SQLException { + if (!stmt.isClosed()) { + ResultSet result = stmt.executeQuery("SELECT count(*) from test.meters"); + result.next(); + return result.getLong(1); + } + return null; + } + + /** + * show test.stables; + * + * name | created_time | columns | tags | tables | + * ============================================================================================ + * meters | 2022-07-20 08:39:30.902 | 4 | 2 | 620000 | + */ + public Long getTableCount() throws SQLException { + if (!stmt.isClosed()) { + ResultSet result = stmt.executeQuery("show test.stables"); + result.next(); + return result.getLong(5); + } + return null; + } +} \ No newline at end of file diff --git a/docs/examples/java/src/main/java/com/taos/example/highvolume/FastWriteExample.java b/docs/examples/java/src/main/java/com/taos/example/highvolume/FastWriteExample.java new file mode 100644 index 0000000000..41b59551ca --- /dev/null +++ b/docs/examples/java/src/main/java/com/taos/example/highvolume/FastWriteExample.java @@ -0,0 +1,70 @@ +package com.taos.example.highvolume; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; + + +public class FastWriteExample { + final static Logger logger = LoggerFactory.getLogger(FastWriteExample.class); + + final static int taskQueueCapacity = 1000000; + final static List> taskQueues = new ArrayList<>(); + final static List readTasks = new ArrayList<>(); + final static List writeTasks = new ArrayList<>(); + final static DataBaseMonitor databaseMonitor = new DataBaseMonitor(); + + public static void stopAll() { + logger.info("shutting down"); + readTasks.forEach(task -> task.stop()); + writeTasks.forEach(task -> task.stop()); + databaseMonitor.close(); + } + + public static void main(String[] args) throws InterruptedException, SQLException { + int readTaskCount = args.length > 0 ? Integer.parseInt(args[0]) : 1; + int writeTaskCount = args.length > 1 ? Integer.parseInt(args[1]) : 3; + int tableCount = args.length > 2 ? Integer.parseInt(args[2]) : 1000; + int maxBatchSize = args.length > 3 ? Integer.parseInt(args[3]) : 3000; + + logger.info("readTaskCount={}, writeTaskCount={} tableCount={} maxBatchSize={}", + readTaskCount, writeTaskCount, tableCount, maxBatchSize); + + databaseMonitor.init().prepareDatabase(); + + // Create task queues, whiting tasks and start writing threads. + for (int i = 0; i < writeTaskCount; ++i) { + BlockingQueue queue = new ArrayBlockingQueue<>(taskQueueCapacity); + taskQueues.add(queue); + WriteTask task = new WriteTask(queue, maxBatchSize); + Thread t = new Thread(task); + t.setName("WriteThread-" + i); + t.start(); + } + + // create reading tasks and start reading threads + int tableCountPerTask = tableCount / readTaskCount; + for (int i = 0; i < readTaskCount; ++i) { + ReadTask task = new ReadTask(i, taskQueues, tableCountPerTask); + Thread t = new Thread(task); + t.setName("ReadThread-" + i); + t.start(); + } + + Runtime.getRuntime().addShutdownHook(new Thread(FastWriteExample::stopAll)); + + long lastCount = 0; + while (true) { + Thread.sleep(10000); + long numberOfTable = databaseMonitor.getTableCount(); + long count = databaseMonitor.count(); + logger.info("numberOfTable={} count={} speed={}", numberOfTable, count, (count - lastCount) / 10); + lastCount = count; + } + } +} \ No newline at end of file diff --git a/docs/examples/java/src/main/java/com/taos/example/highvolume/MockDataSource.java b/docs/examples/java/src/main/java/com/taos/example/highvolume/MockDataSource.java new file mode 100644 index 0000000000..f0ebc53b4b --- /dev/null +++ b/docs/examples/java/src/main/java/com/taos/example/highvolume/MockDataSource.java @@ -0,0 +1,53 @@ +package com.taos.example.highvolume; + +import java.util.Iterator; + +/** + * Generate test data + */ +class MockDataSource implements Iterator { + private String tbNamePrefix; + private int tableCount; + private long maxRowsPerTable = 1000000000L; + + // 100 milliseconds between two neighbouring rows. + long startMs = System.currentTimeMillis() - maxRowsPerTable * 100; + private int currentRow = 0; + private int currentTbId = -1; + + // mock values + String[] location = {"California.LosAngeles", "California.SanDiego", "California.SanJose", "California.Campbell", "California.SanFrancisco"}; + float[] current = {8.8f, 10.7f, 9.9f, 8.9f, 9.4f}; + int[] voltage = {119, 116, 111, 113, 118}; + float[] phase = {0.32f, 0.34f, 0.33f, 0.329f, 0.141f}; + + public MockDataSource(String tbNamePrefix, int tableCount) { + this.tbNamePrefix = tbNamePrefix; + this.tableCount = tableCount; + } + + @Override + public boolean hasNext() { + currentTbId += 1; + if (currentTbId == tableCount) { + currentTbId = 0; + currentRow += 1; + } + return currentRow < maxRowsPerTable; + } + + @Override + public String next() { + long ts = startMs + 100 * currentRow; + int groupId = currentTbId % 5 == 0 ? currentTbId / 5 : currentTbId / 5 + 1; + StringBuilder sb = new StringBuilder(tbNamePrefix + "_" + currentTbId + ","); // tbName + sb.append(ts).append(','); // ts + sb.append(current[currentRow % 5]).append(','); // current + sb.append(voltage[currentRow % 5]).append(','); // voltage + sb.append(phase[currentRow % 5]).append(','); // phase + sb.append(location[currentRow % 5]).append(','); // location + sb.append(groupId); // groupID + + return sb.toString(); + } +} diff --git a/docs/examples/java/src/main/java/com/taos/example/highvolume/ReadTask.java b/docs/examples/java/src/main/java/com/taos/example/highvolume/ReadTask.java new file mode 100644 index 0000000000..a6fcfed1d2 --- /dev/null +++ b/docs/examples/java/src/main/java/com/taos/example/highvolume/ReadTask.java @@ -0,0 +1,58 @@ +package com.taos.example.highvolume; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.BlockingQueue; + +class ReadTask implements Runnable { + private final static Logger logger = LoggerFactory.getLogger(ReadTask.class); + private final int taskId; + private final List> taskQueues; + private final int queueCount; + private final int tableCount; + private boolean active = true; + + public ReadTask(int readTaskId, List> queues, int tableCount) { + this.taskId = readTaskId; + this.taskQueues = queues; + this.queueCount = queues.size(); + this.tableCount = tableCount; + } + + /** + * Assign data received to different queues. + * Here we use the suffix number in table name. + * You are expected to define your own rule in practice. + * + * @param line record received + * @return which queue to use + */ + public int getQueueId(String line) { + String tbName = line.substring(0, line.indexOf(',')); // For example: tb1_101 + String suffixNumber = tbName.split("_")[1]; + return Integer.parseInt(suffixNumber) % this.queueCount; + } + + @Override + public void run() { + logger.info("started"); + Iterator it = new MockDataSource("tb" + this.taskId, tableCount); + try { + while (it.hasNext() && active) { + String line = it.next(); + int queueId = getQueueId(line); + taskQueues.get(queueId).put(line); + } + } catch (Exception e) { + logger.error("Read Task Error", e); + } + } + + public void stop() { + logger.info("stop"); + this.active = false; + } +} \ No newline at end of file diff --git a/docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java b/docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java new file mode 100644 index 0000000000..c2989acdbe --- /dev/null +++ b/docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java @@ -0,0 +1,205 @@ +package com.taos.example.highvolume; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.*; +import java.util.HashMap; +import java.util.Map; + +/** + * A helper class encapsulate the logic of writing using SQL. + *

+ * The main interfaces are two methods: + *

    + *
  1. {@link SQLWriter#processLine}, which receive raw lines from WriteTask and group them by table names.
  2. + *
  3. {@link SQLWriter#flush}, which assemble INSERT statement and execute it.
  4. + *
+ *

+ * There is a technical skill worth mentioning: we create table as needed when "table does not exist" error occur instead of creating table automatically using syntax "INSET INTO tb USING stb". + * This ensure that checking table existence is a one-time-only operation. + *

+ * + *

+ */ +public class SQLWriter { + final static Logger logger = LoggerFactory.getLogger(SQLWriter.class); + + private Connection conn; + private Statement stmt; + + /** + * current number of buffered records + */ + private int bufferedCount = 0; + /** + * Maximum number of buffered records. + * Flush action will be triggered if bufferedCount reached this value, + */ + private int maxBatchSize; + + + /** + * Maximum SQL length. + */ + private int maxSQLLength; + + /** + * Map from table name to column values. For example: + * "tb001" -> "(1648432611249,2.1,114,0.09) (1648432611250,2.2,135,0.2)" + */ + private Map tbValues = new HashMap<>(); + + /** + * Map from table name to tag values in the same order as creating stable. + * Used for creating table. + */ + private Map tbTags = new HashMap<>(); + + public SQLWriter(int maxBatchSize) { + this.maxBatchSize = maxBatchSize; + } + + + /** + * Get Database Connection + * + * @return Connection + * @throws SQLException + */ + private static Connection getConnection() throws SQLException { + String jdbcURL = System.getenv("TDENGINE_JDBC_URL"); + return DriverManager.getConnection(jdbcURL); + } + + /** + * Create Connection and Statement + * + * @throws SQLException + */ + public void init() throws SQLException { + conn = getConnection(); + stmt = conn.createStatement(); + stmt.execute("use test"); + ResultSet rs = stmt.executeQuery("show variables"); + while (rs.next()) { + String configName = rs.getString(1); + if ("maxSQLLength".equals(configName)) { + maxSQLLength = Integer.parseInt(rs.getString(2)); + logger.info("maxSQLLength={}", maxSQLLength); + } + } + } + + /** + * Convert raw data to SQL fragments, group them by table name and cache them in a HashMap. + * Trigger writing when number of buffered records reached maxBachSize. + * + * @param line raw data get from task queue in format: tbName,ts,current,voltage,phase,location,groupId + */ + public void processLine(String line) throws SQLException { + bufferedCount += 1; + int firstComma = line.indexOf(','); + String tbName = line.substring(0, firstComma); + int lastComma = line.lastIndexOf(','); + int secondLastComma = line.lastIndexOf(',', lastComma - 1); + String value = "(" + line.substring(firstComma + 1, secondLastComma) + ") "; + if (tbValues.containsKey(tbName)) { + tbValues.put(tbName, tbValues.get(tbName) + value); + } else { + tbValues.put(tbName, value); + } + if (!tbTags.containsKey(tbName)) { + String location = line.substring(secondLastComma + 1, lastComma); + String groupId = line.substring(lastComma + 1); + String tagValues = "('" + location + "'," + groupId + ')'; + tbTags.put(tbName, tagValues); + } + if (bufferedCount == maxBatchSize) { + flush(); + } + } + + + /** + * Assemble INSERT statement using buffered SQL fragments in Map {@link SQLWriter#tbValues} and execute it. + * In case of "Table does not exit" exception, create all tables in the sql and retry the sql. + */ + public void flush() throws SQLException { + StringBuilder sb = new StringBuilder("INSERT INTO "); + for (Map.Entry entry : tbValues.entrySet()) { + String tableName = entry.getKey(); + String values = entry.getValue(); + String q = tableName + " values " + values + " "; + if (sb.length() + q.length() > maxSQLLength) { + executeSQL(sb.toString()); + logger.warn("increase maxSQLLength or decrease maxBatchSize to gain better performance"); + sb = new StringBuilder("INSERT INTO "); + } + sb.append(q); + } + executeSQL(sb.toString()); + tbValues.clear(); + bufferedCount = 0; + } + + private void executeSQL(String sql) throws SQLException { + try { + stmt.executeUpdate(sql); + } catch (SQLException e) { + // convert to error code defined in taoserror.h + int errorCode = e.getErrorCode() & 0xffff; + if (errorCode == 0x362 || errorCode == 0x218) { + // Table does not exist + createTables(); + executeSQL(sql); + } else { + logger.error("Execute SQL: {}", sql); + throw e; + } + } catch (Throwable throwable) { + logger.error("Execute SQL: {}", sql); + throw throwable; + } + } + + /** + * Create tables in batch using syntax: + *

+ * CREATE TABLE [IF NOT EXISTS] tb_name1 USING stb_name TAGS (tag_value1, ...) [IF NOT EXISTS] tb_name2 USING stb_name TAGS (tag_value2, ...) ...; + *

+ */ + private void createTables() throws SQLException { + StringBuilder sb = new StringBuilder("CREATE TABLE "); + for (String tbName : tbValues.keySet()) { + String tagValues = tbTags.get(tbName); + sb.append("IF NOT EXISTS ").append(tbName).append(" USING meters TAGS ").append(tagValues).append(" "); + } + String sql = sb.toString(); + try { + stmt.executeUpdate(sql); + } catch (Throwable throwable) { + logger.error("Execute SQL: {}", sql); + throw throwable; + } + } + + public boolean hasBufferedValues() { + return bufferedCount > 0; + } + + public int getBufferedCount() { + return bufferedCount; + } + + public void close() { + try { + stmt.close(); + } catch (SQLException e) { + } + try { + conn.close(); + } catch (SQLException e) { + } + } +} \ No newline at end of file diff --git a/docs/examples/java/src/main/java/com/taos/example/highvolume/StmtWriter.java b/docs/examples/java/src/main/java/com/taos/example/highvolume/StmtWriter.java new file mode 100644 index 0000000000..8ade06625d --- /dev/null +++ b/docs/examples/java/src/main/java/com/taos/example/highvolume/StmtWriter.java @@ -0,0 +1,4 @@ +package com.taos.example.highvolume; + +public class StmtWriter { +} diff --git a/docs/examples/java/src/main/java/com/taos/example/highvolume/WriteTask.java b/docs/examples/java/src/main/java/com/taos/example/highvolume/WriteTask.java new file mode 100644 index 0000000000..de9e5463d7 --- /dev/null +++ b/docs/examples/java/src/main/java/com/taos/example/highvolume/WriteTask.java @@ -0,0 +1,58 @@ +package com.taos.example.highvolume; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.BlockingQueue; + +class WriteTask implements Runnable { + private final static Logger logger = LoggerFactory.getLogger(WriteTask.class); + private final int maxBatchSize; + + // the queue from which this writing task get raw data. + private final BlockingQueue queue; + + // A flag indicate whether to continue. + private boolean active = true; + + public WriteTask(BlockingQueue taskQueue, int maxBatchSize) { + this.queue = taskQueue; + this.maxBatchSize = maxBatchSize; + } + + @Override + public void run() { + logger.info("started"); + String line = null; // data getting from the queue just now. + SQLWriter writer = new SQLWriter(maxBatchSize); + try { + writer.init(); + while (active) { + line = queue.poll(); + if (line != null) { + // parse raw data and buffer the data. + writer.processLine(line); + } else if (writer.hasBufferedValues()) { + // write data immediately if no more data in the queue + writer.flush(); + } else { + // sleep a while to avoid high CPU usage if no more data in the queue and no buffered records, . + Thread.sleep(100); + } + } + if (writer.hasBufferedValues()) { + writer.flush(); + } + } catch (Exception e) { + String msg = String.format("line=%s, bufferedCount=%s", line, writer.getBufferedCount()); + logger.error(msg, e); + } finally { + writer.close(); + } + } + + public void stop() { + logger.info("stop"); + this.active = false; + } +} \ No newline at end of file diff --git a/docs/examples/python/conn_native_pandas.py b/docs/examples/python/conn_native_pandas.py index 56942ef570..f3bab15efb 100644 --- a/docs/examples/python/conn_native_pandas.py +++ b/docs/examples/python/conn_native_pandas.py @@ -1,8 +1,11 @@ import pandas -from sqlalchemy import create_engine +from sqlalchemy import create_engine, text engine = create_engine("taos://root:taosdata@localhost:6030/power") -df = pandas.read_sql("SELECT * FROM meters", engine) +conn = engine.connect() +df = pandas.read_sql(text("SELECT * FROM power.meters"), conn) +conn.close() + # print index print(df.index) diff --git a/docs/examples/python/conn_rest_pandas.py b/docs/examples/python/conn_rest_pandas.py index 0164080cd5..1b207d6ff1 100644 --- a/docs/examples/python/conn_rest_pandas.py +++ b/docs/examples/python/conn_rest_pandas.py @@ -1,8 +1,10 @@ import pandas -from sqlalchemy import create_engine +from sqlalchemy import create_engine, text engine = create_engine("taosrest://root:taosdata@localhost:6041") -df: pandas.DataFrame = pandas.read_sql("SELECT * FROM power.meters", engine) +conn = engine.connect() +df: pandas.DataFrame = pandas.read_sql(text("SELECT * FROM power.meters"), conn) +conn.close() # print index print(df.index) diff --git a/docs/examples/python/connect_rest_examples.py b/docs/examples/python/connect_rest_examples.py index 900ec1022e..0f8625ae53 100644 --- a/docs/examples/python/connect_rest_examples.py +++ b/docs/examples/python/connect_rest_examples.py @@ -1,24 +1,25 @@ # ANCHOR: connect from taosrest import connect, TaosRestConnection, TaosRestCursor -conn: TaosRestConnection = connect(url="http://localhost:6041", - user="root", - password="taosdata", - timeout=30) +conn = connect(url="http://localhost:6041", + user="root", + password="taosdata", + timeout=30) # ANCHOR_END: connect # ANCHOR: basic # create STable -cursor: TaosRestCursor = conn.cursor() +cursor = conn.cursor() cursor.execute("DROP DATABASE IF EXISTS power") cursor.execute("CREATE DATABASE power") -cursor.execute("CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)") +cursor.execute( + "CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)") # insert data -cursor.execute("""INSERT INTO power.d1001 USING power.meters TAGS(California.SanFrancisco, 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000) - power.d1002 USING power.meters TAGS(California.SanFrancisco, 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000) - power.d1003 USING power.meters TAGS(California.LosAngeles, 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000) - power.d1004 USING power.meters TAGS(California.LosAngeles, 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)""") +cursor.execute("""INSERT INTO power.d1001 USING power.meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000) + power.d1002 USING power.meters TAGS('California.SanFrancisco', 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000) + power.d1003 USING power.meters TAGS('California.LosAngeles', 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000) + power.d1004 USING power.meters TAGS('California.LosAngeles', 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)""") print("inserted row count:", cursor.rowcount) # query data @@ -28,7 +29,7 @@ print("queried row count:", cursor.rowcount) # get column names from cursor column_names = [meta[0] for meta in cursor.description] # get rows -data: list[tuple] = cursor.fetchall() +data = cursor.fetchall() print(column_names) for row in data: print(row) diff --git a/docs/examples/python/connection_usage_native_reference.py b/docs/examples/python/connection_usage_native_reference.py index 4803511e42..0a23c5f95b 100644 --- a/docs/examples/python/connection_usage_native_reference.py +++ b/docs/examples/python/connection_usage_native_reference.py @@ -8,7 +8,7 @@ conn.execute("CREATE DATABASE test") # change database. same as execute "USE db" conn.select_db("test") conn.execute("CREATE STABLE weather(ts TIMESTAMP, temperature FLOAT) TAGS (location INT)") -affected_row: int = conn.execute("INSERT INTO t1 USING weather TAGS(1) VALUES (now, 23.5) (now+1m, 23.5) (now+2m 24.4)") +affected_row = conn.execute("INSERT INTO t1 USING weather TAGS(1) VALUES (now, 23.5) (now+1m, 23.5) (now+2m, 24.4)") print("affected_row", affected_row) # output: # affected_row 3 @@ -16,10 +16,10 @@ print("affected_row", affected_row) # ANCHOR: query # Execute a sql and get its result set. It's useful for SELECT statement -result: taos.TaosResult = conn.query("SELECT * from weather") +result = conn.query("SELECT * from weather") # Get fields from result -fields: taos.field.TaosFields = result.fields +fields = result.fields for field in fields: print(field) # {name: ts, type: 9, bytes: 8} @@ -42,4 +42,4 @@ print(data) # ANCHOR_END: query -conn.close() +conn.close() \ No newline at end of file diff --git a/docs/examples/python/fast_write_example.py b/docs/examples/python/fast_write_example.py new file mode 100644 index 0000000000..626e3310b1 --- /dev/null +++ b/docs/examples/python/fast_write_example.py @@ -0,0 +1,225 @@ +# install dependencies: +# recommend python >= 3.8 +# + +import logging +import math +import multiprocessing +import sys +import time +import os +from multiprocessing import Process, Queue +from mockdatasource import MockDataSource +from queue import Empty +from typing import List + +logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, format="%(asctime)s [%(name)s] - %(message)s") + +READ_TASK_COUNT = 1 +WRITE_TASK_COUNT = 1 +TABLE_COUNT = 1000 +QUEUE_SIZE = 1000000 +MAX_BATCH_SIZE = 3000 + +_DONE_MESSAGE = '__DONE__' + + +def get_connection(): + """ + If variable TDENGINE_FIRST_EP is provided then it will be used. If not, firstEP in /etc/taos/taos.cfg will be used. + You can also override the default username and password by supply variable TDENGINE_USER and TDENGINE_PASSWORD + """ + import taos + firstEP = os.environ.get("TDENGINE_FIRST_EP") + if firstEP: + host, port = firstEP.split(":") + else: + host, port = None, 0 + user = os.environ.get("TDENGINE_USER", "root") + password = os.environ.get("TDENGINE_PASSWORD", "taosdata") + return taos.connect(host=host, port=int(port), user=user, password=password) + + +# ANCHOR: read + +def run_read_task(task_id: int, task_queues: List[Queue], infinity): + table_count_per_task = TABLE_COUNT // READ_TASK_COUNT + data_source = MockDataSource(f"tb{task_id}", table_count_per_task, infinity) + try: + for batch in data_source: + if isinstance(batch, tuple): + batch = [batch] + for table_id, rows in batch: + # hash data to different queue + i = table_id % len(task_queues) + # block putting forever when the queue is full + for row in rows: + task_queues[i].put(row) + if not infinity: + for queue in task_queues: + queue.put(_DONE_MESSAGE) + except KeyboardInterrupt: + pass + finally: + logging.info('read task over') + + +# ANCHOR_END: read + + +# ANCHOR: write +def run_write_task(task_id: int, queue: Queue, done_queue: Queue): + from sql_writer import SQLWriter + log = logging.getLogger(f"WriteTask-{task_id}") + writer = SQLWriter(get_connection) + lines = None + try: + while True: + over = False + lines = [] + for _ in range(MAX_BATCH_SIZE): + try: + line = queue.get_nowait() + if line == _DONE_MESSAGE: + over = True + break + if line: + lines.append(line) + except Empty: + time.sleep(0.1) + if len(lines) > 0: + writer.process_lines(lines) + if over: + done_queue.put(_DONE_MESSAGE) + break + except KeyboardInterrupt: + pass + except BaseException as e: + log.debug(f"lines={lines}") + raise e + finally: + writer.close() + log.debug('write task over') + + +# ANCHOR_END: write + +def set_global_config(): + argc = len(sys.argv) + if argc > 1: + global READ_TASK_COUNT + READ_TASK_COUNT = int(sys.argv[1]) + if argc > 2: + global WRITE_TASK_COUNT + WRITE_TASK_COUNT = int(sys.argv[2]) + if argc > 3: + global TABLE_COUNT + TABLE_COUNT = int(sys.argv[3]) + if argc > 4: + global QUEUE_SIZE + QUEUE_SIZE = int(sys.argv[4]) + if argc > 5: + global MAX_BATCH_SIZE + MAX_BATCH_SIZE = int(sys.argv[5]) + + +# ANCHOR: monitor +def run_monitor_process(done_queue: Queue): + log = logging.getLogger("DataBaseMonitor") + conn = None + try: + conn = get_connection() + + def get_count(): + res = conn.query("SELECT count(*) FROM test.meters") + rows = res.fetch_all() + return rows[0][0] if rows else 0 + + last_count = 0 + while True: + try: + done = done_queue.get_nowait() + if done == _DONE_MESSAGE: + break + except Empty: + pass + time.sleep(10) + count = get_count() + log.info(f"count={count} speed={(count - last_count) / 10}") + last_count = count + finally: + conn.close() + + +# ANCHOR_END: monitor +# ANCHOR: main +def main(infinity): + set_global_config() + logging.info(f"READ_TASK_COUNT={READ_TASK_COUNT}, WRITE_TASK_COUNT={WRITE_TASK_COUNT}, " + f"TABLE_COUNT={TABLE_COUNT}, QUEUE_SIZE={QUEUE_SIZE}, MAX_BATCH_SIZE={MAX_BATCH_SIZE}") + + conn = get_connection() + conn.execute("DROP DATABASE IF EXISTS test") + conn.execute("CREATE DATABASE IF NOT EXISTS test") + conn.execute("CREATE STABLE IF NOT EXISTS test.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) " + "TAGS (location BINARY(64), groupId INT)") + conn.close() + + done_queue = Queue() + monitor_process = Process(target=run_monitor_process, args=(done_queue,)) + monitor_process.start() + logging.debug(f"monitor task started with pid {monitor_process.pid}") + + task_queues: List[Queue] = [] + write_processes = [] + read_processes = [] + + # create task queues + for i in range(WRITE_TASK_COUNT): + queue = Queue() + task_queues.append(queue) + + # create write processes + for i in range(WRITE_TASK_COUNT): + p = Process(target=run_write_task, args=(i, task_queues[i], done_queue)) + p.start() + logging.debug(f"WriteTask-{i} started with pid {p.pid}") + write_processes.append(p) + + # create read processes + for i in range(READ_TASK_COUNT): + queues = assign_queues(i, task_queues) + p = Process(target=run_read_task, args=(i, queues, infinity)) + p.start() + logging.debug(f"ReadTask-{i} started with pid {p.pid}") + read_processes.append(p) + + try: + monitor_process.join() + for p in read_processes: + p.join() + for p in write_processes: + p.join() + time.sleep(1) + return + except KeyboardInterrupt: + monitor_process.terminate() + [p.terminate() for p in read_processes] + [p.terminate() for p in write_processes] + [q.close() for q in task_queues] + + +def assign_queues(read_task_id, task_queues): + """ + Compute target queues for a specific read task. + """ + ratio = WRITE_TASK_COUNT / READ_TASK_COUNT + from_index = math.floor(read_task_id * ratio) + end_index = math.ceil((read_task_id + 1) * ratio) + return task_queues[from_index:end_index] + + +if __name__ == '__main__': + multiprocessing.set_start_method('spawn') + main(False) +# ANCHOR_END: main diff --git a/docs/examples/python/kafka_example_common.py b/docs/examples/python/kafka_example_common.py new file mode 100644 index 0000000000..566748c94e --- /dev/null +++ b/docs/examples/python/kafka_example_common.py @@ -0,0 +1,65 @@ +#! encoding = utf-8 +import taos + +LOCATIONS = ['California.SanFrancisco', 'California.LosAngles', 'California.SanDiego', 'California.SanJose', + 'California.PaloAlto', 'California.Campbell', 'California.MountainView', 'California.Sunnyvale', + 'California.SantaClara', 'California.Cupertino'] + +CREATE_DATABASE_SQL = 'create database if not exists {} keep 365 duration 10 buffer 16 wal_level 1' +USE_DATABASE_SQL = 'use {}' +DROP_TABLE_SQL = 'drop table if exists meters' +DROP_DATABASE_SQL = 'drop database if exists {}' +CREATE_STABLE_SQL = 'create stable meters (ts timestamp, current float, voltage int, phase float) tags ' \ + '(location binary(64), groupId int)' +CREATE_TABLE_SQL = 'create table if not exists {} using meters tags (\'{}\', {})' + + +def create_database_and_tables(host, port, user, password, db, table_count): + tags_tables = _init_tags_table_names(table_count=table_count) + conn = taos.connect(host=host, port=port, user=user, password=password) + + conn.execute(DROP_DATABASE_SQL.format(db)) + conn.execute(CREATE_DATABASE_SQL.format(db)) + conn.execute(USE_DATABASE_SQL.format(db)) + conn.execute(DROP_TABLE_SQL) + conn.execute(CREATE_STABLE_SQL) + for tags in tags_tables: + location, group_id = _get_location_and_group(tags) + tables = tags_tables[tags] + for table_name in tables: + conn.execute(CREATE_TABLE_SQL.format(table_name, location, group_id)) + conn.close() + + +def clean(host, port, user, password, db): + conn = taos.connect(host=host, port=port, user=user, password=password) + conn.execute(DROP_DATABASE_SQL.format(db)) + conn.close() + + +def _init_tags_table_names(table_count): + tags_table_names = {} + group_id = 0 + for i in range(table_count): + table_name = 'd{}'.format(i) + location_idx = i % len(LOCATIONS) + location = LOCATIONS[location_idx] + if location_idx == 0: + group_id += 1 + if group_id > 10: + group_id -= 10 + key = _tag_table_mapping_key(location=location, group_id=group_id) + if key not in tags_table_names: + tags_table_names[key] = [] + tags_table_names[key].append(table_name) + + return tags_table_names + + +def _tag_table_mapping_key(location, group_id): + return '{}_{}'.format(location, group_id) + + +def _get_location_and_group(key): + fields = key.split('_') + return fields[0], fields[1] diff --git a/docs/examples/python/kafka_example_consumer.py b/docs/examples/python/kafka_example_consumer.py new file mode 100644 index 0000000000..e2d5cf535b --- /dev/null +++ b/docs/examples/python/kafka_example_consumer.py @@ -0,0 +1,231 @@ +#! encoding = utf-8 +import json +import logging +import time +from concurrent.futures import ThreadPoolExecutor, Future +from json import JSONDecodeError +from typing import Callable + +import taos +from kafka import KafkaConsumer +from kafka.consumer.fetcher import ConsumerRecord + +import kafka_example_common as common + + +class Consumer(object): + DEFAULT_CONFIGS = { + 'kafka_brokers': 'localhost:9092', # kafka broker + 'kafka_topic': 'tdengine_kafka_practices', + 'kafka_group_id': 'taos', + 'taos_host': 'localhost', # TDengine host + 'taos_port': 6030, # TDengine port + 'taos_user': 'root', # TDengine user name + 'taos_password': 'taosdata', # TDengine password + 'taos_database': 'power', # TDengine database + 'message_type': 'json', # message format, 'json' or 'line' + 'clean_after_testing': False, # if drop database after testing + 'max_poll': 1000, # poll size for batch mode + 'workers': 10, # thread count for multi-threading + 'testing': False + } + + INSERT_SQL_HEADER = "insert into " + INSERT_PART_SQL = '{} values (\'{}\', {}, {}, {})' + + def __init__(self, **configs): + self.config = self.DEFAULT_CONFIGS + self.config.update(configs) + + self.consumer = None + if not self.config.get('testing'): + self.consumer = KafkaConsumer( + self.config.get('kafka_topic'), + bootstrap_servers=self.config.get('kafka_brokers'), + group_id=self.config.get('kafka_group_id'), + ) + + self.conns = taos.connect( + host=self.config.get('taos_host'), + port=self.config.get('taos_port'), + user=self.config.get('taos_user'), + password=self.config.get('taos_password'), + db=self.config.get('taos_database'), + ) + if self.config.get('workers') > 1: + self.pool = ThreadPoolExecutor(max_workers=self.config.get('workers')) + self.tasks = [] + # tags and table mapping # key: {location}_{groupId} value: + + def consume(self): + """ + + consume data from kafka and deal. Base on `message_type`, `bath_consume`, `insert_by_table`, + there are several deal function. + :return: + """ + self.conns.execute(common.USE_DATABASE_SQL.format(self.config.get('taos_database'))) + try: + if self.config.get('message_type') == 'line': # line + self._run(self._line_to_taos) + if self.config.get('message_type') == 'json': # json + self._run(self._json_to_taos) + except KeyboardInterrupt: + logging.warning("## caught keyboard interrupt, stopping") + finally: + self.stop() + + def stop(self): + """ + + stop consuming + :return: + """ + # close consumer + if self.consumer is not None: + self.consumer.commit() + self.consumer.close() + + # multi thread + if self.config.get('workers') > 1: + if self.pool is not None: + self.pool.shutdown() + for task in self.tasks: + while not task.done(): + time.sleep(0.01) + + # clean data + if self.config.get('clean_after_testing'): + self.conns.execute(common.DROP_TABLE_SQL) + self.conns.execute(common.DROP_DATABASE_SQL.format(self.config.get('taos_database'))) + # close taos + if self.conns is not None: + self.conns.close() + + def _run(self, f): + """ + + run in batch consuming mode + :param f: + :return: + """ + i = 0 # just for test. + while True: + messages = self.consumer.poll(timeout_ms=100, max_records=self.config.get('max_poll')) + if messages: + if self.config.get('workers') > 1: + self.pool.submit(f, messages.values()) + else: + f(list(messages.values())) + if not messages: + i += 1 # just for test. + time.sleep(0.1) + if i > 3: # just for test. + logging.warning('## test over.') # just for test. + return # just for test. + + def _json_to_taos(self, messages): + """ + + convert a batch of json data to sql, and insert into TDengine + :param messages: + :return: + """ + sql = self._build_sql_from_json(messages=messages) + self.conns.execute(sql=sql) + + def _line_to_taos(self, messages): + """ + + convert a batch of lines data to sql, and insert into TDengine + :param messages: + :return: + """ + lines = [] + for partition_messages in messages: + for message in partition_messages: + lines.append(message.value.decode()) + sql = self.INSERT_SQL_HEADER + ' '.join(lines) + self.conns.execute(sql=sql) + + def _build_single_sql_from_json(self, msg_value): + try: + data = json.loads(msg_value) + except JSONDecodeError as e: + logging.error('## decode message [%s] error ', msg_value, e) + return '' + # location = data.get('location') + # group_id = data.get('groupId') + ts = data.get('ts') + current = data.get('current') + voltage = data.get('voltage') + phase = data.get('phase') + table_name = data.get('table_name') + + return self.INSERT_PART_SQL.format(table_name, ts, current, voltage, phase) + + def _build_sql_from_json(self, messages): + sql_list = [] + for partition_messages in messages: + for message in partition_messages: + sql_list.append(self._build_single_sql_from_json(message.value)) + return self.INSERT_SQL_HEADER + ' '.join(sql_list) + + +def test_json_to_taos(consumer: Consumer): + records = [ + [ + ConsumerRecord(checksum=None, headers=None, offset=1, key=None, + value=json.dumps({'table_name': 'd0', + 'ts': '2022-12-06 15:13:38.643', + 'current': 3.41, + 'voltage': 105, + 'phase': 0.02027, }), + partition=1, topic='test', serialized_key_size=None, serialized_header_size=None, + serialized_value_size=None, timestamp=time.time(), timestamp_type=None), + ConsumerRecord(checksum=None, headers=None, offset=1, key=None, + value=json.dumps({'table_name': 'd1', + 'ts': '2022-12-06 15:13:39.643', + 'current': 3.41, + 'voltage': 102, + 'phase': 0.02027, }), + partition=1, topic='test', serialized_key_size=None, serialized_header_size=None, + serialized_value_size=None, timestamp=time.time(), timestamp_type=None), + ] + ] + + consumer._json_to_taos(messages=records) + + +def test_line_to_taos(consumer: Consumer): + records = [ + [ + ConsumerRecord(checksum=None, headers=None, offset=1, key=None, + value="d0 values('2023-01-01 00:00:00.001', 3.49, 109, 0.02737)".encode('utf-8'), + partition=1, topic='test', serialized_key_size=None, serialized_header_size=None, + serialized_value_size=None, timestamp=time.time(), timestamp_type=None), + ConsumerRecord(checksum=None, headers=None, offset=1, key=None, + value="d1 values('2023-01-01 00:00:00.002', 6.19, 112, 0.09171)".encode('utf-8'), + partition=1, topic='test', serialized_key_size=None, serialized_header_size=None, + serialized_value_size=None, timestamp=time.time(), timestamp_type=None), + ] + ] + consumer._line_to_taos(messages=records) + + +def consume(kafka_brokers, kafka_topic, kafka_group_id, taos_host, taos_port, taos_user, + taos_password, taos_database, message_type, max_poll, workers): + c = Consumer(kafka_brokers=kafka_brokers, kafka_topic=kafka_topic, kafka_group_id=kafka_group_id, + taos_host=taos_host, taos_port=taos_port, taos_user=taos_user, taos_password=taos_password, + taos_database=taos_database, message_type=message_type, max_poll=max_poll, workers=workers) + c.consume() + + +if __name__ == '__main__': + consumer = Consumer(testing=True) + common.create_database_and_tables(host='localhost', port=6030, user='root', password='taosdata', db='py_kafka_test', + table_count=10) + consumer.conns.execute(common.USE_DATABASE_SQL.format('py_kafka_test')) + test_json_to_taos(consumer) + test_line_to_taos(consumer) + common.clean(host='localhost', port=6030, user='root', password='taosdata', db='py_kafka_test') diff --git a/docs/examples/python/kafka_example_perform.py b/docs/examples/python/kafka_example_perform.py new file mode 100644 index 0000000000..23ae4b48c8 --- /dev/null +++ b/docs/examples/python/kafka_example_perform.py @@ -0,0 +1,103 @@ +#! encoding=utf-8 + +import argparse +import logging +import multiprocessing +import time +from multiprocessing import pool + +import kafka_example_common as common +import kafka_example_consumer as consumer +import kafka_example_producer as producer + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('-kafka-broker', type=str, default='localhost:9092', + help='kafka borker host. default is `localhost:9200`') + parser.add_argument('-kafka-topic', type=str, default='tdengine-kafka-practices', + help='kafka topic. default is `tdengine-kafka-practices`') + parser.add_argument('-kafka-group', type=str, default='kafka_practices', + help='kafka consumer group. default is `kafka_practices`') + parser.add_argument('-taos-host', type=str, default='localhost', + help='TDengine host. default is `localhost`') + parser.add_argument('-taos-port', type=int, default=6030, help='TDengine port. default is 6030') + parser.add_argument('-taos-user', type=str, default='root', help='TDengine username, default is `root`') + parser.add_argument('-taos-password', type=str, default='taosdata', help='TDengine password, default is `taosdata`') + parser.add_argument('-taos-db', type=str, default='tdengine_kafka_practices', + help='TDengine db name, default is `tdengine_kafka_practices`') + parser.add_argument('-table-count', type=int, default=100, help='TDengine sub-table count, default is 100') + parser.add_argument('-table-items', type=int, default=1000, help='items in per sub-tables, default is 1000') + parser.add_argument('-message-type', type=str, default='line', + help='kafka message type. `line` or `json`. default is `line`') + parser.add_argument('-max-poll', type=int, default=1000, help='max poll for kafka consumer') + parser.add_argument('-threads', type=int, default=10, help='thread count for deal message') + parser.add_argument('-processes', type=int, default=1, help='process count') + + args = parser.parse_args() + total = args.table_count * args.table_items + + logging.warning("## start to prepare testing data...") + prepare_data_start = time.time() + producer.produce_total(100, args.kafka_broker, args.kafka_topic, args.message_type, total, args.table_count) + prepare_data_end = time.time() + logging.warning("## prepare testing data finished! spend-[%s]", prepare_data_end - prepare_data_start) + + logging.warning("## start to create database and tables ...") + create_db_start = time.time() + # create database and table + common.create_database_and_tables(host=args.taos_host, port=args.taos_port, user=args.taos_user, + password=args.taos_password, db=args.taos_db, table_count=args.table_count) + create_db_end = time.time() + logging.warning("## create database and tables finished! spend [%s]", create_db_end - create_db_start) + + processes = args.processes + + logging.warning("## start to consume data and insert into TDengine...") + consume_start = time.time() + if processes > 1: # multiprocess + multiprocessing.set_start_method("spawn") + pool = pool.Pool(processes) + + consume_start = time.time() + for _ in range(processes): + pool.apply_async(func=consumer.consume, args=( + args.kafka_broker, args.kafka_topic, args.kafka_group, args.taos_host, args.taos_port, args.taos_user, + args.taos_password, args.taos_db, args.message_type, args.max_poll, args.threads)) + pool.close() + pool.join() + else: + consume_start = time.time() + consumer.consume(kafka_brokers=args.kafka_broker, kafka_topic=args.kafka_topic, kafka_group_id=args.kafka_group, + taos_host=args.taos_host, taos_port=args.taos_port, taos_user=args.taos_user, + taos_password=args.taos_password, taos_database=args.taos_db, message_type=args.message_type, + max_poll=args.max_poll, workers=args.threads) + consume_end = time.time() + logging.warning("## consume data and insert into TDengine over! spend-[%s]", consume_end - consume_start) + + # print report + logging.warning( + "\n#######################\n" + " Prepare data \n" + "#######################\n" + "# data_type # %s \n" + "# total # %s \n" + "# spend # %s s\n" + "#######################\n" + " Create database \n" + "#######################\n" + "# stable # 1 \n" + "# sub-table # 100 \n" + "# spend # %s s \n" + "#######################\n" + " Consume \n" + "#######################\n" + "# data_type # %s \n" + "# threads # %s \n" + "# processes # %s \n" + "# total_count # %s \n" + "# spend # %s s\n" + "# per_second # %s \n" + "#######################\n", + args.message_type, total, prepare_data_end - prepare_data_start, create_db_end - create_db_start, + args.message_type, args.threads, processes, total, consume_end - consume_start, + total / (consume_end - consume_start)) diff --git a/docs/examples/python/kafka_example_producer.py b/docs/examples/python/kafka_example_producer.py new file mode 100644 index 0000000000..51468c7e37 --- /dev/null +++ b/docs/examples/python/kafka_example_producer.py @@ -0,0 +1,97 @@ +#! encoding = utf-8 +import json +import random +import threading +from concurrent.futures import ThreadPoolExecutor, Future +from datetime import datetime + +from kafka import KafkaProducer + +locations = ['California.SanFrancisco', 'California.LosAngles', 'California.SanDiego', 'California.SanJose', + 'California.PaloAlto', 'California.Campbell', 'California.MountainView', 'California.Sunnyvale', + 'California.SantaClara', 'California.Cupertino'] + +producers: list[KafkaProducer] = [] + +lock = threading.Lock() +start = 1640966400 + + +def produce_total(workers, broker, topic, message_type, total, table_count): + if len(producers) == 0: + lock.acquire() + if len(producers) == 0: + _init_kafka_producers(broker=broker, count=10) + lock.release() + pool = ThreadPoolExecutor(max_workers=workers) + futures = [] + for _ in range(0, workers): + futures.append(pool.submit(_produce_total, topic, message_type, int(total / workers), table_count)) + pool.shutdown() + for f in futures: + f.result() + _close_kafka_producers() + + +def _produce_total(topic, message_type, total, table_count): + producer = _get_kafka_producer() + for _ in range(total): + message = _get_fake_date(message_type=message_type, table_count=table_count) + producer.send(topic=topic, value=message.encode(encoding='utf-8')) + + +def _init_kafka_producers(broker, count): + for _ in range(count): + p = KafkaProducer(bootstrap_servers=broker, batch_size=64 * 1024, linger_ms=300, acks=0) + producers.append(p) + + +def _close_kafka_producers(): + for p in producers: + p.close() + + +def _get_kafka_producer(): + return producers[random.randint(0, len(producers) - 1)] + + +def _get_fake_date(table_count, message_type='json'): + if message_type == 'json': + return _get_json_message(table_count=table_count) + if message_type == 'line': + return _get_line_message(table_count=table_count) + return '' + + +def _get_json_message(table_count): + return json.dumps({ + 'ts': _get_timestamp(), + 'current': random.randint(0, 1000) / 100, + 'voltage': random.randint(105, 115), + 'phase': random.randint(0, 32000) / 100000, + 'location': random.choice(locations), + 'groupId': random.randint(1, 10), + 'table_name': _random_table_name(table_count) + }) + + +def _get_line_message(table_count): + return "{} values('{}', {}, {}, {})".format( + _random_table_name(table_count), # table + _get_timestamp(), # ts + random.randint(0, 1000) / 100, # current + random.randint(105, 115), # voltage + random.randint(0, 32000) / 100000, # phase + ) + + +def _random_table_name(table_count): + return 'd{}'.format(random.randint(0, table_count - 1)) + + +def _get_timestamp(): + global start + lock.acquire(blocking=True) + start += 0.001 + lock.release() + return datetime.fromtimestamp(start).strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] diff --git a/docs/examples/python/mockdatasource.py b/docs/examples/python/mockdatasource.py new file mode 100644 index 0000000000..9c702936ea --- /dev/null +++ b/docs/examples/python/mockdatasource.py @@ -0,0 +1,61 @@ +import time + + +class MockDataSource: + samples = [ + "8.8,119,0.32,California.LosAngeles,0", + "10.7,116,0.34,California.SanDiego,1", + "9.9,111,0.33,California.SanJose,2", + "8.9,113,0.329,California.Campbell,3", + "9.4,118,0.141,California.SanFrancisco,4" + ] + + def __init__(self, tb_name_prefix, table_count, infinity=True): + self.table_name_prefix = tb_name_prefix + "_" + self.table_count = table_count + self.max_rows = 10000000 + self.current_ts = round(time.time() * 1000) - self.max_rows * 100 + # [(tableId, tableName, values),] + self.data = self._init_data() + self.infinity = infinity + + def _init_data(self): + lines = self.samples * (self.table_count // 5 + 1) + data = [] + for i in range(self.table_count): + table_name = self.table_name_prefix + str(i) + data.append((i, table_name, lines[i])) # tableId, row + return data + + def __iter__(self): + self.row = 0 + if not self.infinity: + return iter(self._iter_data()) + else: + return self + + def __next__(self): + """ + next 1000 rows for each table. + return: {tableId:[row,...]} + """ + return self._iter_data() + + def _iter_data(self): + ts = [] + for _ in range(1000): + self.current_ts += 100 + ts.append(str(self.current_ts)) + # add timestamp to each row + # [(tableId, ["tableName,ts,current,voltage,phase,location,groupId"])] + result = [] + for table_id, table_name, values in self.data: + rows = [table_name + ',' + t + ',' + values for t in ts] + result.append((table_id, rows)) + return result + + +if __name__ == '__main__': + datasource = MockDataSource('t', 10, False) + for data in datasource: + print(data) diff --git a/docs/examples/python/native_insert_example.py b/docs/examples/python/native_insert_example.py index 94fd00a6e9..cdde7d23d2 100644 --- a/docs/examples/python/native_insert_example.py +++ b/docs/examples/python/native_insert_example.py @@ -25,10 +25,10 @@ def create_stable(conn: taos.TaosConnection): # The generated SQL is: -# INSERT INTO d1001 USING meters TAGS(California.SanFrancisco, 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000) -# d1002 USING meters TAGS(California.SanFrancisco, 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000) -# d1003 USING meters TAGS(California.LosAngeles, 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000) -# d1004 USING meters TAGS(California.LosAngeles, 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000) +# INSERT INTO d1001 USING meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000) +# d1002 USING meters TAGS('California.SanFrancisco', 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000) +# d1003 USING meters TAGS('California.LosAngeles', 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000) +# d1004 USING meters TAGS('California.LosAngeles', 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000) def get_sql(): global lines diff --git a/docs/examples/python/sql_writer.py b/docs/examples/python/sql_writer.py new file mode 100644 index 0000000000..3456981a7b --- /dev/null +++ b/docs/examples/python/sql_writer.py @@ -0,0 +1,111 @@ +import logging +import taos + + +class SQLWriter: + log = logging.getLogger("SQLWriter") + + def __init__(self, get_connection_func): + self._tb_values = {} + self._tb_tags = {} + self._conn = get_connection_func() + self._max_sql_length = self.get_max_sql_length() + self._conn.execute("create database if not exists test") + self._conn.execute("USE test") + + def get_max_sql_length(self): + rows = self._conn.query("SHOW variables").fetch_all() + for r in rows: + name = r[0] + if name == "maxSQLLength": + return int(r[1]) + return 1024 * 1024 + + def process_lines(self, lines: [str]): + """ + :param lines: [[tbName,ts,current,voltage,phase,location,groupId]] + """ + for line in lines: + ps = line.split(",") + table_name = ps[0] + value = '(' + ",".join(ps[1:-2]) + ') ' + if table_name in self._tb_values: + self._tb_values[table_name] += value + else: + self._tb_values[table_name] = value + + if table_name not in self._tb_tags: + location = ps[-2] + group_id = ps[-1] + tag_value = f"('{location}',{group_id})" + self._tb_tags[table_name] = tag_value + self.flush() + + def flush(self): + """ + Assemble INSERT statement and execute it. + When the sql length grows close to MAX_SQL_LENGTH, the sql will be executed immediately, and a new INSERT statement will be created. + In case of "Table does not exit" exception, tables in the sql will be created and the sql will be re-executed. + """ + sql = "INSERT INTO " + sql_len = len(sql) + buf = [] + for tb_name, values in self._tb_values.items(): + q = tb_name + " VALUES " + values + if sql_len + len(q) >= self._max_sql_length: + sql += " ".join(buf) + self.execute_sql(sql) + sql = "INSERT INTO " + sql_len = len(sql) + buf = [] + buf.append(q) + sql_len += len(q) + sql += " ".join(buf) + self.create_tables() + self.execute_sql(sql) + self._tb_values.clear() + + def execute_sql(self, sql): + try: + self._conn.execute(sql) + except taos.Error as e: + error_code = e.errno & 0xffff + # Table does not exit + if error_code == 9731: + self.create_tables() + else: + self.log.error("Execute SQL: %s", sql) + raise e + except BaseException as baseException: + self.log.error("Execute SQL: %s", sql) + raise baseException + + def create_tables(self): + sql = "CREATE TABLE " + for tb in self._tb_values.keys(): + tag_values = self._tb_tags[tb] + sql += "IF NOT EXISTS " + tb + " USING meters TAGS " + tag_values + " " + try: + self._conn.execute(sql) + except BaseException as e: + self.log.error("Execute SQL: %s", sql) + raise e + + def close(self): + if self._conn: + self._conn.close() + + +if __name__ == '__main__': + def get_connection_func(): + conn = taos.connect() + return conn + + + writer = SQLWriter(get_connection_func=get_connection_func) + writer.execute_sql( + "create stable if not exists meters (ts timestamp, current float, voltage int, phase float) " + "tags (location binary(64), groupId int)") + writer.execute_sql( + "INSERT INTO d21001 USING meters TAGS ('California.SanFrancisco', 2) " + "VALUES ('2021-07-13 14:06:32.272', 10.2, 219, 0.32)") diff --git a/docs/examples/python/tmq_example.py b/docs/examples/python/tmq_example.py index a4625ca11a..6f7fb87c89 100644 --- a/docs/examples/python/tmq_example.py +++ b/docs/examples/python/tmq_example.py @@ -1,58 +1,55 @@ +from taos.tmq import Consumer import taos -from taos.tmq import * -conn = taos.connect() -print("init") -conn.execute("drop topic if exists topic_ctb_column") -conn.execute("drop database if exists py_tmq") -conn.execute("create database if not exists py_tmq vgroups 2") -conn.select_db("py_tmq") -conn.execute( - "create stable if not exists stb1 (ts timestamp, c1 int, c2 float, c3 binary(10)) tags(t1 int)" -) -conn.execute("create table if not exists tb1 using stb1 tags(1)") -conn.execute("create table if not exists tb2 using stb1 tags(2)") -conn.execute("create table if not exists tb3 using stb1 tags(3)") - -print("create topic") -conn.execute( - "create topic if not exists topic_ctb_column as select ts, c1, c2, c3 from stb1" -) - -print("build consumer") -conf = TaosTmqConf() -conf.set("group.id", "tg2") -conf.set("td.connect.user", "root") -conf.set("td.connect.pass", "taosdata") -conf.set("enable.auto.commit", "true") - - -def tmq_commit_cb_print(tmq, resp, offset, param=None): - print(f"commit: {resp}, tmq: {tmq}, offset: {offset}, param: {param}") - - -conf.set_auto_commit_cb(tmq_commit_cb_print, None) -tmq = conf.new_consumer() - -print("build topic list") - -topic_list = TaosTmqList() -topic_list.append("topic_ctb_column") - -print("basic consume loop") -tmq.subscribe(topic_list) - -sub_list = tmq.subscription() - -print("subscribed topics: ", sub_list) - -while 1: - res = tmq.poll(1000) - if res: - topic = res.get_topic_name() - vg = res.get_vgroup_id() - db = res.get_db_name() - print(f"topic: {topic}\nvgroup id: {vg}\ndb: {db}") - for row in res: - print(row) +def init_tmq_env(db, topic): + conn = taos.connect() + conn.execute("drop topic if exists {}".format(topic)) + conn.execute("drop database if exists {}".format(db)) + conn.execute("create database if not exists {}".format(db)) + conn.select_db(db) + conn.execute( + "create stable if not exists stb1 (ts timestamp, c1 int, c2 float, c3 varchar(16)) tags(t1 int, t3 varchar(16))") + conn.execute("create table if not exists tb1 using stb1 tags(1, 't1')") + conn.execute("create table if not exists tb2 using stb1 tags(2, 't2')") + conn.execute("create table if not exists tb3 using stb1 tags(3, 't3')") + conn.execute("create topic if not exists {} as select ts, c1, c2, c3 from stb1".format(topic)) + conn.execute("insert into tb1 values (now, 1, 1.0, 'tmq test')") + conn.execute("insert into tb2 values (now, 2, 2.0, 'tmq test')") + conn.execute("insert into tb3 values (now, 3, 3.0, 'tmq test')") + + +def cleanup(db, topic): + conn = taos.connect() + conn.execute("drop topic if exists {}".format(topic)) + conn.execute("drop database if exists {}".format(db)) + + +if __name__ == '__main__': + init_tmq_env("tmq_test", "tmq_test_topic") # init env + consumer = Consumer( + { + "group.id": "tg2", + "td.connect.user": "root", + "td.connect.pass": "taosdata", + "enable.auto.commit": "true", + } + ) + consumer.subscribe(["tmq_test_topic"]) + + try: + while True: + res = consumer.poll(1) + if not res: + break + err = res.error() + if err is not None: + raise err + val = res.value() + + for block in val: + print(block.fetchall()) + finally: + consumer.unsubscribe() + consumer.close() + cleanup("tmq_test", "tmq_test_topic") diff --git a/docs/examples/python/tmq_websocket_example.py b/docs/examples/python/tmq_websocket_example.py new file mode 100644 index 0000000000..e1dcb0086a --- /dev/null +++ b/docs/examples/python/tmq_websocket_example.py @@ -0,0 +1,31 @@ +#!/usr/bin/python3 +from taosws import Consumer + +conf = { + "td.connect.websocket.scheme": "ws", + "group.id": "0", +} +consumer = Consumer(conf) + +consumer.subscribe(["test"]) + +while True: + message = consumer.poll(timeout=1.0) + if message: + id = message.vgroup() + topic = message.topic() + database = message.database() + + for block in message: + nrows = block.nrows() + ncols = block.ncols() + for row in block: + print(row) + values = block.fetchall() + print(nrows, ncols) + + # consumer.commit(message) + else: + break + +consumer.close() diff --git a/docs/zh/01-index.md b/docs/zh/01-index.md index d2e6706892..a406fe663c 100644 --- a/docs/zh/01-index.md +++ b/docs/zh/01-index.md @@ -1,25 +1,35 @@ --- -title: TDengine 文档 -sidebar_label: 文档首页 +title: TDengine Cloud 文档 +sidebar_label: 主页 slug: / --- -TDengine 是一款[高性能](https://www.taosdata.com/fast)、[分布式](https://www.taosdata.com/scalable)、[支持 SQL](https://www.taosdata.com/sql-support) 的时序数据库 (Database)。本文档是 TDengine 用户手册,主要是介绍 TDengine 的基本概念、安装、使用、功能、开发接口、运营维护、TDengine 内核设计等等,它主要是面向架构师、开发者与系统管理员的。 +TDengine Cloud 是全托管的时序数据处理云服务平台。它是基于开源的时序数据库 TDengine 而开发的。除高性能的时序数据库之外,它还具有缓存、订阅和流计算等系统功能,而且提供了便利而又安全的数据分享、以及众多的企业级服务功能。它可以让物联网、工业互联网、金融、IT 运维监控等领域企业在时序数据的管理上大幅降低人力成本和运营成本。 -TDengine 充分利用了时序数据的特点,提出了“一个数据采集点一张表”与“超级表”的概念,设计了创新的存储引擎,让数据的写入、查询和存储效率都得到极大的提升。为正确理解并使用TDengine, 无论如何,请您仔细阅读[基本概念](./concept)一章。 +同时客户可以放心使用无处不在的第三方工具,比如 Prometheus,Telegraf,Grafana 和 MQTT 消息服务器等。天然地,TDengine Cloud 还支持 Python,Java,Go,Rust 和 Node.js等连接器。开发者可以选择自己习惯的语言来开发。通过支持 SQL,还有无模式的方式,TDengine Cloud 能够满足所有开发者的需求。TDengine Cloud 还提供了额外的特殊功能来进行时序数据的风险,使数据的分析和可视化变得极其简单。 -如果你是开发者,请一定仔细阅读[开发指南](./develop)一章,该部分对数据库连接、建模、插入数据、查询、连续查询、缓存、数据订阅、用户自定义函数等功能都做了详细介绍,并配有各种编程语言的示例代码。大部分情况下,你只要把示例代码拷贝粘贴,针对自己的应用稍作改动,就能跑起来。 +下面是 TDengine Cloud 的文档结构: -我们已经生活在大数据的时代,纵向扩展已经无法满足日益增长的业务需求,任何系统都必须具有水平扩展的能力,集群成为大数据以及 database 系统的不可缺失功能。TDengine 团队不仅实现了集群功能,而且将这一重要核心功能开源。怎么部署、管理和维护 TDengine 集群,请参考[集群管理](./cluster)一章。 +1. [产品简介](./intro) 概述TDengine Cloud 的特点,能力和竞争优势。 -TDengine 采用 SQL 作为其查询语言,大大降低学习成本、降低迁移成本,但同时针对时序数据场景,又做了一些扩展,以支持插值、降采样、时间加权平均等操作。[SQL 手册](./taos-sql)一章详细描述了 SQL 语法、详细列出了各种支持的命令和函数。 +2. [基本概念](./concept) 主要介绍 TDengine 如何有效利用时间序列数据的特点来提高计算性能,同时提高存储效率。 -如果你是系统管理员,关心安装、升级、容错灾备、关心数据导入、导出,配置参数,怎么监测 TDengine 是否健康运行,怎么提升系统运行的性能,那么请仔细参考[运维指南](./operation)一章。 +3. [数据写入](./data-in) 主要介绍 TDengine Cloud 提供了多种数据写入 TDengine 实例的方式。在数据源部分,您可以方便地从边缘云或者主机上面的 TDengine 把数据写入云上的任何实例。 -如果你对 TDengine 外围工具,REST API, 各种编程语言的连接器想做更多详细了解,请看[参考指南](./reference)一章。 +4. [数据输出](./data-out) 主要介绍 TDengine Cloud 提供极简的访问您的时序数据的方式,通过这些方式,您可以方便的利用 TDengine 实例的数据来开发您的数据分析和可视化应用。 -如果你对 TDengine 内部的架构设计很有兴趣,欢迎仔细阅读[技术内幕](./tdinternal)一章,里面对集群的设计、数据分区、分片、写入、读出、查询、聚合查询的流程都做了详细的介绍。如果你想研读 TDengine 代码甚至贡献代码,请一定仔细读完这一章。 +5. [可视化](./visual) 主要介绍您如何使用 TDengine Cloud 上面存储的时序数据进行可视化开发,比如您可以监控和可视化您的 TDengine Cloud 上面的实例和数据库状态。 -最后,作为一个开源软件,欢迎大家的参与。如果发现文档的任何错误,描述不清晰的地方,都请在每个页面的最下方,点击“编辑本文档“直接进行修改。 +6. [数据订阅](./data-subscription) 这个部分是 TDengine Cloud 的高级功能,类似于异步发布/订阅能力,即发布到一个主题的消息会被该主题的所有订阅者立即收到通知。 TDengine Cloud 的数据订阅让您无需部署任何的消息发布/订阅系统,比如 Kafka,就可以创建自己的事件驱动应用。而且我们提供了便捷而安全的方式,让您通过创建主题和分享主题给他人都变得极其容易。 -Together, we make a difference! +7. [流式计算](./stream) 这个部分也是 TDengine Cloud 的另外一个高级功能。通过这个功能,您无需无需部署任何流式处理系统,比如 Spark/Flink,就能创建连续查询或时间驱动的流计算。 TDengine Cloud 的流式计算可以很方便的让您实时处理进入的流式数据并把它们很轻松地按照您定义的规则导入到目的表里面。 + +8. [数据复制](./replication) 是 TDengine Cloud 提高的成熟的数据复制功能。您可以从云端同一个区域的一个实例复制到另外一个实例,也可以从一个云服务商的区域复制到另外一个云服务商的区域。 + +9. [开发指南](./programming) 是使用 TDengine Cloud 上的时序数据开发 IoT 和大数据应用必须阅读的部分。在这一部分中,我们详细介绍了数据库连接,数据建模,数据抽取,数据查询,流式计算,缓存,数据订阅,用户自定义函数和其他功能。我们还提供了各种编程语言的示例代码。在大多数情况下,您只需简单地复制和粘贴这些示例代码,在您的应用程序中再做一些细微修改就能工作。 + +10. [TDengine SQL](./taos-sql) 提供了标准 SQL 以及TDengine 扩展部分的详细介绍,通过这些 SQL 语句能方便地进行时序数据分析。 + +11. [工具](./tools)主要介绍 Taos CLI 这个通过终端来执行的命令行工具。 通过运行这个工具,可以轻松和便捷地访问您在 TDengine Cloud 的 TDengine 实例的数据库数据并进行各种查询。另外还介绍了 taosBenchmark 这个工具。通过这个工具可以帮助您用简单的配置就能比较容易地产生大量的数据,并测试 TDengine Cloud 的性能。 + +我们非常高兴您选择 TDengine Cloud 作为您的时序数据平台的一部分,并期待着听到您的反馈以及改进意见,并成为您成功的一个小部分。 diff --git a/docs/zh/02-intro.md b/docs/zh/02-intro.md new file mode 100644 index 0000000000..17f38f861e --- /dev/null +++ b/docs/zh/02-intro.md @@ -0,0 +1,101 @@ +--- +sidebar_label: 产品简介 +title: TDengine Cloud 的产品简介 +--- + +TDengine Cloud 是全托管的时序数据处理云服务平台。它是基于开源的时序数据库 TDengine 而开发的。除高性能的时序数据库之外,它还具有缓存、订阅和流计算等系统功能,而且提供了便利而又安全的数据分享、以及众多的企业级服务功能。它可以让物联网、工业互联网、金融、IT 运维监控等领域企业在时序数据的管理上大幅降低人力成本和运营成本。 + +本章节主要介绍 TDengine Cloud 的主要功能,竞争优势和典型使用案例,让大家对 TDengine Cloud 有个整体的了解。 + +## 主要功能 + +TDengine Cloud 的主要功能如下: + +1. 数据写入 + - 支持[使用 SQL 插入数据](../programming/insert/)。 + - 支持 [Telegraf](../data-in/telegraf/)。 + - 支持 [Prometheus](../data-in/prometheus/)。 +2. 数据输出 + - 支持标准 [SQL](../programming/query/),包括子查询。 + - 支持通过工具 [taosDump](../data-out/taosdump/) 导出数据。 + - 支持输出数据到 [Prometheus](../data-out/prometheus/)。 + - 支持通过[数据订阅](../data-subscription/)的方式导出数据. +3. 数据浏览器: 可以浏览数据库和各种表,如果您已经登录,还可以直接执行 SQL 查询语句。 +4. 可视化 + - 支持 [Grafana](../visual/grafana/)。 + - 支持 Google Data Studio。 + - 支持 Grafana Cloud (稍后发布) +5. [数据订阅](../data-subscription/): 用户的应用可以订阅一个数据库,一张表或者一组表。使用的 API 跟 Kafka 基本一致,但是您必须设置具体的过滤条件来定义一个主题,然后您可以和 TDengine Cloud 的其他用户或者用户组分享这个主题。 +6. [流计算](../stream/):不仅支持连续查询,TDengine还支持基于事件驱动的流计算,无需安装 Flink/Spark 就可以处理时序数据。 +7. 企业版 + - 支持每天备份数据。 + - 支持复制一个数据库到另外一个区域或者另外一个云。 + - 支持对等 VPC。 + - 支持 IP 白名单。 +9. 工具 + - 提供一个交互式 [命令行工具 (CLI)](../tools/cli/) 管理和实时查询。 + - 提供一个性能检测工具 [taosBenchmark](../tools/taosbenchmark/) 来测试 TDengine 的性能。 +10. 编程 + - 提供各种[连接器](../programming/connector/),比如 Java,Python,Go,Rust,Node.js 等编程语言。 + - 提供了[REST API](../programming/connector/rest-api/)。 + +更多细节功能,请阅读整个文档。 + +## 竞争优势 + +由于 TDengine Cloud 充分利用了[时序数据特点](https://www.taosdata.com/blog/2019/07/09/105.html),比如结构化、无需事务、很少删除或更新、写多读少等等,还有它云原生的设计使 TDengine Cloud 区别于其他时序数据云服务,具有以下特点: + +- **[极简时序数据平台](https://www.taosdata.com/tdengine/simplified_solution_for_time-series_data_processing)**:全托管的云服务,用户无需担心繁琐的部署、优化、扩容、备份、异地容灾等事务,可全心关注核心业务,减少对DBA的要求,大幅节省人力成本。 + + 除高性能、具有水平扩展能力的时序数据库外, TDengine 云服务还提供: + + **缓存**:无需部署 Redis,应用就能快速的获得最新数据。 + + **数据订阅**:无需部署 Kafka, 当系统接收到新的数据时,应用将立即收到通知。 + + **流式计算**:无需部署 Spark/Flink, 应用就能创建连续查询或时间驱动的流计算。 + +- **[便捷而且安全的数据共享](https://www.taosdata.com/tdengine/cloud/data-sharing)**:TDengine Cloud 既支持将一个库完全开放,设置读或写的权限;也支持通过数据订阅的方式,将库、超级表、一组或一张表、或聚合处理后的数据分享出去。 + + **便捷**:如同在线文档一样简单,只需输入对方邮件地址,设置访问权限和访问时长即可实现分享。对方收到邮件,接受邀请后,可即刻访问。 + + **安全**:访问权限可以控制到一个运行实例、库或订阅的 topic;对于每个授权的用户,对分享的资源,会生成一个访问用的 token;访问可以设置到期时间。 + + 便捷而又安全的时序数据共享,让企业各部门或合作伙伴之间快速洞察业务的运营。 + +- **[安全可靠的企业级服务](https://tdengine.com/tdengine/high-performance-time-series-database/)**:除强大的时序数据管理、共享功能之外,TDengine Cloud 还提供企业运营必需的 + + **可靠**:提供数据定时备份、恢复,数据从运行实例到私有云、其他公有云或 Region 的实时复制。 + + **安全**:提供基于角色的访问权限控制、IP 白名单、用户行为审计等功能。 + + **专业**:提供7*24的专业技术服务,承诺 99.9% 的 Service Level Agreement。 + + 安全、专业、高效可靠的企业级服务,用户无需再为数据管理发愁,可以聚焦自身的核心业务。 + +- **[分析能力](https://www.taosdata.com/tdengine/easy_data_analytics)**:通过超级表、存储计算分离、分区分片、预计算和其它技术,TDengine 能够高效地浏览、格式化和访问数据。 + +- **[核心开源](https://www.taosdata.com/tdengine/open_source_time-series_database)**:TDengine 的核心代码包括集群功能全部在开源协议下公开。全球超过 140k 个运行实例,GitHub Star 20k,且拥有一个活跃的开发者社区。 + +采用 TDengine Cloud,可将典型的物联网、车联网、工业互联网大数据平台的总拥有成本大幅降低。表现在几个方面: + +1. 由于其超强性能,它能将系统所需的计算资源和存储资源大幅降低 +2. 因为支持 SQL,能与众多第三方软件无缝集成,学习迁移成本大幅下降 +3. 因为是一款极简的时序数据平台,系统复杂度、研发和运营成本大幅降低 + +## 技术生态 + +在整个时序大数据平台中,TDengine 扮演的角色如下: + +
+ +![TDengine Database 技术生态图](eco_system.webp) + +
图 1. TDengine 技术生态图
+
+ +上图中,左侧是各种数据采集或消息队列,包括 OPC-UA、MQTT、Telegraf、也包括 Kafka,他们的数据将被源源不断的写入到 TDengine。右侧则是可视化、BI 工具、组态软件、应用程序。下侧则是 TDengine 自身提供的命令行程序(CLI)以及可视化管理工具。 + +## 典型适用场景 + +作为一个高性能、分布式、支持 SQL 的时序数据库(Database),TDengine 的典型适用场景包括但不限于 IoT、工业互联网、车联网、IT 运维、能源、金融证券等领域。需要指出的是,TDengine 是针对时序数据场景设计的专用数据库和专用大数据处理工具,因其充分利用了时序大数据的特点,它无法用来处理网络爬虫、微博、微信、电商、ERP、CRM 等通用型数据。下面本文将对适用场景做更多详细的分析。 diff --git a/docs/zh/04-concept/_category_.yml b/docs/zh/04-concept/_category_.yml new file mode 100644 index 0000000000..aad75dce21 --- /dev/null +++ b/docs/zh/04-concept/_category_.yml @@ -0,0 +1 @@ +label: 基本概念 \ No newline at end of file diff --git a/docs/zh/04-concept/index.md b/docs/zh/04-concept/index.md new file mode 100644 index 0000000000..2cba68edcd --- /dev/null +++ b/docs/zh/04-concept/index.md @@ -0,0 +1,183 @@ +--- +sidebar_label: 基本概念 +title: 数据模型和基本概念 +description: TDengine 的数据模型和基本概念 +--- + +为了便于解释基本概念,便于撰写示例程序,整个 TDengine 文档以智能电表作为典型时序数据场景。假设每个智能电表采集电流、电压、相位三个量,有多个智能电表,每个电表有位置 Location 和分组 Group ID 的静态属性. 其采集的数据类似如下的表格: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Device IDTimestampCollected MetricsTags
currentvoltagephaselocationgroupid
d1001153854868500010.32190.31California.SanFrancisco2
d1002153854868400010.22200.23California.SanFrancisco3
d1003153854868650011.52210.35California.LosAngeles3
d1004153854868550013.42230.29California.LosAngeles2
d1001153854869500012.62180.33California.SanFrancisco2
d1004153854869660011.82210.28California.LosAngeles2
d1002153854869665010.32180.25California.SanFrancisco3
d1001153854869680012.32210.31California.SanFrancisco2
+表 1. 智能电表数据示例 +
+ +每一条记录都有设备 ID、时间戳、采集的物理量(如上表中的 `current`、`voltage` 和 `phase`)以及每个设备相关的静态标签(`location` 和 `groupid`)。每个设备是受外界的触发,或按照设定的周期采集数据。采集的数据点是时序的,是一个数据流。 + +## 采集量(Metric) + +采集量是指传感器、设备或其他类型采集点采集的物理量,比如电流、电压、温度、压力、GPS 位置等,是随时间变化的,数据类型可以是整型、浮点型、布尔型,也可是字符串。随着时间的推移,存储的采集量的数据量越来越大。智能电表示例中的电流、电压、相位就是采集量。 + +## 标签(Label/Tag) + +标签是指传感器、设备或其他类型采集点的静态属性,不是随时间变化的,比如设备型号、颜色、设备的所在地等,数据类型可以是任何类型。虽然是静态的,但 TDengine 容许用户修改、删除或增加标签值。与采集量不一样的是,随时间的推移,存储的标签的数据量不会有什么变化。智能电表示例中的 `location` 与 `groupid` 就是标签。 + +## 数据采集点(Data Collection Point) + +数据采集点是指按照预设时间周期或受事件触发采集物理量的硬件或软件。一个数据采集点可以采集一个或多个采集量,**但这些采集量都是同一时刻采集的,具有相同的时间戳**。对于复杂的设备,往往有多个数据采集点,每个数据采集点采集的周期都可能不一样,而且完全独立,不同步。比如对于一台汽车,有数据采集点专门采集 GPS 位置,有数据采集点专门采集发动机状态,有数据采集点专门采集车内的环境,这样一台汽车就有三个数据采集点。智能电表示例中的 d1001、d1002、d1003、d1004 等就是数据采集点。 + +## 表(Table) + +因为采集量一般是结构化数据,同时为降低学习门槛,TDengine 采用传统的关系型数据库模型管理数据。用户需要先创建库,然后创建表,之后才能插入或查询数据。 + +为充分利用其数据的时序性和其他数据特点,TDengine 采取**一个数据采集点一张表**的策略,要求对每个数据采集点单独建表(比如有一千万个智能电表,就需创建一千万张表,上述表格中的 d1001,d1002,d1003,d1004 都需单独建表),用来存储这个数据采集点所采集的时序数据。这种设计有几大优点: + +1. 由于不同数据采集点产生数据的过程完全独立,每个数据采集点的数据源是唯一的,一张表也就只有一个写入者,这样就可采用无锁方式来写,写入速度就能大幅提升。 +2. 对于一个数据采集点而言,其产生的数据是按照时间排序的,因此写的操作可用追加的方式实现,进一步大幅提高数据写入速度。 +3. 一个数据采集点的数据是以块为单位连续存储的。如果读取一个时间段的数据,它能大幅减少随机读取操作,成数量级的提升读取和查询速度。 +4. 一个数据块内部,采用列式存储,对于不同数据类型,采用不同压缩算法,而且由于一个数据采集点的采集量的变化是缓慢的,压缩率更高。 + +如果采用传统的方式,将多个数据采集点的数据写入一张表,由于网络延时不可控,不同数据采集点的数据到达服务器的时序是无法保证的,写入操作是要有锁保护的,而且一个数据采集点的数据是难以保证连续存储在一起的。**采用一个数据采集点一张表的方式,能最大程度的保证单个数据采集点的插入和查询的性能是最优的。** + +TDengine 建议用数据采集点的名字(如上表中的 d1001)来做表名。每个数据采集点可能同时采集多个采集量(如上表中的 `current`、`voltage` 和 `phase`),每个采集量对应一张表中的一列,数据类型可以是整型、浮点型、字符串等。除此之外,表的第一列必须是时间戳,即数据类型为 Timestamp。对采集量,TDengine 将自动按照时间戳建立索引,但对采集量本身不建任何索引。数据用列式存储方式保存。 + +对于复杂的设备,比如汽车,它有多个数据采集点,那么就需要为一辆汽车建立多张表。 + +## 超级表(STable) + +由于一个数据采集点一张表,导致表的数量巨增,难以管理,而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。 + +超级表是指某一特定类型的数据采集点的集合。同一类型的数据采集点,其表的结构是完全一样的,但每个表(数据采集点)的静态属性(标签)是不一样的。描述一个超级表(某一特定类型的数据采集点的集合),除需要定义采集量的表结构之外,还需要定义其标签的 Schema,标签的数据类型可以是整数、浮点数、字符串、JSON,标签可以有多个,可以事后增加、删除或修改。如果整个系统有 N 个不同类型的数据采集点,就需要建立 N 个超级表。 + +在 TDengine 的设计里,**表用来代表一个具体的数据采集点,超级表用来代表一组相同类型的数据采集点集合**。智能电表示例中,我们可以创建一个超级表 `meters`. + +## 子表(Subtable) + +当为某个具体数据采集点创建表时,用户可以使用超级表的定义做模板,同时指定该具体采集点(表)的具体标签值来创建该表。**通过超级表创建的表称之为子表**。正常的表与子表的差异在于: + +1. 子表就是表,因此所有正常表的 SQL 操作都可以在子表上执行。 +2. 子表在正常表的基础上有扩展,它是带有静态标签的,而且这些标签可以事后增加、删除、修改,而正常的表没有。 +3. 子表一定属于一张超级表,但普通表不属于任何超级表 +4. 普通表无法转为子表,子表也无法转为普通表。 + +超级表与与基于超级表建立的子表之间的关系表现在: + +1. 一张超级表包含有多张子表,这些子表具有相同的采集量 Schema,但带有不同的标签值。 +2. 不能通过子表调整数据或标签的模式,对于超级表的数据模式修改立即对所有的子表生效。 +3. 超级表只定义一个模板,自身不存储任何数据或标签信息。因此,不能向一个超级表写入数据,只能将数据写入子表中。 + +查询既可以在表上进行,也可以在超级表上进行。针对超级表的查询,TDengine 将把所有子表中的数据视为一个整体数据集进行处理,会先把满足标签过滤条件的表从超级表中找出来,然后再扫描这些表的时序数据,进行聚合操作,这样需要扫描的数据集会大幅减少,从而显著提高查询的性能。本质上,TDengine 通过对超级表查询的支持,实现了多个同类数据采集点的高效聚合。 + +TDengine 系统建议给一个数据采集点建表,需要通过超级表建表,而不是建普通表。在智能电表的示例中,我们可以通过超级表 meters 创建子表 d1001、d1002、d1003、d1004 等。 + +为了更好地理解采集量、标签、超级与子表的关系,可以参考下面关于智能电表数据模型的示意图。 + +
+ +![智能电表数据模型示意图](./supertable.webp) + +
图 1. 智能电表数据模型示意图
+
+ +## 库(Database) + +库是指一组表的集合。TDengine 容许一个运行实例有多个库,而且每个库可以配置不同的存储策略。不同类型的数据采集点往往具有不同的数据特征,包括数据采集频率的高低,数据保留时间的长短,副本的数目,数据块的大小,是否允许更新数据等等。为了在各种场景下 TDengine 都能最大效率的工作,TDengine 建议将不同数据特征的超级表创建在不同的库里。 + +一个库里,可以有一到多个超级表,但一个超级表只属于一个库。一个超级表所拥有的子表全部存在一个库里。 + +## FQDN & Endpoint + +FQDN(Fully Qualified Domain Name,完全限定域名)是 Internet 上特定计算机或主机的完整域名。FQDN 由两部分组成:主机名和域名。例如,假设邮件服务器的 FQDN 可能是 mail.tdengine.com。主机名是 mail,主机位于域名 tdengine.com 中。DNS(Domain Name System),负责将 FQDN 翻译成 IP,是互联网应用的寻址方式。对于没有 DNS 的系统,可以通过配置 hosts 文件来解决。 + +TDengine 集群的每个节点是由 Endpoint 来唯一标识的,Endpoint 是由 FQDN 外加 Port 组成,比如 h1.tdengine.com:6030。这样当 IP 发生变化的时候,我们依然可以使用 FQDN 来动态找到节点,不需要更改集群的任何配置。而且采用 FQDN,便于内网和外网对同一个集群的统一访问。 + +TDengine 不建议采用直接的 IP 地址访问集群,不利于管理。不了解 FQDN 概念,请看博文[《一篇文章说清楚 TDengine 的 FQDN》](https://www.taosdata.com/blog/2020/09/11/1824.html)。 diff --git a/docs/zh/04-concept/supertable.webp b/docs/zh/04-concept/supertable.webp new file mode 100644 index 0000000000000000000000000000000000000000..764b8f3de7ee92a103b2fcd0e75c03773af5ee37 GIT binary patch literal 33420 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 R`h(d2t?>V!QQ{7-{|8DPdy4=7 literal 0 HcmV?d00001 diff --git a/docs/zh/07-data-in/02-prometheus.md b/docs/zh/07-data-in/02-prometheus.md new file mode 100644 index 0000000000..a4c00de93d --- /dev/null +++ b/docs/zh/07-data-in/02-prometheus.md @@ -0,0 +1,72 @@ +--- +sidebar_label: Prometheus +title: Prometheus +description: 使用 Prometheus 访问 TDengine +--- + +Prometheus 是一款流行的开源监控告警系统。Prometheus 于2016年加入了 Cloud Native Computing Foundation (云原生云计算基金会,简称 CNCF),成为继 Kubernetes 之后的第二个托管项目,该项目拥有非常活跃的开发人员和用户社区。 + +Prometheus 提供了 `remote_write` 和 `remote_read` 接口来利用其它数据库产品作为它的存储引擎。为了让 Prometheus 生态圈的用户能够利用 TDengine 的高效写入和查询,TDengine 也提供了对这两个接口的支持。 + +通过适当的配置, Prometheus 的数据可以通过 `remote_write` 接口存储到 TDengine 中,也可以通过 `remote_read` 接口来查询存储在 TDengine 中的数据,充分利用 TDengine 对时序数据的高效存储查询性能和集群处理能力。 + +## 前置条件 + +登录到 TDengine Cloud ,在左边的菜单点击”数据浏览器“,然后再点击”数据库“标签旁边的”+“按钮添加一个名称是”prometheus_data“使用默认参数的数据库。然后执行 `show databases` SQL确认数据库确实被成功创建出来。 + +## 安装 Prometheus + +假设您使用的是 amd64 架构的 Linux 操作系统: +1. 下载 + ``` + wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz + ``` +2. 解压和重命名 + ``` + tar xvfz prometheus-*.tar.gz && mv prometheus-2.37.0.linux-amd64 prometheus + ``` +3. 改变目录为 prometheus + ``` + cd prometheus + ``` + +然后 Prometheus 就会被安装到当前目录. 想了解更多 Prometheus 安装选型,请参考[官方文档](https://prometheus.io/docs/prometheus/latest/installation/). + +## 配置 Prometheus + +可以通过编辑 Prometheus 配置文件 `prometheus.yml` 来设置 Prometheus (如果您完全按照上面的步骤执行,您可以在当前目录找到 prometheus.xml 文件)。 + +```yaml +remote_write: + - url: "/prometheus/v1/remote_write/prometheus_data?token=" + +remote_read: + - url: "/prometheus/v1/remote_read/prometheus_data?token=" + remote_timeout: 10s + read_recent: true +``` + + +您可以使用真实的 TDengine Cloud 的URL和令牌来替换上面的``和``。可以通过访问[TDengine Cloud](https://cloud.taosdata.com)来获取真实的值。 + + +配置完成后,Prometheus 会从自己的 HTTP 指标端点收集数据并存储到 TDengine Cloud 里面。 + +## 启动 Prometheus + +``` +./prometheus --config.file prometheus.yml +``` + +之后 Prometheus 应该已经启动好。同时也启动了一个 Web 服务器。如果您想从浏览器访问这个 Web 服务器, 可以根据您的网络环境修改 `localhost` 为正确的主机名,FQDN 或者 IP 地址。 + +## 验证远程写入 + +Log in TDengine Cloud, click "Explorer" on the left navigation bar. You will see metrics collected by prometheus. +登录 TDengine Cloud ,然后点击左边导航栏的”数据浏览器“。您就会看见由 Prometheus 收集的指标数据。 +![TDengine prometheus remote_write result](prometheus_data.webp) + +:::note + +- TDengine 会根据一定规则自动为子表名创建唯一的 IDs。 +::: diff --git a/docs/zh/07-data-in/03-telegraf.md b/docs/zh/07-data-in/03-telegraf.md new file mode 100644 index 0000000000..44c049bc2d --- /dev/null +++ b/docs/zh/07-data-in/03-telegraf.md @@ -0,0 +1,88 @@ +--- +sidebar_label: Telegraf +title: Telegraf 写入 +description: 使用 Telegraf 向 TDengine 写入数据 +--- + +Telegraf 是一款十分流行的指标采集开源软件。在数据采集和平台监控系统中,Telegraf 可以采集多种组件的运行信息,而不需要自己手写脚本定时采集,降低数据获取的难度。 + +只需要将 Telegraf 的输出配置增加指向 taosAdapter 对应的 url 并修改若干配置项即可将 Telegraf 的数据写入到 TDengine 中。将 Telegraf 的数据存在到 TDengine 中可以充分利用 TDengine 对时序数据的高效存储查询性能和集群处理能力。 + +## 前置条件 + +要将 Telegraf 数据写入 TDengine Cloud ,需要首先手动创建一个数据库。登录到 TDengine Cloud ,在左边的菜单点击”数据浏览器“,然后再点击”数据库“标签旁边的”+“按钮添加一个名称是”telegraf“使用默认参数的数据库。 + +## 安装 Telegraf + +假设您使用的是 Ubuntu 操作系统: + +```bash +{{#include docs/examples/thirdparty/install-telegraf.sh:null:nrc}} +``` + +安装结束以后,Telegraf 服务应该已经启动。请先停止它: + +```bash +sudo systemctl stop telegraf +``` + +## 配置环境变量 + +在您的终端命令行里面执行下面的命令来保存 TDengine Cloud 的令牌和URL为环境变量: + +```bash +export TDENGINE_CLOUD_URL="" +export TDENGINE_CLOUD_TOKEN="" +``` + + +您可以使用真实的 TDengine Cloud 的URL和令牌来替换上面的``和``。可以通过访问[TDengine Cloud](https://cloud.taosdata.com)来获取真实的值。 + + +然后运行下面的命令来生成 telegraf.conf 文件。 + +```bash +{{#include docs/examples/thirdparty/gen-telegraf-conf.sh:null:nrc}} +``` + +编辑”outputs.http“部分 + +```toml +{{#include docs/examples/thirdparty/telegraf-conf.toml:null:nrc}} +``` + +配置完成后 Telegraf 会开始收集CPU和内容的数据并发送到 TDengine 的数据库”telegraf“。”telegraf“数据库必须先通过 TDengine Cloud 创建。 + +## 启动 Telegraf + +使用新生的 telegraf.conf 文件启动 Telegraf。 + +```bash +telegraf --config telegraf.conf +``` + +## 验证 + +- 通过下面命令检查天气数据库"telegraf"被创建出来: + +```sql +show databases; +``` +![TDengine show telegraf databases](./telegraf-show-databases.webp) + +检查天气超级表 cpu 和 mem 被创建出来: + +```sql +show telegraf.stables; +``` + +![TDengine Cloud show telegraf stables](./telegraf-show-stables.webp) + +:::note + +- TDengine 接收 influxdb 格式数据默认生成的子表名是根据规则生成的唯一 ID 值。 +用户如需指定生成的表名,可以通过在 taos.cfg 里配置 smlChildTableName 参数来指定。如果通过控制输入数据格式,即可利用 TDengine 这个功能指定生成的表名。 +举例如下:配置 smlChildTableName=tname 插入数据为 st,tname=cpu1,t1=4 c1=3 1626006833639000000 则创建的表名为 cpu1。如果多行数据 tname 相同,但是后面的 tag_set 不同,则使用第一行自动建表时指定的 tag_set,其他的行会忽略)。[TDengine 无模式写入参考指南](/reference/schemaless/#无模式写入行协议) +::: + + diff --git a/docs/zh/07-data-in/30-schemaless-influxdb.md b/docs/zh/07-data-in/30-schemaless-influxdb.md new file mode 100644 index 0000000000..a3b3d149ac --- /dev/null +++ b/docs/zh/07-data-in/30-schemaless-influxdb.md @@ -0,0 +1,75 @@ +--- +sidebar_label: InfluxDB 行协议 +title: Schemaless - InfluxDB 行协议 +description: 通过 Schemaless 行协议写入数据 +--- + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +这个部分我们会介绍如何通过无服务 InfluxDB 行协议的 REST 接口往 TDengine Cloud 写入数据。 + +## 配置 + +在您的终端命令行运行下面的命令来设置 TDengine Cloud 的令牌和URL为环境变量: + + + + +```bash +export TDENGINE_CLOUD_TOKEN="" +export TDENGINE_CLOUD_URL="" +``` + + + + +```bash +set TDENGINE_CLOUD_TOKEN="" +set TDENGINE_CLOUD_URL="" +``` + + + + +```powershell +$env:TDENGINE_CLOUD_TOKEN="" +$env:TDENGINE_CLOUD_URL="" +``` + + + + +## 插入 + +您可以使用任何支持 HTTP 协议的客户端通过访问 RESTful 的接口地址 `/influxdb/v1/write` 往 TDengine 里面写入兼容 InfluxDB 的数据。访问地址如下: + +```text +/influxdb/v1/write?db=&token= +``` + +支持 InfluxDB 查询参数如下: + +- `db` 指定 TDengine 使用的数据库名 +- `precision` TDengine 使用的时间精度 + - ns - 纳秒 + - u - 微妙 + - ms - 毫秒 + - s - 秒 + - m - 分 + - h - 小时 + +## 写入样例 +```bash +curl --request POST "$TDENGINE_CLOUD_URL/influxdb/v1/write?db=&token=$TDENGINE_CLOUD_TOKEN&precision=ns" --data-binary "measurement,host=host1 field1=2i,field2=2.0 1577846800001000001" +``` + +## 使用 SQL 查询样例 +- `measurement` 是超级表名。 +- 您可以像这样通过标签过滤数据:`where host="host1"`。 +```bash +curl -L -d "select * from .measurement where host=\"host1\"" $TDENGINE_CLOUD_URL/rest/sql/test?token=$TDENGINE_CLOUD_TOKEN +``` diff --git a/docs/zh/07-data-in/35-schemaless-opentsdb-json.md b/docs/zh/07-data-in/35-schemaless-opentsdb-json.md new file mode 100644 index 0000000000..66de3990b3 --- /dev/null +++ b/docs/zh/07-data-in/35-schemaless-opentsdb-json.md @@ -0,0 +1,62 @@ +--- +sidebar_label: OpenTSDB JSON 协议 +title: Schemaless - OpenTSDB JSON 协议 +description: 写入使用 OpenTSDB JSON 协议的数据 +--- + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +这个部分我们会介绍如何通过无服务 OpenTSDB JSON 协议的 REST 接口往 TDengine Cloud 写入数据。 + + +## 配置 + +在您的终端命令行运行下面的命令来设置 TDengine Cloud 的令牌和URL为环境变量: + + + + +```bash +export TDENGINE_CLOUD_TOKEN="" +export TDENGINE_CLOUD_URL="" +``` + + + + +```bash +set TDENGINE_CLOUD_TOKEN="" +set TDENGINE_CLOUD_URL="" +``` + + + + +```powershell +$env:TDENGINE_CLOUD_TOKEN="" +$env:TDENGINE_CLOUD_URL="" +``` + + + +## 插入 + +您可以使用任何支持 HTTP 协议的客户端通过访问 RESTful 的接口地址 `/opentsdb/v1/put` 往 TDengine 里面写入兼容 OpenTSDB 的数据。访问地址如下: + +```text +/opentsdb/v1/put/json/?token= +``` +### 写入样例 +```bash +curl --request POST "$TDENGINE_CLOUD_URL/opentsdb/v1/put/json/?token=$TDENGINE_CLOUD_TOKEN" --data-binary "{\"metric\":\"meter_current\",\"timestamp\":1646846400,\"value\":10.3,\"tags\":{\"groupid\":2,\"location\":\"Beijing\",\"id\":\"d1001\"}}" +``` +## 使用 SQL 查询样例 +- `meter_current` 是超级表名。 +- 您可以像这样通过标签过滤数据:`where groupid=2`. +```bash +curl -L -d "select * from .meter_current where groupid=2" $TDENGINE_CLOUD_URL/rest/sql/test?token=$TDENGINE_CLOUD_TOKEN +``` diff --git a/docs/zh/07-data-in/38-schemaless-opentsdb-telnet.md b/docs/zh/07-data-in/38-schemaless-opentsdb-telnet.md new file mode 100644 index 0000000000..3e748b865d --- /dev/null +++ b/docs/zh/07-data-in/38-schemaless-opentsdb-telnet.md @@ -0,0 +1,65 @@ +--- +sidebar_label: OpenTSDB Telnet 协议 +title: Schemaless - OpenTSDB Telnet 协议 +description: 写入使用 OpenTSDB Telnet 协议的数据 +--- + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +这个部分我们会介绍如何通过无服务 OpenTSDB Telnet 协议的 REST 接口往 TDengine Cloud 写入数据。 + + +## 配置 + +在您的终端命令行运行下面的命令来设置 TDengine Cloud 的令牌和URL为环境变量: + + + + +```bash +export TDENGINE_CLOUD_TOKEN="" +export TDENGINE_CLOUD_URL="" +``` + + + + +```bash +set TDENGINE_CLOUD_TOKEN="" +set TDENGINE_CLOUD_URL="" +``` + + + + +```powershell +$env:TDENGINE_CLOUD_TOKEN="" +$env:TDENGINE_CLOUD_URL="" +``` + + + + +## 插入 + +您可以使用任何支持 HTTP 协议的客户端通过访问 RESTful 的接口地址 `/opentsdb/v1/put` 往 TDengine 里面写入兼容 OpenTSDB 的数据。访问地址如下: + +```text +/opentsdb/v1/put/telnet/?token= +``` + +### 写入样例 +```bash +curl --request POST "$TDENGINE_CLOUD_URL/opentsdb/v1/put/telnet/?token=$TDENGINE_CLOUD_TOKEN" --data-binary "sys 1479496100 1.3E0 host=web01 interface=eth0" +``` + +## 使用 SQL 查询样例 +- `sys` 是超级表名。 +- 您可以像这样通过标签过滤数据:`where host="web01"`. +```bash +curl -L -d "select * from .sys where host=\"web01\"" $TDENGINE_CLOUD_URL/rest/sql/test?token=$TDENGINE_CLOUD_TOKEN +``` diff --git a/docs/zh/07-data-in/index.md b/docs/zh/07-data-in/index.md new file mode 100644 index 0000000000..9aa2a618d4 --- /dev/null +++ b/docs/zh/07-data-in/index.md @@ -0,0 +1,13 @@ +--- +sidebar_label: 数据写入 +title: 从TDengine云服务里面写入数据 +description: 有多种方式可以往 TDengine 里面写入数据。 +--- + +这章主要介绍目前有多种方式往 TDengine 里面写入数据,比如用户可以直接使用 TDengine SQL 往 TDengine Cloud 里面写入数据,也可以通过编程的方式使用 TDengine 提供的[连接器(Connector)](../programming/connector)往TDengine里面写入数据。TDengine 还提供压力测试工具 [taosBenchmark](../tools/taosbenchmark)往TDengine里面写入数据,另外 TDengine 企业版还提供工具 taosX 可以从一个 TDengine Cloud 实例同步数据到另外一个。 + +此外,通过第三方工具 Telegraf 和 Prometheus,也可以往 TDengine 写入数据。 + +:::注意 +由于权限的限制,有必须首先在云服务的数据浏览器里面创建数据库,然后才能往这个数据库里面写入数据。这个限制是所有写入方式必须首先做的。 +::: diff --git a/docs/zh/07-data-in/prometheus_data.webp b/docs/zh/07-data-in/prometheus_data.webp new file mode 100644 index 0000000000000000000000000000000000000000..760890656daae09b9127d52c03486ce9b2bb0913 GIT binary patch literal 28074 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 HeDl8m`Fl~N literal 0 HcmV?d00001 diff --git a/docs/zh/07-data-in/prometheus_read.webp b/docs/zh/07-data-in/prometheus_read.webp new file mode 100644 index 0000000000000000000000000000000000000000..2c91aa6fb8df897effddb4bfab3d522b6975ed1a GIT binary patch literal 16040 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 literal 0 HcmV?d00001 diff --git a/docs/zh/07-data-in/telegraf-show-databases.webp b/docs/zh/07-data-in/telegraf-show-databases.webp new file mode 100644 index 0000000000000000000000000000000000000000..8970f074eee3980d313de100218cbfaff84fbef0 GIT binary patch literal 12408 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 {~j&>kfKJCOD-`C7tkse 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 wB31veBsUvvoG8bI34k1EQ)Hs1 +:::tip + +- taosdump versions after 1.4.1 provide the `-I` argument for parsing Avro file schema and data. If users specify `-s` then only taosdump will parse schema. +- Backups after taosdump 1.4.2 use the batch count specified by the `-B` parameter. The default value is 16384. If, in some environments, low network speed or disk performance causes "Error actual dump ... batch ...", then try changing the `-B` parameter to a smaller value. + +::: + + +### taosdump recover data + +Restore the data file in the specified path: use the `-i` parameter plus the path to the data file. You should not use the same directory to backup different data sets, and you should not backup the same data set multiple times in the same path. Otherwise, the backup data will cause overwriting or multiple backups. + + +:::tip +taosdump internally uses TDengine stmt binding API for writing recovery data with a default batch size of 16384 for better data recovery performance. If there are more columns in the backup data, it may cause a "WAL size exceeds limit" error. You can try to adjust the batch size to a smaller value by using the `-B` parameter. + +::: + + +## Detailed command-line parameter list + +The following is a detailed list of taosdump command-line arguments. + +``` +Usage: taosdump [OPTION...] dbname [tbname ...] + or: taosdump [OPTION...] --databases db1,db2,... + or: taosdump [OPTION...] --all-databases + or: taosdump [OPTION...] -i inpath + or: taosdump [OPTION...] -o outpath + + -h, --host=HOST Server host from which to dump data. Default is + localhost. + -p, --password User password to connect to server. Default is + taosdata. + -P, --port=PORT Port to connect + -u, --user=USER User name used to connect to server. Default is + root. + -c, --config-dir=CONFIG_DIR Configure directory. Default is /etc/taos + -i, --inpath=INPATH Input file path. + -o, --outpath=OUTPATH Output file path. + -r, --resultFile=RESULTFILE DumpOut/In Result file path and name. + -a, --allow-sys Allow to dump system database + -A, --all-databases Dump all databases. + -D, --databases=DATABASES Dump listed databases. Use comma to separate + database names. + -N, --without-property Dump database without its properties. + -s, --schemaonly Only dump table schemas. + -y, --answer-yes Input yes for prompt. It will skip data file + checking! + -d, --avro-codec=snappy Choose an avro codec among null, deflate, snappy, + and lzma. + -S, --start-time=START_TIME Start time to dump. Either epoch or + ISO8601/RFC3339 format is acceptable. ISO8601 + format example: 2017-10-01T00:00:00.000+0800 or + 2017-10-0100:00:00:000+0800 or '2017-10-01 + 00:00:00.000+0800' + -E, --end-time=END_TIME End time to dump. Either epoch or ISO8601/RFC3339 + format is acceptable. ISO8601 format example: + 2017-10-01T00:00:00.000+0800 or + 2017-10-0100:00:00.000+0800 or '2017-10-01 + 00:00:00.000+0800' + -B, --data-batch=DATA_BATCH Number of data per query/insert statement when + backup/restore. Default value is 16384. If you see + 'error actual dump .. batch ..' when backup or if + you see 'WAL size exceeds limit' error when + restore, please adjust the value to a smaller one + and try. The workable value is related to the + length of the row and type of table schema. + -I, --inspect inspect avro file content and print on screen + -L, --loose-mode Use loose mode if the table name and column name + use letter and number only. Default is NOT. + -n, --no-escape No escape char '`'. Default is using it. + -T, --thread-num=THREAD_NUM Number of thread for dump in file. Default is + 5. + -C, --cloud=CLOUD_DSN specify a DSN to access TDengine cloud service + -R, --restful Use RESTful interface to connect TDengine + -g, --debug Print debug info. + -?, --help Give this help list + --usage Give a short usage message + -V, --version Print program version + +Mandatory or optional arguments to long options are also mandatory or optional +for any corresponding short options. + +Report bugs to . +``` diff --git a/docs/zh/09-data-out/05-prometheus.md b/docs/zh/09-data-out/05-prometheus.md new file mode 100644 index 0000000000..ed7ae62626 --- /dev/null +++ b/docs/zh/09-data-out/05-prometheus.md @@ -0,0 +1,34 @@ +--- +sidebar_label: Prometheus +title: Prometheus remote read +description: Prometheus remote_read from TDengine cloud server +--- + +Prometheus is a widespread open-source monitoring and alerting system. Prometheus joined the Cloud Native Computing Foundation (CNCF) in 2016 as the second incubated project after Kubernetes, which has a very active developer and user community. + +Prometheus provides `remote_read` interface to leverage other database products as its storage engine. To enable users of the Prometheus ecosystem to take advantage of TDengine's efficient querying, TDengine also provides support for this interface so that data stored in TDengine can be queried via the `remote_read` interface, taking full advantage of TDengine's efficient query performance and clustering capabilities for time-series data. + +## Install Prometheus + +Please refer to [Install Prometheus](https://docs.tdengine.com/cloud/data-in/prometheus#install-prometheus). + +## Configure Prometheus + +Please refer to [Configure Prometheus](https://docs.tdengine.com/cloud/prometheus/#configure-prometheus). + +## Start Prometheus + +Please refer to [Start Prometheus](https://docs.tdengine.com/cloud/data-in/prometheus/#start-prometheus). + +## Verify Remote Read + +Lets retrieve some metrics from TDengine Cloud via prometheus web server. Browse to and use the "Graph" tab. + +Enter the following expression to graph the per-second rate of chunks being created in the self-scraped Prometheus: + +``` +rate(prometheus_tsdb_head_chunks_created_total[1m]) +``` + +![TDengine prometheus remote_read](prometheus_read.webp) + diff --git a/docs/zh/09-data-out/index.md b/docs/zh/09-data-out/index.md new file mode 100644 index 0000000000..2cb3b928c5 --- /dev/null +++ b/docs/zh/09-data-out/index.md @@ -0,0 +1,7 @@ +--- +sidebar_label: 数据输出 +title: 数据输出 +description: TDengine Cloud 的多种数据输出方式。 +--- + +This chapter introduces how to get data out of TDengine cloud service. Besides normal query using SQL, users can use [data subscripition](../data-subscription) which is provided by TDengine cloud service to do data subscription and share the data stored in TDengine to others. TDengine provides [connectors](../programming/connector) for application programmers to access the data stored in TDengine. TDengine also provides some tools, like [taosdump](../tools/taosdump), which is a tool provided by TDengine to dump the data stored in TDengine cloud service into files, and `taosX`, which is another tool to sync up the data in one TDengine cloud service into another. Furthermore, 3rd party tools, like prometheus, can also be used to write data into TDengine. diff --git a/docs/zh/09-data-out/prometheus_data.webp b/docs/zh/09-data-out/prometheus_data.webp new file mode 100644 index 0000000000000000000000000000000000000000..760890656daae09b9127d52c03486ce9b2bb0913 GIT binary patch literal 28074 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 HeDl8m`Fl~N literal 0 HcmV?d00001 diff --git a/docs/zh/09-data-out/prometheus_read.webp b/docs/zh/09-data-out/prometheus_read.webp new file mode 100644 index 0000000000000000000000000000000000000000..2c91aa6fb8df897effddb4bfab3d522b6975ed1a GIT binary patch literal 16040 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 literal 0 HcmV?d00001 diff --git a/docs/zh/10-programming/01-connect/01-python.md b/docs/zh/10-programming/01-connect/01-python.md new file mode 100644 index 0000000000..4f5d0baf42 --- /dev/null +++ b/docs/zh/10-programming/01-connect/01-python.md @@ -0,0 +1,130 @@ +--- +sidebar_label: Python +title: 使用 Python 连接器建立连接 +description: 使用 Python 连接器建立和 TDengine Cloud 的连接 +--- + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +## 安装连接器 + +首先,您需要安装版本大于 `2.6.2` 的 `taospy` 模块,然后在终端里面执行下面的命令。 + + + + +```bash +pip3 install -U taospy[ws] +``` + +您必须首先安装 Python3 。 + + + + +```bash +conda install -c conda-forge taospy taospyws +``` + + + + +## 配置 + +在您的终端里面执行下面的命令来保存 TDengine Cloud 的 URL 和令牌到系统的环境变量里面: + + + + +```bash +export TDENGINE_CLOUD_TOKEN="" +export TDENGINE_CLOUD_URL="" +``` + + + + +```shell +set TDENGINE_CLOUD_TOKEN= +set TDENGINE_CLOUD_URL= +``` + + + + +```powershell +$env:TDENGINE_CLOUD_TOKEN='' +$env:TDENGINE_CLOUD_URL='' +``` + + + + +另外您也可以在您的 IDE 的运行配置里面设置这些环境变量。 + + +:::note +替换 为 TDengine Cloud 的令牌和 URL 。 +获取 TDengine Cloud 的令牌和 URL,可以登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”编程“菜单,然后选择”Python“。 +::: + + +## 建立连接 + +复制下面的代码到您的编辑器,然后执行这段代码。如果您正在使用 Jupyter 并且按照它的指南搭建好环境,您可以负责下面代码到您浏览器的 Jupyter 编辑器。 + +```python +{{#include docs/examples/python/develop_tutorial.py:connect}} +``` + +对于如何写入数据和查询输入,请参考。 + +想知道更多通过 REST 接口写入数据的详情,请参考[REST 接口](https://docs.taosdata.com/cloud/programming/connector/rest-api/). + +## Jupyter + +### 步骤一:安装模块 + +对于熟悉使用 Jupyter 来进行 Python 编程的用户,在您的环境中必须准备好 TDengine 的 Python 连接器和 Jupyter。如果您还没有这样做,请使用下面的命令来安装他们。 + + + + +```bash +pip install jupyterlab +pip3 install -U taospy[ws] +``` + +您接下来需要安装 Python3 。 + + + + +``` +conda install -c conda-forge jupyterlab +conda install -c conda-forge taospy +``` + + + + +### 步骤二:配置 + +在使用 Jupyter 和 TDengine Cloud 连接连接之前,需要在环境变量设置按照下面内容设置,然后再启动 Jupyter。我们使用 Linux 脚本作为例子。 + +```bash +export TDENGINE_CLOUD_TOKEN="" +export TDENGINE_CLOUD_URL="" +jupyter lab +``` + +### 步骤三:建立连接 + +一旦 Jupter lab 启动成功,Jupyter lab 服务就会自动和 TDengine Cloud 连接并且显示在浏览器里面。您可以创建一个新的 notebook 页面,然后复制下面的样例代码到这个页面中并运行。 + +```python +{{#include docs/examples/python/develop_tutorial.py:connect}} +``` diff --git a/docs/zh/10-programming/01-connect/02-java.md b/docs/zh/10-programming/01-connect/02-java.md new file mode 100644 index 0000000000..073829eca3 --- /dev/null +++ b/docs/zh/10-programming/01-connect/02-java.md @@ -0,0 +1,80 @@ +--- +sidebar_label: Java +title: 使用 Java 连接器建立连接 +description: 使用 Java 连接器建立和 TDengine Cloud 的连接 +--- + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +## 增加依赖包 + + + + + +```xml title="pom.xml" +{{#include docs/examples/java/pom.xml:dep}} +``` + + + + +```groovy title="build.gradle" +dependencies { + implementation 'com.taosdata.jdbc:taos-jdbcdriver:3.0.0.0' +} +``` + + + + +## 配置 + +在您的终端里面执行下面的命令设置 JDBC URL 为环境变量: + + + + +```bash +export TDENGINE_JDBC_URL="" +``` + + + +```shell +set TDENGINE_JDBC_URL= +``` + + + +```powershell +$env:TDENGINE_JDBC_URL='' +``` + + + + + +另外,您也可以在您的 IDE 的运行配置里设置环境变量 + + +:::note +替换 为 真实的 JDBC URL,比如 `jdbc:TAOS-RS://example.com?usessl=true&token=xxxx`。 + +获取真实的 JDBC URL 的值,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”编程“菜单,然后选择”Java“。 +::: + +## 建立连接 + +下面的代码是先从环境变量里面创建 JDBC URL ,然后创建 `Connection` 这个 JDBC 连接标准对象。 + +```java +{{#include docs/examples/java/src/main/java/com/taos/example/ConnectCloudExample.java:connect}} +``` + +客户端连接建立连接以后,想了解更多写入数据和查询数据的内容,请参考 and . + +想知道更多通过 REST 接口写入数据的详情,请参考[REST 接口](https://docs.taosdata.com/cloud/programming/connector/rest-api/). diff --git a/docs/zh/10-programming/01-connect/03-go.md b/docs/zh/10-programming/01-connect/03-go.md new file mode 100644 index 0000000000..8d87ba63df --- /dev/null +++ b/docs/zh/10-programming/01-connect/03-go.md @@ -0,0 +1,85 @@ +--- +sidebar_label: Go +title: 使用 Go 连接器建立连接 +description: 使用 Go 连接器建立和 TDengine Cloud 的连接 +--- + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +## 初始化模块 + +``` +go mod init tdengine.com/example +``` + +## 增加模块依赖 + +在 `go.mod` 文件中增加 `driver-go` 依赖。 + +```go-mod title="go.mod" +{{#include docs/examples/go/connectexample/go.mod}} +``` + +## 配置 + +在您的终端里面执行下面的命令设置 DSN(数据源名称) 为系统环境变量: + + + + +```bash +export TDENGINE_GO_DSN="" +``` + + + + +```bash +set TDENGINE_GO_DSN= +``` + + + + +```powershell +$env:TDENGINE_GO_DSN='' +``` + + + + + + +:::note +替换 为 真实的值,格式应该是 `https()/?token=`。 + +获取真实的 `goDSN` 的值,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”编程“菜单,然后选择”Go“。 +::: + + +## 建立连接 + +复制代码到 main.go 文件。 + +```go title="main.go" +{{#include docs/examples/go/connectexample/main.go}} +``` + +执行下面的命令下载相关依赖: + +```bash +go mod tidy +``` + +最后运行下面命令测试连接: + +```bash +go run main.go +``` + +客户端连接建立连接以后,想了解更多写入数据和查询数据的内容,请参考 and . + +想知道更多通过 REST 接口写入数据的详情,请参考[REST 接口](https://docs.taosdata.com/cloud/programming/connector/rest-api/). diff --git a/docs/zh/10-programming/01-connect/04-rust.md b/docs/zh/10-programming/01-connect/04-rust.md new file mode 100644 index 0000000000..ac3ff1d00b --- /dev/null +++ b/docs/zh/10-programming/01-connect/04-rust.md @@ -0,0 +1,80 @@ +--- +sidebar_label: Rust +title: 使用 Rust 连接器建立连接 +description: 使用 Rust 连接器建立和 TDengine Cloud 的连接 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +## 创建项目 + +```bash +cargo new --bin cloud-example +``` + +## 增加依赖 + +在 `Cargo.toml` 文件中增加下面的依赖: + +```toml title="Cargo.toml" +[package] +name = "cloud-example" +version = "0.1.0" +edition = "2021" + +[dependencies] +taos = { version = "*", default-features = false, features = ["ws"] } +tokio = { version = "1", features = ["full"]} +anyhow = "1.0.0" +``` + +## 配置 + +在您的终端里面执行下面的命令设置 TDengine Cloud 的 DSN 为环境变量: + + + + +```bash +export TDENGINE_CLOUD_DSN="" +``` + + + + +```bash +set TDENGINE_CLOUD_DSN= +``` + + + + +```powershell +$env:TDENGINE_CLOUD_DSN='' +``` + + + + + +:::note +替换 为 真实的值,格式应该是 `https()/?token=`。 + +获取真实的 `DSN` 的值,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”编程“菜单,然后选择”Rust“。 + +::: + + +## 建立连接 + +复制下面的代码到 `main.rs` 文件。 + +```rust title="main.rs" +{{#include docs/examples/rust/cloud-example/src/main.rs}} +``` + +客户端连接建立连接以后,想了解更多写入数据和查询数据的内容,请参考 and . + +想知道更多通过 REST 接口写入数据的详情,请参考[REST 接口](https://docs.taosdata.com/cloud/programming/connector/rest-api/). diff --git a/docs/zh/10-programming/01-connect/05-node.md b/docs/zh/10-programming/01-connect/05-node.md new file mode 100644 index 0000000000..3f36f6bcfa --- /dev/null +++ b/docs/zh/10-programming/01-connect/05-node.md @@ -0,0 +1,63 @@ +--- +sidebar_label: Node.js +title: 使用 Node.js 连接器建立连接 +description: 使用 Node.js 连接器建立和 TDengine Cloud 的连接 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +## 安装连接器 + +```bash +npm install @tdengine/rest +``` +## 配置 + +在您的终端里面执行下面的命令设置 TDengine Cloud 令牌为环境变量: + + + + +```bash +export TDENGINE_CLOUD_TOKEN="" +export TDENGINE_CLOUD_URL="" +``` + + + + +```bash +set TDENGINE_CLOUD_TOKEN= +set TDENGINE_CLOUD_URL= +``` + + + + +```powershell +$env:TDENGINE_CLOUD_TOKEN='' +$env:TDENGINE_CLOUD_URL='' +``` + + + + + + +:::note +替换 为 TDengine Cloud 的令牌和 URL 。 +获取 TDengine Cloud 的令牌和 URL,可以登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”编程“菜单,然后选择”Node.js“。 +::: + + +## Connect + +```javascript +{{#include docs/examples/node/connect.js}} +``` + +客户端连接建立连接以后,想了解更多写入数据和查询数据的内容,请参考 and . + +想知道更多通过 REST 接口写入数据的详情,请参考[REST 接口](https://docs.taosdata.com/cloud/programming/connector/rest-api/). diff --git a/docs/zh/10-programming/01-connect/06-csharp.md b/docs/zh/10-programming/01-connect/06-csharp.md new file mode 100644 index 0000000000..c434b323bb --- /dev/null +++ b/docs/zh/10-programming/01-connect/06-csharp.md @@ -0,0 +1,90 @@ +--- +sidebar_label: C# +title: 使用 C# 连接器建立连接 +description: 使用 C# 连接器建立和 TDengine Cloud 的连接 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +## 创建项目 + +```bash +dotnet new console -o example +``` + +## Add C# TDengine Driver class lib + +```bash +cd example +vim example.csproj +``` + +增加下面的 ItemGroup 和 Task 配置到您的工程文件中。 + +```XML + + + + + + + + + +``` + +```bash +dotnet add package TDengine.Connector +``` + +## Config + +在您的终端里面执行下面的命令设置 TDengine Cloud 令牌为环境变量: + + + + +```bash +export TDENGINE_CLOUD_DSN="" +``` + + + + +```bash +set TDENGINE_CLOUD_DSN= +``` + + + + +```powershell +$env:TDENGINE_CLOUD_DSN='' +``` + + + + + +:::note +替换 为 真实的值,格式应该是 `https()/?token=`。 + +获取真实的 `DSN` 的值,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”编程“菜单,然后选择”C#“。 +::: + + +## 建立连接 + +``` XML +{{#include docs/examples/csharp/cloud-example/connect/connect.csproj}} +``` + +```C# +{{#include docs/examples/csharp/cloud-example/connect/Program.cs}} +``` + +客户端连接建立连接以后,想了解更多写入数据和查询数据的内容,请参考 and . + +想知道更多通过 REST 接口写入数据的详情,请参考[REST 接口](https://docs.taosdata.com/cloud/programming/connector/rest-api/). diff --git a/docs/zh/10-programming/01-connect/09-rest-api.md b/docs/zh/10-programming/01-connect/09-rest-api.md new file mode 100644 index 0000000000..d7805aaec1 --- /dev/null +++ b/docs/zh/10-programming/01-connect/09-rest-api.md @@ -0,0 +1,57 @@ +--- +sidebar_label: REST API +title: REST API +description: 使用 RESTful 接口建立和 TDengine Cloud 的连接 +--- + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +## 配置 + +在您的终端里面执行下面的命令来保存 TDengine Cloud 的 URL 和令牌到系统的环境变量里面: + + + + +```bash +export TDENGINE_CLOUD_TOKEN="" +export TDENGINE_CLOUD_URL="" +``` + + + + +```bash +set TDENGINE_CLOUD_TOKEN= +set TDENGINE_CLOUD_URL= +``` + + + + +```powershell +$env:TDENGINE_CLOUD_TOKEN='' +$env:TDENGINE_CLOUD_URL='' +``` + + + + + +:::note +替换 为 TDengine Cloud 的令牌和 URL 。 +获取 TDengine Cloud 的令牌和 URL,可以登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”编程“菜单,然后选择”REST API“。 +::: + +## 使用 + +TDengine REST API 是使用标准的 HTTP 协议并提供一直简易的方式访问 TDengine 实例。比如下面的命令,通过 URL,令牌和 SQL 命令来组装 HTTP 请求,并使用命令行工具 `curl` 来运行这个命令。 + +```bash +curl -L \ + -d "select name, ntables, status from information_schema.ins_databases;" \ + $TDENGINE_CLOUD_URL/rest/sql?token=$TDENGINE_CLOUD_TOKEN +``` diff --git a/docs/zh/10-programming/01-connect/_category_.yml b/docs/zh/10-programming/01-connect/_category_.yml new file mode 100644 index 0000000000..f75d563ac9 --- /dev/null +++ b/docs/zh/10-programming/01-connect/_category_.yml @@ -0,0 +1 @@ +label: 建立连接 diff --git a/docs/zh/10-programming/01-connect/index.md b/docs/zh/10-programming/01-connect/index.md new file mode 100644 index 0000000000..e5d6dbf996 --- /dev/null +++ b/docs/zh/10-programming/01-connect/index.md @@ -0,0 +1,14 @@ +--- +sidebar_label: 快速开始 +title: 建立与 TDengine Cloud 的连接 +description: 使用连接器建立与 TDengine Cloud 的连接 +--- + +这个部分主要是讲述如何使用 TDengine 提供的丰富连接器与 TDengine Cloud 建立连接,这样用户就能快速开发自己的应用 + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` diff --git a/docs/zh/10-programming/02-model.md b/docs/zh/10-programming/02-model.md new file mode 100644 index 0000000000..2768602034 --- /dev/null +++ b/docs/zh/10-programming/02-model.md @@ -0,0 +1,72 @@ +--- +sidebar_label: 数据建模 +title: TDengine 数据建模 +description: TDengine 中如何建立数据模型 +--- + +TDengine 采用类关系型数据模型,需要建库、建表。因此对于一个具体的应用场景,需要考虑库、超级表和普通表的设计。本节不讨论细致的语法规则,只介绍概念。 + +## 创建库 + +不同类型的数据采集点往往具有不同的数据特征,包括数据采集频率的高低,数据保留时间的长短,副本的数目,数据块的大小,是否允许更新数据等等。为了在各种场景下 TDengine 都能以最大效率工作,TDengine 建议将不同数据特征的表创建在不同的库里,因为每个库可以配置不同的存储策略。创建一个库时,除 SQL 标准的选项外,还可以指定保留时长、副本数、缓存大小、时间精度、文件块里最大最小记录条数、是否压缩、一个数据文件覆盖的天数等多种参数。 + +![TDengine create-database](./create-database.png) + +详细的语法及参数请见 [数据库管理](/taos-sql/database) 章节。 + +:::note + +- 任何一张表或超级表必须属于某个库,在创建表之前,必须先创建库。 +- 创建并插入记录、查询历史记录的时候,均需要指定时间戳。 + +::: + +## 创建超级表 + +一个物联网系统,往往存在多种类型的设备,比如对于电网,存在智能电表、变压器、母线、开关等等。为便于多表之间的聚合,使用 TDengine, 需要对每个类型的数据采集点创建一个超级表。以 [表 1](/tdinternal/arch#model_table1) 中的智能电表为例,可以使用如下的 SQL 命令创建超级表: + +```sql +CREATE STABLE power.meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int); +``` + +与创建普通表一样,创建超级表时,需要提供表名(示例中为 meters),表结构 Schema,即数据列的定义。第一列必须为时间戳(示例中为 ts),其他列为采集的物理量(示例中为 current, voltage, phase),数据类型可以为整型、浮点型、字符串等。除此之外,还需要提供标签的 Schema (示例中为 location, groupId),标签的数据类型可以为整型、浮点型、字符串等。采集点的静态属性往往可以作为标签,比如采集点的地理位置、设备型号、设备组 ID、管理员 ID 等等。标签的 Schema 可以事后增加、删除、修改。具体定义以及细节请见 [TDengine SQL 的超级表管理](/taos-sql/stable) 章节。 + +每一种类型的数据采集点需要建立一个超级表,因此一个物联网系统,往往会有多个超级表。对于电网,我们就需要对智能电表、变压器、母线、开关等都建立一个超级表。在物联网中,一个设备就可能有多个数据采集点(比如一台风力发电的风机,有的采集点采集电流、电压等电参数,有的采集点采集温度、湿度、风向等环境参数),这个时候,对这一类型的设备,需要建立多张超级表。 + +一张超级表最多容许 4096 列,如果一个采集点采集的物理量个数超过 4096,需要建多张超级表来处理。一个系统可以有多个 Database,一个 Database 里可以有一到多个超级表。 + +## 创建表 + +TDengine 对每个数据采集点需要独立建表。与标准的关系型数据库一样,一张表有表名,Schema,但除此之外,还可以带有一到多个标签。创建时,需要使用超级表做模板,同时指定标签的具体值。以 [表 1](/tdinternal/arch#model_table1) 中的智能电表为例,可以使用如下的 SQL 命令建表: + +```sql +CREATE TABLE power.d1001 USING meters TAGS ("California.SanFrancisco", 2); +``` + +其中 d1001 是表名,meters 是超级表的表名,后面紧跟标签 Location 的具体标签值为 "California.SanFrancisco",标签 groupId 的具体标签值为 2。虽然在创建表时,需要指定标签值,但可以事后修改。详细细则请见 [TDengine SQL 的表管理](/taos-sql/table) 章节。 + +在 TDengine 系统里面, 一个测点通过超级表创建一张表。在部分的 TDengine 文档里面,通过超级表创建的表叫做子表。所有可以在普通表里面使用的 SQL 命令都可以应用到子表里面。 + +:::warning +我们不推荐使用另外一个数据库里面的超级表作为模板来创建这个数据库的子表。 + +:::tip +TDengine 建议将数据采集点的全局唯一 ID 作为表名(比如设备序列号)。但对于有的场景,并没有唯一的 ID,可以将多个 ID 组合成一个唯一的 ID。不建议将具有唯一性的 ID 作为标签值。 + +### 自动建表 + +在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表且后面的 USING 语句被忽略。比如: + +```sql +INSERT INTO power.d1001 USING meters TAGS ("California.SanFrancisco", 2) VALUES (NOW, 10.2, 219, 0.32); +``` + +上述 SQL 语句将记录`(NOW, 10.2, 219, 0.32)`插入表 d1001。如果表 d1001 还未创建,则使用超级表 meters 做模板自动创建,同时打上标签值 `"California.SanFrancisco", 2`。 + +关于自动建表的详细语法请参见 [插入记录时自动建表](/taos-sql/insert#插入记录时自动建表) 章节。 + +## 多列模型 vs 单列模型 + +TDengine 支持多列模型,只要物理量是一个数据采集点同时采集的(时间戳一致),这些量就可以作为不同列放在一张超级表里。但还有一种极限的设计,单列模型,每个采集的物理量都单独建表,因此每种类型的物理量都单独建立一超级表。比如电流、电压、相位,就建三张超级表。 + +TDengine 建议尽可能采用多列模型,因为插入效率以及存储效率更高。但对于有些场景,一个采集点的采集量的种类经常变化,这个时候,如果采用多列模型,就需要频繁修改超级表的结构定义,让应用变的复杂,这个时候,采用单列模型会显得更简单。 diff --git a/docs/zh/10-programming/03-insert.md b/docs/zh/10-programming/03-insert.md new file mode 100644 index 0000000000..753dc82fdb --- /dev/null +++ b/docs/zh/10-programming/03-insert.md @@ -0,0 +1,106 @@ +--- +sidebar_label: 写入 +title: SQL 写入数据 +description: 使用 TDengine SQL 写入数据的开发指南 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## SQL 样例 + +这里有一些 `INSERT` 语句的基本样例。用户可以通过 TDengine CLI,TDengine Cloud 的数据浏览器或者通过 TDengine 连接器开发等执行这些语句。 + +### 一次写入一条 + +下面这条 INSERT 就将一条记录写入到表 d1001 中: + +```sql +INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31); +``` + +### 一次写入多条 + +TDengine 支持一次写入多条记录,比如下面这条命令就将两条记录写入到表 d1001 中: + +```sql +INSERT INTO test.d1001 VALUES (1538548684000, 10.2, 220, 0.23) (1538548696650, 10.3, 218, 0.25); +``` + +### 一次写入多表 + +TDengine 也支持一次向多个表写入数据,比如下面这条命令就向 d1001 写入两条记录,向 d1002 写入一条记录: + +```sql +INSERT INTO test.d1001 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6, 218, 0.33) test.d1002 VALUES (1538548696800, 12.3, 221, 0.31); +``` + +详细的 SQL INSERT 语法规则参考 [TDengine SQL 的数据写入](https://docs.taosdata.com/cloud/taos-sql/insert)。 + +## 连接器样例 + +:::note +在执行下面样例代码的之前,您必须首先建立和 TDengine Cloud 的连接,请参考 [连接 云服务](../../programming/connect/). + +::: + + + +这个例子中,我们使用 `execute` 方法来执行 SQL 和得到被影响的行。参数 `conn` 是类`taosrest.TaosRestConnection` 的一个实例,请参考[连接培训](../../programming/connect/python#connect). + +```python +{{#include docs/examples/python/develop_tutorial.py:insert}} +``` + + + +```java +{{#include docs/examples/java/src/main/java/com/taos/example/CloudTutorial.java:insert}} +``` + + + + +```go +{{#include docs/examples/go/tutorial/main.go:insert}} +``` + + + + +在这个例子中,我们使用 `exec` 方法来执行 SQL 。`exec` 是为非查询的 SQL 语句设计的,所有返回的数据都会被忽略。 + +```rust +{{#include docs/examples/rust/cloud-example/examples/tutorial.rs:insert}} +``` + + + + +```javascript +{{#include docs/examples/node/insert.js}} +``` + + + + + +``` XML +{{#include docs/examples/csharp/cloud-example/inout/inout.csproj}} +``` + +```csharp +{{#include docs/examples/csharp/cloud-example/inout/Program.cs:insert}} +``` + + + + + +:::note + +由于 RESTful 接口无状态, 不能使用 `USE db;` 语句来切换数据库, 所以在上面示例中使用了`dbName.tbName`指定表名。 + +::: + +# \ No newline at end of file diff --git a/docs/zh/10-programming/04-query.md b/docs/zh/10-programming/04-query.md new file mode 100644 index 0000000000..be0ae73225 --- /dev/null +++ b/docs/zh/10-programming/04-query.md @@ -0,0 +1,261 @@ +--- +sidebar_label: 查询数据 +title: 查询数据 +description: "主要查询功能,通过连接器执行同步查询和异步查询" +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +## 主要查询功能 + +TDengine 采用 SQL 作为查询语言。应用程序可以通过 REST API 或连接器发送 SQL 语句,用户还可以通过 TDengine 命令行工具 taos 手动执行 SQL 即席查询(Ad-Hoc Query)。TDengine 支持如下查询功能: + +- 单列、多列数据查询 +- 标签和数值的多种过滤条件:>, <, =, <\>, like 等 +- 聚合结果的分组(Group by)、排序(Order by)、约束输出(Limit/Offset) +- 时间窗口(Interval)、会话窗口(Session)和状态窗口(State_window)等窗口切分聚合查询 +- 数值列及聚合结果的四则运算 +- 时间戳对齐的连接查询(Join Query: 隐式连接)操作 +- 多种聚合/计算函数: count, max, min, avg, sum, twa, stddev, leastsquares, top, bottom, first, last, percentile, apercentile, last_row, spread, diff 等 + +例如:在命令行工具 taos 中,从表 d1001 中查询出 voltage > 215 的记录,按时间降序排列,仅仅输出 2 条。 + +```sql title="SQL" +select * from test.d101 where voltage > 215 order by ts desc limit 2; +``` + +```txt title="output" + ts | current | voltage | phase | +====================================================================================== + 2018-10-03 14:38:16.800 | 12.30000 | 221 | 0.31000 | + 2018-10-03 14:38:15.000 | 12.60000 | 218 | 0.33000 | +Query OK, 2 row(s) in set (0.001100s) +``` + +为满足物联网场景的需求,TDengine 支持几个特殊的函数,比如 twa(时间加权平均),spread (最大值与最小值的差),last_row(最后一条记录)等,更多与物联网场景相关的函数将添加进来。 + +具体的查询语法请看 [TDengine SQL 的数据查询](https://docs.taosdata.com/cloud/taos-sql/select) 章节。 + +## 多表聚合查询 + +物联网场景中,往往同一个类型的数据采集点有多个。TDengine 采用超级表(STable)的概念来描述某一个类型的数据采集点,一张普通的表来描述一个具体的数据采集点。同时 TDengine 使用标签来描述数据采集点的静态属性,一个具体的数据采集点有具体的标签值。通过指定标签的过滤条件,TDengine 提供了一高效的方法将超级表(某一类型的数据采集点)所属的子表进行聚合查询。对普通表的聚合函数以及绝大部分操作都适用于超级表,语法完全一样。 + +### 示例一 + +在 [TDengine CLI](../../tools/cli) ,查找加利福尼亚州所有智能电表采集的电压平均值,并按照 location 分组。 + +```sql title="SQL" +SELECT AVG(voltage), location FROM test.meters GROUP BY location; +``` + +```txt title="output" + location | avg(voltage) | +======================================================= + California.PaloAlto | 109.507000000 | + California.Sunnyvale | 109.507000000 | + California.MountainView | 109.507000000 | + California.SanFrancisco | 109.507000000 | + California.SanJose | 109.507000000 | + California.SanDiego | 109.507000000 | + California.SantaClara | 109.507000000 | + California.Cupertino | 109.507000000 | + California.Campbell | 109.507000000 | + California.LosAngles | 109.507000000 | +Query OK, 10 row(s) in set +``` + +### 示例二 + +在 TDengine CLI `taos`, 查找 groupId 为 2 的所有智能电表过去24小时的记录条数和电流的最大值。 + +```sql title="SQL" +SELECT count(*), max(current) FROM test.meters where groupId = 2 and ts > now - 24h; +``` + +```txt title="output" + count(*) | max(current) | +================================== + 5 | 13.4 | +Query OK, 1 row(s) in set (0.002136s) +``` + +在 [TDengine SQL 的数据查询](https://docs.taosdata.com/cloud/taos-sql/select) 一章,查询类操作都会注明是否支持超级表。 + +## 降采样查询、插值 + +物联网场景里,经常需要通过降采样(down sampling)将采集的数据按时间段进行聚合。TDengine 提供了一个简便的关键词 interval 让按照时间窗口的查询操作变得极为简单。比如,将智能电表 d1001 采集的电流值每 10 秒钟求和 + +```sql title="SQL" +taos> SELECT _wstart, sum(current) FROM test.d1001 INTERVAL(10s); +``` + +```txt title="output" + _wstart | sum(current) | +====================================================== + 2018-10-03 14:38:00.000 | 10.300000191 | + 2018-10-03 14:38:10.000 | 24.900000572 | +Query OK, 2 rows in database (0.003139s) +``` + +降采样操作也适用于超级表,比如:将加利福尼亚州所有智能电表采集的电流值每秒钟求和 + +```sql title="SQL" +SELECT _wstart, SUM(current) FROM test.meters where location like "California%" INTERVAL(1s); +``` + +```txt title="output" + _wstart | sum(current) | +====================================================== + 2018-10-03 14:38:04.000 | 10.199999809 | + 2018-10-03 14:38:05.000 | 23.699999809 | + 2018-10-03 14:38:06.000 | 11.500000000 | + 2018-10-03 14:38:15.000 | 12.600000381 | + 2018-10-03 14:38:16.000 | 34.400000572 | +Query OK, 5 rows in database (0.007413s) +``` + +降采样操作也支持时间偏移,比如:将所有智能电表采集的电流值每秒钟求和,但要求每个时间窗口从 500 毫秒开始 + +```sql title="SQL" +SELECT _wstart, SUM(current) FROM test.meters INTERVAL(1s, 500a); +``` + +```txt title="output" + _wstart | sum(current) | +====================================================== + 2018-10-03 14:38:03.500 | 10.199999809 | + 2018-10-03 14:38:04.500 | 10.300000191 | + 2018-10-03 14:38:05.500 | 13.399999619 | + 2018-10-03 14:38:06.500 | 11.500000000 | + 2018-10-03 14:38:14.500 | 12.600000381 | + 2018-10-03 14:38:16.500 | 34.400000572 | +Query OK, 6 rows in database (0.005515s) +``` + +物联网场景里,每个数据采集点采集数据的时间是难同步的,但很多分析算法(比如 FFT)需要把采集的数据严格按照时间等间隔的对齐,在很多系统里,需要应用自己写程序来处理,但使用 TDengine 的降采样操作就轻松解决。 + +如果一个时间间隔里,没有采集的数据,TDengine 还提供插值计算的功能。 + +语法规则细节请见 [TDengine SQL 的按时间窗口切分聚合](https://docs.taosdata.com/cloud/taos-sql/interval) 章节。 + +## 连接器样例 + +:::note +在执行下面样例代码的之前,您必须首先建立和 TDengine Cloud 的连接,请参考 [连接 云服务](../../programming/connect/). + +::: + + + + +在这个例子里面,我们使用 `query` 方法去执行 SQL,然后获取 `result` 对象。 + +```python +{{#include docs/examples/python/develop_tutorial.py:query:nrc}} +``` + +从 `result` 对象里面获取列的元数据,包括列名,列类型和列的长度。 + +```python +{{#include docs/examples/python/develop_tutorial.py:fields:nrc}} +``` + +从 `result` 获得总行数: + +```python +{{#include docs/examples/python/develop_tutorial.py:rows:nrc}} +``` + +在每一行上面迭代: + +```python +{{#include docs/examples/python/develop_tutorial.py:iter}} +``` + + + + +在这个例子中,我们使用 `Statement` 对象的 `executeQuery` 方法并获取 `ResultSet` 对象。 + +```java +{{#include docs/examples/java/src/main/java/com/taos/example/CloudTutorial.java:query:nrc}} +``` + +从结果里面得到列的元数据: + +```java +{{#include docs/examples/java/src/main/java/com/taos/example/CloudTutorial.java:meta:nrc}} +``` + +在结果上面迭代打印每一行数据: +```java +{{#include docs/examples/java/src/main/java/com/taos/example/CloudTutorial.java:iter}} +``` + + + + +在这个例子中,我们使用 `Query` 方法执行 SQL 并获取了一个 `sql.Rows` 对象。 + +```go +{{#include docs/examples/go/tutorial/main.go:query:nrc}} +``` + +从结果行里面获取列名: + +```go +{{#include docs/examples/go/tutorial/main.go:meta:nrc}} +``` + +在每一行上面迭代并打印每一行数据: + +```go +{{#include docs/examples/go/tutorial/main.go:iter}} +``` + + + + +在这个例子里面,我们使用查询方法来执行 SQL ,然后获取到 result 对象。 + +```rust +{{#include docs/examples/rust/cloud-example/examples/tutorial.rs:query:nrc}} +``` + +从结果里面获取列的元数据: + +```rust +{{#include docs/examples/rust/cloud-example/examples/tutorial.rs:meta:nrc}} +``` + +获取所以的行数据并打印每一行数据: + +```rust +{{#include docs/examples/rust/cloud-example/examples/tutorial.rs:iter}} +``` + + + + +```javascript +{{#include docs/examples/node/query.js}} +``` + + + + + +在这个例子里面,我们使用查询方法来执行 SQL ,然后获取到 result 对象。 + +``` XML +{{#include docs/examples/csharp/cloud-example/inout/inout.csproj}} +``` + +```C# +{{#include docs/examples/csharp/cloud-example/inout/Program.cs:query}} +``` + + + + \ No newline at end of file diff --git a/docs/zh/10-programming/06-connector/01-python.md b/docs/zh/10-programming/06-connector/01-python.md new file mode 100644 index 0000000000..e5b2399817 --- /dev/null +++ b/docs/zh/10-programming/06-connector/01-python.md @@ -0,0 +1,109 @@ +--- +sidebar_label: Python +title: TDengine Python 连接器 +description: "taospy 是 TDengine 的官方 Python 连接器。taospy 提供了丰富的 API, 使得 Python 应用可以很方便地使用 TDengine。tasopy 对 TDengine 的原生接口和 REST 接口都进行了封装, 分别对应 tasopy 的两个子模块:taos 和 taosrest。除了对原生接口和 REST 接口的封装,taospy 还提供了符合 Python 数据访问规范(PEP 249)的编程接口。这使得 taospy 和很多第三方工具集成变得简单,比如 SQLAlchemy 和 pandas" +--- + +`taospy` 是 TDengine 的官方 Python 连接器。`taospy` 提供了丰富的 API, 使得 Python 应用可以很方便地使用 TDengine。`taospy` 对 TDengine 的[原生接口](../cpp)和 [REST 接口](../rest-api)都进行了封装, 分别对应 `taospy` 包的 `taos` 模块 和 `taosrest` 模块。 +除了对原生接口和 REST 接口的封装,`taospy` 还提供了符合 [Python 数据访问规范(PEP 249)](https://peps.python.org/pep-0249/) 的编程接口。这使得 `taospy` 和很多第三方工具集成变得简单,比如 [SQLAlchemy](https://www.sqlalchemy.org/) 和 [pandas](https://pandas.pydata.org/)。 + +Python 连接器的源码托管在 [GitHub](https://github.com/taosdata/taos-connector-python)。 + +## 安装 + +### 准备 + +1. 安装 Python。新近版本 taospy 包要求 Python 3.6+。早期版本 taospy 包要求 Python 3.7+。taos-ws-py 包要求 Python 3.7+。如果系统上还没有 Python 可参考 [Python BeginnersGuide](https://wiki.python.org/moin/BeginnersGuide/Download) 安装。 +2. 安装 [pip](https://pypi.org/project/pip/)。大部分情况下 Python 的安装包都自带了 pip 工具, 如果没有请参考 [pip documentation](https://pip.pypa.io/en/stable/installation/) 安装。 + +### 使用 pip 安装 + +```bash +pip3 install -U taospy[ws] +``` + +### 使用 conda 安装 + +```bash +conda install -c conda-forge taospy taospyws +``` + +### 安装验证 + +只需验证是否能成功导入 `taosrest` 模块。可在 Python 交互式 Shell 中输入: + +```python +import taosrest +``` + +## 建立连接 + +```python +{{#include docs/examples/python/reference_connection.py:connect}} +``` + +`connect()` 函数的所有参数都是可选的关键字参数。下面是连接参数的具体说明: + +- `url`: TDengine Cloud 的URL。 +- `token`: TDengine Cloud 的令牌. +- `timeout`: HTTP 请求超时时间。单位为秒。默认为 `socket._GLOBAL_DEFAULT_TIMEOUT`。 一般无需配置。 + +## 示例程序 + +### 使用 TaosRestConnection 类 + +```python +{{#include docs/examples/python/reference_connection.py:example}} +``` + +### 使用 TaosRestCursor 类 + +`TaosRestCursor` 类是对 PEP249 Cursor 接口的实现。 + +```python +{{#include docs/examples/python/reference_cursor.py:basic}} +``` + +- `cursor.execute` : 用来执行任意 SQL 语句。 +- `cursor.rowcount`: 对于写入操作返回写入成功记录数。对于查询操作,返回结果集行数。 +- `cursor.description` : 返回字段的描述信息。关于描述信息的具体格式请参考[TaosRestCursor](https://docs.taosdata.com/api/taospy/taosrest/cursor.html)。 + +##### RestClient 类的使用 + +`RestClient` 类是对于 [REST API](../rest-api) 的直接封装。它只包含一个 `sql()` 方法用于执行任意 SQL 语句, 并返回执行结果。 + +```python +{{#include docs/examples/python/reference_rest_client.py}} +``` + +对于 `sql()` 方法更详细的介绍, 请参考 [RestClient](https://docs.taosdata.com/api/taospy/taosrest/restclient.html)。 + +## 其它说明 + +### 异常处理 + +所有数据库操作如果出现异常,都会直接抛出来。由应用程序负责异常处理。比如: + +```python +{{#include docs/examples/python/handle_exception.py}} +``` + +### 关于纳秒 (nanosecond) + +由于目前 Python 对 nanosecond 支持的不完善(见下面的链接),目前的实现方式是在 nanosecond 精度时返回整数,而不是 ms 和 us 返回的 datetime 类型,应用开发者需要自行处理,建议使用 pandas 的 to_datetime()。未来如果 Python 正式完整支持了纳秒,Python 连接器可能会修改相关接口。 + +1. https://stackoverflow.com/questions/10611328/parsing-datetime-strings-containing-nanoseconds +2. https://www.python.org/dev/peps/pep-0564/ + +## 重要更新 + +[**Release Notes**](https://github.com/taosdata/taos-connector-python/releases) + +## API 参考 + +- [taos](https://docs.taosdata.com/api/taospy/taos/) +- [taosrest](https://docs.taosdata.com/api/taospy/taosrest) + +## 常见问题 + +欢迎[提问或报告问题](https://github.com/taosdata/taos-connector-python/issues)。 diff --git a/docs/zh/10-programming/06-connector/02-java.md b/docs/zh/10-programming/06-connector/02-java.md new file mode 100644 index 0000000000..9db93699a6 --- /dev/null +++ b/docs/zh/10-programming/06-connector/02-java.md @@ -0,0 +1,347 @@ +--- +toc_max_heading_level: 4 +sidebar_label: Java +title: TDengine Java Connector +description: TDengine Java 连接器基于标准 JDBC API 实现, 并提供原生连接与 REST连接两种连接器。 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +`taos-jdbcdriver` 是 TDengine 的官方 Java 语言连接器,Java 开发人员可以通过它开发存取 TDengine 数据库的应用软件。`taos-jdbcdriver` 实现了 JDBC driver 标准的接口,通过 REST 接口连接 TDengine 实例。 + +## TDengine DataType 和 Java DataType + +TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对应类型转换如下: + +| TDengine DataType | JDBCType | +| ----------------- | ---------------------------------- | +| TIMESTAMP | java.sql.Timestamp | +| INT | java.lang.Integer | +| BIGINT | java.lang.Long | +| FLOAT | java.lang.Float | +| DOUBLE | java.lang.Double | +| SMALLINT | java.lang.Short | +| TINYINT | java.lang.Byte | +| BOOL | java.lang.Boolean | +| BINARY | byte array | +| NCHAR | java.lang.String | +| JSON | java.lang.String | + +**注意**:JSON 类型仅在 tag 中支持。 + +## 安装步骤 + +### 安装前准备 + +使用 Java Connector 连接数据库前,需要具备以下条件: + +- 已安装 Java 1.8 或以上版本运行时环境和 Maven 3.6 或以上版本 +- 已安装 TDengine 客户端驱动(使用原生连接必须安装,使用 REST 连接无需安装),具体步骤请参考[安装客户端驱动](../#安装客户端驱动) + +### 安装连接器 + + + + +目前 taos-jdbcdriver 已经发布到 [Sonatype Repository](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) 仓库,且各大仓库都已同步。 + +- [sonatype](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) +- [mvnrepository](https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver) +- [maven.aliyun](https://maven.aliyun.com/mvn/search) + +Maven 项目中,在 pom.xml 中添加以下依赖: + +```xml-dtd + + com.taosdata.jdbc + taos-jdbcdriver + 3.0.0 + +``` + + + + +可以通过下载 TDengine 的源码,自己编译最新版本的 Java connector + +```shell +git clone https://github.com/taosdata/taos-connector-jdbc.git +cd taos-connector-jdbc +mvn clean install -Dmaven.test.skip=true +``` + +编译后,在 target 目录下会产生 taos-jdbcdriver-3.0.*-dist.jar 的 jar 包,并自动将编译的 jar 文件放在本地的 Maven 仓库中。 + + + + +## 建立连接 + +TDengine 的 JDBC URL 规范格式为: +`jdbc:TAOS-RS://[host_name]:[port]/[database_name]?batchfetch={true|false}&useSSL={true|false}&token={token}&httpPoolSize={httpPoolSize}&httpKeepAlive={true|false}]&httpConnectTimeout={httpTimeout}&httpSocketTimeout={socketTimeout}` + +```java +Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); +String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata"; +Connection conn = DriverManager.getConnection(jdbcUrl); +``` + +:::note + +- REST 接口是无状态的。在使用 JDBC REST 连接时,需要在 SQL 中指定表、超级表的数据库名称。例如: + +```sql +INSERT INTO test.t1 USING test.weather (ts, temperature) TAGS('California.SanFrancisco') VALUES(now, 24.6); +``` + +- 如果在 URL 中指定了 dbname,那么 JDBC REST 连接会默认使用 `/rest/sql/dbname` 作为 restful 请求的 URL,在 SQL 中不需要指定 dbname。例如:URL 为 jdbc:TAOS-RS://127.0.0.1:6041/test,那么,可以执行 SQL: + + ```sql + insert into t1 using weather(ts, temperature) tags('California.SanFrancisco') values(now, 24.6); + ``` + +::: + +### 指定 URL 和 Properties 获取连接 + +除了通过指定的 URL 获取连接,还可以使用 Properties 指定建立连接时的参数。 + +**注意**: + +- 应用中设置的 client parameter 为进程级别的,即如果要更新 client 的参数,需要重启应用。这是因为 client parameter 是全局参数,仅在应用程序的第一次设置生效。 +- 以下示例代码基于 taos-jdbcdriver-3.0.0。 + +```java +public Connection getRestConn() throws Exception{ + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + String jdbcUrl = System.getenv("TDENGINE_JDBC_URL"); + Properties connProps = new Properties(); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_BATCH_LOAD, "true"); + Connection conn = DriverManager.getConnection(jdbcUrl, connProps); + return conn; +} +``` + +### 配置参数的优先级 + +通过前面三种方式获取连接,如果配置参数在 url、Properties、客户端配置文件中有重复,则参数的`优先级由高到低`分别如下: + +1. JDBC URL 参数,如上所述,可以在 JDBC URL 的参数中指定。 +2. Properties connProps + +## 使用示例 + +### 创建数据库和表 + +```java +Statement stmt = conn.createStatement(); + +// create database +stmt.executeUpdate("create database if not exists db"); + +// use database +stmt.executeUpdate("use db"); + +// create table +stmt.executeUpdate("create table if not exists tb (ts timestamp, temperature int, humidity float)"); +``` + +### 插入数据 + +```java +// insert data +int affectedRows = stmt.executeUpdate("insert into tb values(now, 23, 10.3) (now + 1s, 20, 9.3)"); + +System.out.println("insert " + affectedRows + " rows."); +``` + +> `now` 为系统内部函数,默认为客户端所在计算机当前时间。 +> `now + 1s` 代表客户端当前时间往后加 1 秒,数字后面代表时间单位:a(毫秒),s(秒),m(分),h(小时),d(天),w(周),n(月),y(年)。 + +### 查询数据 + +```java +// query data +ResultSet resultSet = stmt.executeQuery("select * from tb"); + +Timestamp ts = null; +int temperature = 0; +float humidity = 0; +while(resultSet.next()){ + + ts = resultSet.getTimestamp(1); + temperature = resultSet.getInt(2); + humidity = resultSet.getFloat("humidity"); + + System.out.printf("%s, %d, %s\n", ts, temperature, humidity); +} +``` + +> 查询和操作关系型数据库一致,使用下标获取返回字段内容时从 1 开始,建议使用字段名称获取。 + +### 处理异常 + +在报错后,通过 SQLException 可以获取到错误的信息和错误码: + +```java +try (Statement statement = connection.createStatement()) { + // executeQuery + ResultSet resultSet = statement.executeQuery(sql); + // print result + printResult(resultSet); +} catch (SQLException e) { + System.out.println("ERROR Message: " + e.getMessage()); + System.out.println("ERROR Code: " + e.getErrorCode()); + e.printStackTrace(); +} +``` + +JDBC 连接器可能报错的错误码包括 3 种:JDBC driver 本身的报错(错误码在 0x2301 到 0x2350 之间),原生连接方法的报错(错误码在 0x2351 到 0x2400 之间),TDengine 其他功能模块的报错。 + +具体的错误码请参考: + +- [TDengine Java Connector](https://github.com/taosdata/taos-connector-jdbc/blob/main/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java) + +### 关闭资源 + +```java +resultSet.close(); +stmt.close(); +conn.close(); +``` + +:::note + 请确保关闭连接,否则会造成连接池泄露。 +::: + +### 与连接池使用 + +#### HikariCP + +使用示例如下: + +```java + public static void main(String[] args) throws SQLException { + HikariConfig config = new HikariConfig(); + // jdbc properties + config.setJdbcUrl("jdbc:TAOS://127.0.0.1:6030/log"); + config.setUsername("root"); + config.setPassword("taosdata"); + // connection pool configurations + config.setMinimumIdle(10); //minimum number of idle connection + config.setMaximumPoolSize(10); //maximum number of connection in the pool + config.setConnectionTimeout(30000); //maximum wait milliseconds for get connection from pool + config.setMaxLifetime(0); // maximum life time for each connection + config.setIdleTimeout(0); // max idle time for recycle idle connection + config.setConnectionTestQuery("select server_status()"); //validation query + + HikariDataSource ds = new HikariDataSource(config); //create datasource + + Connection connection = ds.getConnection(); // get connection + Statement statement = connection.createStatement(); // get statement + + //query or insert + // ... + + connection.close(); // put back to connection pool +} +``` + +> 通过 HikariDataSource.getConnection() 获取连接后,使用完成后需要调用 close() 方法,实际上它并不会关闭连接,只是放回连接池中。 +> 更多 HikariCP 使用问题请查看[官方说明](https://github.com/brettwooldridge/HikariCP)。 + +#### Druid + +使用示例如下: + +```java +public static void main(String[] args) throws Exception { + + DruidDataSource dataSource = new DruidDataSource(); + // jdbc properties + dataSource.setDriverClassName("com.taosdata.jdbc.TSDBDriver"); + dataSource.setUrl(url); + dataSource.setUsername("root"); + dataSource.setPassword("taosdata"); + // pool configurations + dataSource.setInitialSize(10); + dataSource.setMinIdle(10); + dataSource.setMaxActive(10); + dataSource.setMaxWait(30000); + dataSource.setValidationQuery("select server_status()"); + + Connection connection = dataSource.getConnection(); // get connection + Statement statement = connection.createStatement(); // get statement + //query or insert + // ... + + connection.close(); // put back to connection pool +} +``` + +> 更多 druid 使用问题请查看[官方说明](https://github.com/alibaba/druid)。 + +### 更多示例程序 + +示例程序源码位于 `TDengine/examples/JDBC` 下: + +- JDBCDemo:JDBC 示例源程序。 +- JDBCConnectorChecker:JDBC 安装校验源程序及 jar 包。 +- connectionPools:HikariCP, Druid, dbcp, c3p0 等连接池中使用 taos-jdbcdriver。 +- SpringJdbcTemplate:Spring JdbcTemplate 中使用 taos-jdbcdriver。 +- mybatisplus-demo:Springboot + Mybatis 中使用 taos-jdbcdriver。 + +请参考:[JDBC example](https://github.com/taosdata/TDengine/tree/3.0/examples/JDBC) + +## 最近更新记录 + +| taos-jdbcdriver 版本 | 主要变化 | +| :------------------: | :----------------------------: | +| 3.0.3 | 修复 REST 连接在 jdk17+ 版本时间戳解析错误问题 | +| 3.0.1 - 3.0.2 | 修复一些情况下结果集数据解析错误的问题。3.0.1 在 JDK 11 环境编译,JDK 8 环境下建议使用 3.0.2 版本 | +| 3.0.0 | 支持 TDengine 3.0 | +| 2.0.42 | 修在 WebSocket 连接中 wasNull 接口返回值 | +| 2.0.41 | 修正 REST 连接中用户名和密码转码方式 | +| 2.0.39 - 2.0.40 | 增加 REST 连接/请求 超时设置 | +| 2.0.38 | JDBC REST 连接增加批量拉取功能 | +| 2.0.37 | 增加对 json tag 支持 | +| 2.0.36 | 增加对 schemaless 写入支持 | + +## 常见问题 + +1. 使用 Statement 的 `addBatch()` 和 `executeBatch()` 来执行“批量写入/更新”,为什么没有带来性能上的提升? + +**原因**:TDengine 的 JDBC 实现中,通过 `addBatch` 方法提交的 SQL 语句,会按照添加的顺序,依次执行,这种方式没有减少与服务端的交互次数,不会带来性能上的提升。 + +**解决方法**:1. 在一条 insert 语句中拼接多个 values 值;2. 使用多线程的方式并发插入;3. 使用参数绑定的写入方式 + +2. java.lang.UnsatisfiedLinkError: no taos in java.library.path + +**原因**:程序没有找到依赖的本地函数库 taos。 + +**解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可,macOS 下需要建立软链 `ln -s /usr/local/lib/libtaos.dylib`。 + +3. java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform + +**原因**:目前 TDengine 只支持 64 位 JDK。 + +**解决方法**:重新安装 64 位 JDK。 + +4. java.lang.NoSuchMethodError: setByteArray + +**原因**:taos-jdbcdriver 3.* 版本仅支持 TDengine 3.0 及以上版本。 + +**解决方法**: 使用 taos-jdbcdriver 2.* 版本连接 TDengine 2.* 版本。 + +5. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar + +**原因**:taos-jdbcdriver 3.0.1 版本需要在 JDK 11+ 环境使用。 + +**解决方法**: 更换 taos-jdbcdriver 3.0.2+ 版本。 + +其它问题请参考 [FAQ](../../../train-faq/faq) + +## API 参考 + +[taos-jdbcdriver doc](https://docs.taosdata.com/api/taos-jdbcdriver) diff --git a/docs/zh/10-programming/06-connector/03-go.md b/docs/zh/10-programming/06-connector/03-go.md new file mode 100644 index 0000000000..ff556b0c12 --- /dev/null +++ b/docs/zh/10-programming/06-connector/03-go.md @@ -0,0 +1,200 @@ +--- +toc_max_heading_level: 4 +sidebar_position: 4 +sidebar_label: Go +title: TDengine Go Connector +--- + +`driver-go` 是 TDengine 的官方 Go 语言连接器,实现了 Go 语言 [database/sql](https://golang.org/pkg/database/sql/) 包的接口。Go 开发人员可以通过它开发存取 TDengine 集群数据的应用软件。 + +本文介绍如何安装 `driver-go`,并通过 `driver-go` 连接 TDengine Cloud 集群、进行数据查询、数据写入等基本操作。 + +`driver-go` 的源码托管在 [GitHub](https://github.com/taosdata/driver-go)。 + +## 版本支持 + +请参考[版本支持列表](../#版本支持) + +## 安装步骤 + +### 安装前准备 + +* 安装 Go 开发环境(Go 1.14 及以上,GCC 4.8.5 及以上) +* 如果使用原生连接器,请安装 TDengine 客户端驱动,具体步骤请参考[安装客户端驱动](../#安装客户端驱动) + +配置好环境变量,检查命令: + +* ```go env``` +* ```gcc -v``` + +### 使用 go get 安装 + +`go get -u github.com/taosdata/driver-go/v3@latest` + +### 使用 go mod 管理 + +1. 使用 `go mod` 命令初始化项目: + + ```text + go mod init taos-demo + ``` + +2. 引入 taosSql : + + ```go + import ( + "database/sql" + _ "github.com/taosdata/driver-go/v3/taosSql" + ) + ``` + +3. 使用 `go mod tidy` 更新依赖包: + + ```text + go mod tidy + ``` + +4. 使用 `go run taos-demo` 运行程序或使用 `go build` 命令编译出二进制文件。 + + ```text + go run taos-demo + go build + ``` + +## 建立连接 + +### 数据源名称(DSN) + +数据源名称具有通用格式,例如 [PEAR DB](http://pear.php.net/manual/en/package.database.db.intro-dsn.php),但没有类型前缀(方括号表示可选): + +``` text +[username[:password]@][protocol[(address)]]/[dbname][?param1=value1&...¶mN=valueN] +``` + +完整形式的 DSN: + +```text +username:password@protocol(address)/dbname?param=value +``` + +### 使用连接器进行连接 + +_taosRestful_ 通过 `http client` 实现了 Go 的 `database/sql/driver` 接口。只需要引入驱动就可以使用[`database/sql`](https://golang.org/pkg/database/sql/)的接口。 + +使用 `taosRestful` 作为 `driverName` 并且使用一个正确的 [DSN](#DSN) 作为 `dataSourceName`,DSN 支持的参数: + +* `disableCompression` 是否接受压缩数据,默认为 true 不接受压缩数据,如果传输数据使用 gzip 压缩设置为 false。 +* `readBufferSize` 读取数据的缓存区大小默认为 4K(4096),当查询结果数据量多时可以适当调大该值。 + +## 使用示例 + +### 更多示例程序 + +* [示例程序](https://github.com/taosdata/driver-go/tree/3.0/examples) +* [视频教程](https://www.taosdata.com/blog/2020/11/11/1951.html)。 + +## 使用限制 + +由于 REST 接口无状态所以 `use db` 语法不会生效,需要将 db 名称放到 SQL 语句中,如:`create table if not exists tb1 (ts timestamp, a int)`改为`create table if not exists test.tb1 (ts timestamp, a int)`否则将报错`[0x217] Database not specified or available`。 + +也可以将 db 名称放到 DSN 中,将 `root:taosdata@http(localhost:6041)/` 改为 `root:taosdata@http(localhost:6041)/test`。当指定的 db 不存在时执行 `create database` 语句不会报错,而执行针对该 db 的其他查询或写入操作会报错。 + +完整示例如下: + +```go +package main + +import ( + "database/sql" + "fmt" + "time" + + _ "github.com/taosdata/driver-go/v3/taosRestful" +) + +func main() { + var taosDSN = "root:taosdata@http(localhost:6041)/test" + taos, err := sql.Open("taosRestful", taosDSN) + if err != nil { + fmt.Println("failed to connect TDengine, err:", err) + return + } + defer taos.Close() + taos.Exec("create database if not exists test") + taos.Exec("create table if not exists tb1 (ts timestamp, a int)") + _, err = taos.Exec("insert into tb1 values(now, 0)(now+1s,1)(now+2s,2)(now+3s,3)") + if err != nil { + fmt.Println("failed to insert, err:", err) + return + } + rows, err := taos.Query("select * from tb1") + if err != nil { + fmt.Println("failed to select from table, err:", err) + return + } + + defer rows.Close() + for rows.Next() { + var r struct { + ts time.Time + a int + } + err := rows.Scan(&r.ts, &r.a) + if err != nil { + fmt.Println("scan error:\n", err) + return + } + fmt.Println(r.ts, r.a) + } +} +``` + +## 常见问题 + +1. database/sql 中 stmt(参数绑定)相关接口崩溃 + + REST 不支持参数绑定相关接口,建议使用`db.Exec`和`db.Query`。 + +2. 使用 `use db` 语句后执行其他语句报错 `[0x217] Database not specified or available` + + 在 REST 接口中 SQL 语句的执行无上下文关联,使用 `use db` 语句不会生效,解决办法见上方使用限制章节。 + +3. 使用 taosSql 不报错使用 taosRestful 报错 `[0x217] Database not specified or available` + + 因为 REST 接口无状态,使用 `use db` 语句不会生效,解决办法见上方使用限制章节。 + +4. `readBufferSize` 参数调大后无明显效果 + + `readBufferSize` 调大后会减少获取结果时 `syscall` 的调用。如果查询结果的数据量不大,修改该参数不会带来明显提升,如果该参数修改过大,瓶颈会在解析 JSON 数据。如果需要优化查询速度,需要根据实际情况调整该值来达到查询效果最优。 + +5. `disableCompression` 参数设置为 `false` 时查询效率降低 + + 当 `disableCompression` 参数设置为 `false` 时查询结果会使用 `gzip` 压缩后传输,拿到数据后要先进行 `gzip` 解压。 + +6. `go get` 命令无法获取包,或者获取包超时 + + 设置 Go 代理 `go env -w GOPROXY=https://goproxy.cn,direct`。 + +## 常用 API + +### database/sql API + +* `sql.Open(DRIVER_NAME string, dataSourceName string) *DB` + + 该 API 用来打开 DB,返回一个类型为 \*DB 的对象。 + +:::info +该 API 成功创建的时候,并没有做权限等检查,只有在真正执行 Query 或者 Exec 的时候才能真正的去创建连接,并同时检查 user/password/host/port 是不是合法。 +::: + +* `func (db *DB) Exec(query string, args ...interface{}) (Result, error)` + + `sql.Open` 内置的方法,用来执行非查询相关 SQL。 + +* `func (db *DB) Query(query string, args ...interface{}) (*Rows, error)` + + `sql.Open` 内置的方法,用来执行查询语句。 + +## API 参考 + +全部 API 见 [driver-go 文档](https://pkg.go.dev/github.com/taosdata/driver-go/v3) diff --git a/docs/zh/10-programming/06-connector/04-rust.md b/docs/zh/10-programming/06-connector/04-rust.md new file mode 100644 index 0000000000..7694381c74 --- /dev/null +++ b/docs/zh/10-programming/06-connector/04-rust.md @@ -0,0 +1,226 @@ +--- +toc_max_heading_level: 4 +sidebar_position: 5 +sidebar_label: Rust +title: TDengine Rust Connector +--- + +[![Crates.io](https://img.shields.io/crates/v/taos)](https://crates.io/crates/taos) ![Crates.io](https://img.shields.io/crates/d/taos) [![docs.rs](https://img.shields.io/docsrs/taos)](https://docs.rs/taos) + +`taos` 是 TDengine 的官方 Rust 语言连接器。Rust 开发人员可以通过它开发存取 TDengine 数据库的应用软件。 + +该 Rust 连接器的源码托管在 [GitHub](https://github.com/taosdata/taos-connector-rust)。 + +## 版本支持 + +请参考[版本支持列表](../#版本支持) + +Rust 连接器仍然在快速开发中,1.0 之前无法保证其向后兼容。建议使用 3.0 版本以上的 TDengine,以避免已知问题。 + +## 安装 + +### 安装前准备 + +安装 Rust 开发工具链 + +### 添加 taos 依赖 + +根据选择的连接方式,按照如下说明在 [Rust](https://rust-lang.org) 项目中添加 [taos][taos] 依赖: + +在 `Cargo.toml` 文件中添加 [taos][taos]: + +```toml +[dependencies] +# use default feature +taos = "*" +``` + +## 建立连接 + +[TaosBuilder] 通过 DSN 连接描述字符串创建一个连接构造器。DSN 有下面的格式组成`://[:port]?token=`。 + +```rust +let builder = TaosBuilder::from_dsn(DSN)?; +``` + +现在您可以使用该对象创建连接: + +```rust +let conn = builder.build()?; +``` + +连接对象可以创建多个: + +```rust +let conn1 = builder.build()?; +let conn2 = builder.build()?; +``` + +建立连接后,您可以进行相关数据库操作: + +```rust +async fn demo(taos: &Taos, db: &str) -> Result<(), Error> { + // prepare database + taos.exec_many([ + format!("DROP DATABASE IF EXISTS `{db}`"), + format!("CREATE DATABASE `{db}`"), + format!("USE `{db}`"), + ]) + .await?; + + let inserted = taos.exec_many([ + // create super table + "CREATE TABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT, `phase` FLOAT) \ + TAGS (`groupid` INT, `location` BINARY(24))", + // create child table + "CREATE TABLE `d0` USING `meters` TAGS(0, 'California.LosAngles')", + // insert into child table + "INSERT INTO `d0` values(now - 10s, 10, 116, 0.32)", + // insert with NULL values + "INSERT INTO `d0` values(now - 8s, NULL, NULL, NULL)", + // insert and automatically create table with tags if not exists + "INSERT INTO `d1` USING `meters` TAGS(1, 'California.SanFrancisco') values(now - 9s, 10.1, 119, 0.33)", + // insert many records in a single sql + "INSERT INTO `d1` values (now-8s, 10, 120, 0.33) (now - 6s, 10, 119, 0.34) (now - 4s, 11.2, 118, 0.322)", + ]).await?; + + assert_eq!(inserted, 6); + let mut result = taos.query("select * from `meters`").await?; + + for field in result.fields() { + println!("got field: {}", field.name()); + } + + let values = result. +} +``` + +## API 参考 + +### 连接池 + +在复杂应用中,建议启用连接池。[taos] 的连接池使用 [r2d2] 实现。 + +如下,可以生成一个默认参数的连接池。 + +```rust +let pool = TaosBuilder::from_dsn(dsn)?.pool()?; +``` + +同样可以使用连接池的构造器,对连接池参数进行设置: + +```rust +let dsn = "taos://localhost:6030"; + +let opts = PoolBuilder::new() + .max_size(5000) // max connections + .max_lifetime(Some(Duration::from_secs(60 * 60))) // lifetime of each connection + .min_idle(Some(1000)) // minimal idle connections + .connection_timeout(Duration::from_secs(2)); + +let pool = TaosBuilder::from_dsn(dsn)?.with_pool_builder(opts)?; +``` + +在应用代码中,使用 `pool.get()?` 来获取一个连接对象 [Taos]。 + +```rust +let taos = pool.get()?; +``` + +### 连接 + +[Taos][struct.Taos] 对象提供了多个数据库操作的 API: + +1. `exec`: 执行某个非查询类 SQL 语句,例如 `CREATE`,`ALTER`,`INSERT` 等。 + + ```rust + let affected_rows = taos.exec("INSERT INTO tb1 VALUES(now, NULL)").await?; + ``` + +2. `exec_many`: 同时(顺序)执行多个 SQL 语句。 + + ```rust + taos.exec_many([ + "CREATE DATABASE test", + "USE test", + "CREATE TABLE `tb1` (`ts` TIMESTAMP, `val` INT)", + ]).await?; + ``` + +3. `query`:执行查询语句,返回 [ResultSet] 对象。 + + ```rust + let mut q = taos.query("select * from log.logs").await?; + ``` + + [ResultSet] 对象存储了查询结果数据和返回的列的基本信息(列名,类型,长度): + + 列信息使用 [.fields()] 方法获取: + + ```rust + let cols = q.fields(); + for col in cols { + println!("name: {}, type: {:?} , bytes: {}", col.name(), col.ty(), col.bytes()); + } + ``` + + 逐行获取数据: + + ```rust + let mut rows = result.rows(); + let mut nrows = 0; + while let Some(row) = rows.try_next().await? { + for (col, (name, value)) in row.enumerate() { + println!( + "[{}] got value in col {} (named `{:>8}`): {}", + nrows, col, name, value + ); + } + nrows += 1; + } + ``` + + 或使用 [serde](https://serde.rs) 序列化框架。 + + ```rust + #[derive(Debug, Deserialize)] + struct Record { + // deserialize timestamp to chrono::DateTime + ts: DateTime, + // float to f32 + current: Option, + // int to i32 + voltage: Option, + phase: Option, + groupid: i32, + // binary/varchar to String + location: String, + } + + let records: Vec = taos + .query("select * from `meters`") + .await? + .deserialize() + .try_collect() + .await?; + ``` + +需要注意的是,需要使用 Rust 异步函数和异步运行时。 + +[Taos][struct.Taos] 提供部分 SQL 的 Rust 方法化以减少 `format!` 代码块的频率: + +- `.describe(table: &str)`: 执行 `DESCRIBE` 并返回一个 Rust 数据结构。 +- `.create_database(database: &str)`: 执行 `CREATE DATABASE` 语句。 +- `.use_database(database: &str)`: 执行 `USE` 语句。 + +除此之外,该结构也是 [参数绑定](#参数绑定接口) 和 [行协议接口](#行协议接口) 的入口,使用方法请参考具体的 API 说明。 + + +其他相关结构体 API 使用说明请移步 Rust 文档托管网页:。 + +[taos]: https://github.com/taosdata/rust-connector-taos +[r2d2]: https://crates.io/crates/r2d2 +[TaosBuilder]: https://docs.rs/taos/latest/taos/struct.TaosBuilder.html +[TaosCfg]: https://docs.rs/taos/latest/taos/struct.TaosCfg.html +[struct.Taos]: https://docs.rs/taos/latest/taos/struct.Taos.html +[Stmt]: https://docs.rs/taos/latest/taos/struct.Stmt.html diff --git a/docs/zh/10-programming/06-connector/05-node.md b/docs/zh/10-programming/06-connector/05-node.md new file mode 100644 index 0000000000..2e7fe0d18c --- /dev/null +++ b/docs/zh/10-programming/06-connector/05-node.md @@ -0,0 +1,75 @@ +--- +toc_max_heading_level: 4 +sidebar_label: Node.js +title: TDengine Node.js Connector +--- + +`@tdengine/rest` 是 TDengine 的官方 Node.js 语言连接器。 Node.js 开发人员可以通过它开发可以存取 TDengine 集群数据的应用软件。另外`@tdengine/rest` 是 **REST 连接器**,它通过 REST 接口连接 TDengine 的运行实例。 + +Node.js 连接器源码托管在 [GitHub](https://github.com/taosdata/taos-connector-node/tree/3.0)。 + +## 版本支持 + +请参考[版本支持列表](../#版本支持) + +## 安装步骤 + +### 安装前准备 + +### 使用 npm 安装 + +```bash +npm install @tdengine/rest +``` + +## 建立连接 + +```javascript +{{#include docs/examples/node/connect.js}} +``` + +## 更多示例程序 + +```javascript +{{#include docs/examples/node/reference_example.js:usage}} +``` + +## 常见问题 + +1. 使用 REST 连接需要启动 taosadapter。 + + ```bash + sudo systemctl start taosadapter + ``` + +2. Node.js 版本 + + 原生连接器 `@tdengine/client` 目前兼容的 Node.js 版本为:>=v10.20.0 <= v10.9.0 || >=v12.8.0 <= v12.9.1 + +3. "Unable to establish connection","Unable to resolve FQDN" + + 一般都是因为配置 FQDN 不正确。 可以参考[如何彻底搞懂 TDengine 的 FQDN](https://www.taosdata.com/blog/2021/07/29/2741.html) 。 + +## 重要更新记录 + +### 原生连接器 + +| package name | version | TDengine version | 说明 | +|------------------|---------|---------------------|------------------------------------------------------------------| +| @tdengine/client | 3.0.0 | 3.0.0 | 支持TDengine 3.0 且不与2.x 兼容。 | +| td2.0-connector | 2.0.12 | 2.4.x;2.5.x;2.6.x | 修复 cursor.close() 报错的 bug。 | +| td2.0-connector | 2.0.11 | 2.4.x;2.5.x;2.6.x | 支持绑定参数、json tag、schemaless 接口等功能。 | +| td2.0-connector | 2.0.10 | 2.4.x;2.5.x;2.6.x | 支持连接管理,普通查询、连续查询、获取系统信息、订阅功能等功能。 | +### REST 连接器 + +| package name | version | TDengine version | 说明 | +|----------------------|---------|---------------------|---------------------------------------------------------------------------| +| @tdengine/rest | 3.0.0 | 3.0.0 | 支持 TDegnine 3.0,且不与2.x 兼容。 | +| td2.0-rest-connector | 1.0.7 | 2.4.x;2.5.x;2.6.x | 移除默认端口 6041。 | +| td2.0-rest-connector | 1.0.6 | 2.4.x;2.5.x;2.6.x | 修复create,insert,update,alter 等SQL 执行返回的 affectRows 错误的bug。 | +| td2.0-rest-connector | 1.0.5 | 2.4.x;2.5.x;2.6.x | 支持云服务 cloud Token; | +| td2.0-rest-connector | 1.0.3 | 2.4.x;2.5.x;2.6.x | 支持连接管理、普通查询、获取系统信息、错误信息、连续查询等功能。 | + +## API 参考 + +[API 参考](https://docs.taosdata.com/api/td2.0-connector/) diff --git a/docs/zh/10-programming/06-connector/06-csharp.md b/docs/zh/10-programming/06-connector/06-csharp.md new file mode 100644 index 0000000000..36bf54ad82 --- /dev/null +++ b/docs/zh/10-programming/06-connector/06-csharp.md @@ -0,0 +1,100 @@ +--- +toc_max_heading_level: 4 +sidebar_label: C# +title: C# Connector +--- + +`TDengine.Connector` 是 TDengine 提供的 C# 语言连接器。C# 开发人员可以通过它开发存取 TDengine 集群数据的 C# 应用软件。 + +本文介绍如何在 Linux 或 Windows 环境中安装 `TDengine.Connector`,并通过 `TDengine.Connector` 连接 TDengine 集群,进行数据写入、查询等基本操作。 + +`TDengine.Connector` 的源码托管在 [GitHub](https://github.com/taosdata/taos-connector-dotnet/tree/3.0)。 + +## 版本支持 + +请参考[版本支持列表](../#版本支持) + +## 安装步骤 + +### 安装前准备 + +* 安装 [.NET SDK](https://dotnet.microsoft.com/download) +* [Nuget 客户端](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools) (可选安装) +* 安装 TDengine 客户端驱动,具体步骤请参考[安装客户端驱动](../#安装客户端驱动) + +### 安装 TDengine.Connector + +### 通过 Nuget 增加`TDengine.Connector`包 + +```bash +dotnet add package TDengine.Connector +``` + +## 建立连接 + +``` XML +{{#include docs/examples/csharp/cloud-example/connect/connect.csproj}} +``` + +``` csharp +{{#include docs/examples/csharp/cloud-example/connect/Program.cs}} +``` + +## 使用示例 + +### 基本插入和查询 + +``` XML +{{#include docs/examples/csharp/cloud-example/usage/usage.csproj}} +``` + +```C# +{{#include docs/examples/csharp/cloud-example/usage/Program.cs}} +``` + +### STMT 插入 + +``` XML +{{#include docs/examples/csharp/cloud-example/stmt/stmt.csproj}} +``` + +```C# +{{#include docs/examples/csharp/cloud-example/stmt/Program.cs}} +``` + +## 重要更新记录 + +| TDengine.Connector | 说明 | +|--------------------|--------------------------------| +| 3.0.2 | 支持 .NET Framework 4.5 及以上,支持 .NET standard 2.0。Nuget Package 包含 WebSocket 动态库。 | +| 3.0.1 | 支持 WebSocket 和 Cloud,查询,插入,参数绑定。 | +| 3.0.0 | 支持 TDengine 3.0.0.0,不兼容 2.x。新增接口TDengine.Impl.GetData(),解析查询结果。 | +| 1.0.7 | 修复 TDengine.Query()内存泄露。 | +| 1.0.6 | 修复 schemaless 在 1.0.4 和 1.0.5 中失效 bug。 | +| 1.0.5 | 修复 Windows 同步查询中文报错 bug。 | +| 1.0.4 | 新增异步查询,订阅等功能。修复绑定参数 bug。 | +| 1.0.3 | 新增参数绑定、schemaless、 json tag等功能。 | +| 1.0.2 | 新增连接管理、同步查询、错误信息等功能。 | + +## 其他说明 + +### 第三方驱动 + +[`IoTSharp.Data.Taos`](https://github.com/IoTSharp/EntityFrameworkCore.Taos) 是一个 TDengine 的 ADO.NET 连接器,其中包含了用于EntityFrameworkCore 的提供程序 IoTSharp.EntityFrameworkCore.Taos 和健康检查组件 IoTSharp.HealthChecks.Taos ,支持 Linux,Windows 平台。该连接器由社区贡献者`麦壳饼@@maikebing` 提供,具体请参考: + +* 接口下载: +* 用法说明: + +## 常见问题 + +1. "Unable to establish connection","Unable to resolve FQDN" + + 一般是因为 FQDN 配置不正确。可以参考[如何彻底搞懂 TDengine 的 FQDN](https://www.taosdata.com/blog/2021/07/29/2741.html)解决。 + +2. Unhandled exception. System.DllNotFoundException: Unable to load DLL 'taos' or one of its dependencies: 找不到指定的模块。 + + 一般是因为程序没有找到依赖的客户端驱动。解决方法为:Windows 下可以将 `C:\TDengine\driver\taos.dll` 拷贝到 `C:\Windows\System32\ ` 目录下,Linux 下建立如下软链接 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可。 + +## API 参考 + +[API 参考](https://docs.taosdata.com/api/connector-csharp/html/860d2ac1-dd52-39c9-e460-0829c4e5a40b.htm) diff --git a/docs/zh/10-programming/06-connector/09-rest-api.md b/docs/zh/10-programming/06-connector/09-rest-api.md new file mode 100644 index 0000000000..97585d9374 --- /dev/null +++ b/docs/zh/10-programming/06-connector/09-rest-api.md @@ -0,0 +1,306 @@ +--- +title: REST API +sidebar_label: REST API +description: 详细介绍 TDengine 提供的 RESTful API. +--- + +为支持各种不同类型平台的开发,TDengine 提供符合 RESTful 设计标准的 API,即 REST API。为最大程度降低学习成本,不同于其他数据库 REST API 的设计方法,TDengine 直接通过 HTTP POST 请求 BODY 中包含的 SQL 语句来操作数据库,仅需要一个 URL。 + +:::note +与原生连接器的一个区别是,RESTful 接口是无状态的,因此 `USE db_name` 指令没有效果,所有对表名、超级表名的引用都需要指定数据库名前缀。支持在 RESTful URL 中指定 db_name,这时如果 SQL 语句中没有指定数据库名前缀的话,会使用 URL 中指定的这个 db_name。 +::: + +## 安装 + +RESTful 接口不依赖于任何 TDengine 的库,因此客户端不需要安装任何 TDengine 的库,只要客户端的开发语言支持 HTTP 协议即可。TDengine 的 RESTful API 由 [taosAdapter](../../reference/taosadapter) 提供,在使用 RESTful API 之前需要确保 `taosAdapter` 正常运行。 + +## 验证 + +在已经安装 TDengine 服务器端的情况下,可以按照如下方式进行验证。 + +下面以 Ubuntu 环境中使用 `curl` 工具(请确认已经安装)来验证 RESTful 接口是否工作正常,验证前请确认 taosAdapter 服务已开启,在 Linux 系统上此服务默认由 systemd 管理,使用命令 `systemctl start taosadapter` 启动。 + +下面示例是列出所有的数据库都在 `TDengine Cloud URL` 主机上面。如果您正在访问 TDengine Cloud ,您必须使用云服务的令牌。 + +```bash +curl -L \ + -d "select name, ntables, status from information_schema.ins_databases;" \ + /rest/sql?token= +``` + +返回值结果如下表示验证通过: + +```json +{ + "code": 0, + "column_meta": [ + [ + "name", + "VARCHAR", + 64 + ], + [ + "ntables", + "BIGINT", + 8 + ], + [ + "status", + "VARCHAR", + 10 + ] + ], + "data": [ + [ + "information_schema", + 16, + "ready" + ], + [ + "performance_schema", + 9, + "ready" + ] + ], + "rows": 2 +} +``` + +## HTTP 请求格式 + +```text +https:///rest/sql/[db_name]?token=TDENGINE_CLOUD_TOKEN +``` + +参数说明: + +- TDENGINE_CLOUD_URL: TDengine Cloud 的地址。 +- db_name: 可选参数,指定本次所执行的 SQL 语句的默认数据库库名。 +- token: 用来访问 TDengine Cloud 。 + +例如:`https://gw.cloud.taosdata.com/rest/sql/test?token=xxxxxxxxx` 是指向地址为 `gw-aws.cloud.tdengine:80` 的 URL,并将默认使用的数据库库名设置为 `test`。 + +HTTP 请求的 BODY 里就是一个完整的 SQL 语句,SQL 语句中的数据表应提供数据库前缀,例如 db_name.tb_name。如果表名不带数据库前缀,又没有在 URL 中指定数据库名的话,系统会返回错误。因为 HTTP 模块只是一个简单的转发,没有当前 DB 的概念。 + +使用 `curl` 通过自定义身份认证方式来发起一个 HTTP Request,语法如下: + +```bash +curl -L -d "" /rest/sql/[db_name]?token=TDENGINE_CLOUD_TOKEN +``` + +## HTTP 返回格式 + +### HTTP 响应码 + +| **response code** | **说明** | +|-------------------|----------------| +| 200 | 正确返回和 C 接口错误返回 | +| 400 | 参数错误返回 | +| 401 | 鉴权失败 | +| 404 | 接口不存在 | +| 500 | 内部错误 | +| 503 | 系统资源不足 | + +### HTTP body 结构 + +#### 正确执行插入 + +样例: + +```json +{ + "code": 0, + "column_meta": [["affected_rows", "INT", 4]], + "data": [[0]], + "rows": 1 +} +``` + +说明: + +- code:(`int`)0 代表成功。 +- column_meta:(`[1][3]any`)只返回 `[["affected_rows", "INT", 4]]`。 +- rows:(`int`)只返回 `1`。 +- data:(`[][]any`)返回受影响行数。 + +#### 正确执行查询 + +样例: + +```json +{ + "code": 0, + "column_meta": [ + ["ts", "TIMESTAMP", 8], + ["count", "BIGINT", 8], + ["endpoint", "VARCHAR", 45], + ["status_code", "INT", 4], + ["client_ip", "VARCHAR", 40], + ["request_method", "VARCHAR", 15], + ["request_uri", "VARCHAR", 128] + ], + "data": [ + [ + "2022-06-29T05:50:55.401Z", + 2, + "LAPTOP-NNKFTLTG:6041", + 200, + "172.23.208.1", + "POST", + "/rest/sql" + ], + [ + "2022-06-29T05:52:16.603Z", + 1, + "LAPTOP-NNKFTLTG:6041", + 200, + "172.23.208.1", + "POST", + "/rest/sql" + ], + [ + "2022-06-29T06:28:14.118Z", + 1, + "LAPTOP-NNKFTLTG:6041", + 200, + "172.23.208.1", + "POST", + "/rest/sql" + ], + [ + "2022-06-29T05:52:16.603Z", + 2, + "LAPTOP-NNKFTLTG:6041", + 401, + "172.23.208.1", + "POST", + "/rest/sql" + ] + ], + "rows": 4 +} +``` + +说明: + +- code:(`int`)0 代表成功。 +- column_meta:(`[][3]any`) 列信息,每个列会用三个值来说明,分别为:列名(string)、列类型(string)、类型长度(int)。 +- rows:(`int`)数据返回行数。 +- data:(`[][]any`)具体数据内容(时间格式仅支持 RFC3339,结果集为 0 时区)。 + +列类型使用如下字符串: + +- "NULL" +- "BOOL" +- "TINYINT" +- "SMALLINT" +- "INT" +- "BIGINT" +- "FLOAT" +- "DOUBLE" +- "VARCHAR" +- "TIMESTAMP" +- "NCHAR" +- "TINYINT UNSIGNED" +- "SMALLINT UNSIGNED" +- "INT UNSIGNED" +- "BIGINT UNSIGNED" +- "JSON" + +#### 错误 + +样例: + +```json +{ + "code": 9728, + "desc": "syntax error near \"1\"" +} +``` + +说明: + +- code:(`int`)错误码。 +- desc:(`string`)错误描述。 + +## 使用示例 + +- 在 demo 库里查询表 d1001 的所有记录: + + ```bash + export TDENGINE_CLOUD_URL=https://gw.cloud.taosdata.com + export TDENGINE_CLOUD_TOKEN= + curl -L -d "select * from demo.d1001" $TDENGINE_CLOUD_URL/rest/sql?token=$TDENGINE_CLOUD_TOKEN + ``` + + 返回值: + + ```json + { + "code": 0, + "column_meta": [ + [ + "ts", + "TIMESTAMP", + 8 + ], + [ + "current", + "FLOAT", + 4 + ], + [ + "voltage", + "INT", + 4 + ], + [ + "phase", + "FLOAT", + 4 + ] + ], + "data": [ + [ + "2022-07-30T06:44:40.32Z", + 10.3, + 219, + 0.31 + ], + [ + "2022-07-30T06:44:41.32Z", + 12.6, + 218, + 0.33 + ] + ], + "rows": 2 + } + ``` + +- 创建库 demo: + + ```bash + curl -L -d "create database demo" $TDENGINE_CLOUD_URL/rest/sql?token=$TDENGINE_CLOUD_TOKEN + ``` + + 返回值: + + ```json + { + "code": 0, + "column_meta": [ + [ + "affected_rows", + "INT", + 4 + ] + ], + "data": [ + [ + 0 + ] + ], + "rows": 1 + } + ``` diff --git a/docs/zh/10-programming/06-connector/_category_.yml b/docs/zh/10-programming/06-connector/_category_.yml new file mode 100644 index 0000000000..abd3f666f3 --- /dev/null +++ b/docs/zh/10-programming/06-connector/_category_.yml @@ -0,0 +1 @@ +label: "连接器" \ No newline at end of file diff --git a/docs/zh/10-programming/06-connector/index.md b/docs/zh/10-programming/06-connector/index.md new file mode 100644 index 0000000000..5a69bbe935 --- /dev/null +++ b/docs/zh/10-programming/06-connector/index.md @@ -0,0 +1,14 @@ +--- +sidebar_label: 连接器引用 +title: 连接器引用 +description: 详细介绍各种语言的连接器及 REST API +--- + +TDengine 提供了丰富的应用程序开发接口,为了便于用户快速开发自己的应用,TDengine 支持了多种编程语言的连接器,其中官方连接器包括支持 Python、Java、Go、Rust、Node.js和 C# 的连接器,以及 REST 接口。 + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` \ No newline at end of file diff --git a/docs/zh/10-programming/_category_.yml b/docs/zh/10-programming/_category_.yml new file mode 100644 index 0000000000..509a9405c4 --- /dev/null +++ b/docs/zh/10-programming/_category_.yml @@ -0,0 +1 @@ +label: 开发指南 \ No newline at end of file diff --git a/docs/zh/10-programming/create-database.png b/docs/zh/10-programming/create-database.png new file mode 100644 index 0000000000000000000000000000000000000000..9fad193a686991d4362e0ae6570a87750f546d1d GIT binary patch literal 41379 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 +``` diff --git a/docs/zh/11-visual/01-grafana.md b/docs/zh/11-visual/01-grafana.md new file mode 100644 index 0000000000..fd3246a8db --- /dev/null +++ b/docs/zh/11-visual/01-grafana.md @@ -0,0 +1,54 @@ +--- +sidebar_label: Grafana +title: TDengine Cloud 与 Grafana 集成 +--- + +TDengine 能够与开源数据可视化系统 [Grafana](https://www.grafana.com/) 快速集成搭建数据监测报警系统,整个过程无需任何代码开发,TDengine 中数据表的内容可以在仪表盘(DashBoard)上进行可视化展现。关于 TDengine 插件的使用您可以在[GitHub](https://github.com/taosdata/grafanaplugin/blob/master/README.md)中了解更多。 + +## 安装 Grafana + +目前 TDengine 支持 Grafana 7.5 以上的版本。用户可以根据当前的操作系统,到 Grafana 官网下载安装包,并执行安装。下载地址如下:。 + +## 安装 TDengine 插件 + +### 通过图形化界面安装 + +TDengine 数据源插件已经在发布成 Grafana 官方插件,您可以通过 Grafana 配置 GUI 来安装它。在任何已经安装 Grafana 的平台上面,您可以打开链接 `http://localhost:3000`,然后点击左边的插件菜单。 + +![点击插件菜单](./grafana/click-plugin-menu-from-config.webp) + +输入关键字 `TDengine` 来搜索: + +![在 Grafana 插件里面搜索 TDengine](./grafana/search-tdengine-from-config.webp) + + +### 使用安装脚本 + +请复制下面的脚本命令来为数据源安装设置 `TDENGINE_CLOUD_URL` 和 `TDENGINE_CLOUD_TOKEN` 的环境变量: + +```bash +export TDENGINE_CLOUD_TOKEN="" +export TDENGINE_CLOUD_URL="" +``` + +从 Linux 终端运行下面的脚本来安装 TDengine 数据源插件。 + +```bash +bash -c "$(curl -fsSL https://raw.githubusercontent.com/taosdata/grafanaplugin/master/install.sh)" +``` + +安装结束以后,请重启 grafana-server。 + +```bash +sudo systemctl restart grafana-server.service +``` + +## 验证插件 + +用户可以通过 URL `http://localhost:3000`直接登录 Grafana 服务器(初始的用户名和密码是:admin/admin)。在左边点击`Configuration -> Data Sources`。然后点击 `Test` 按钮来验证 TDengine 数据源是否工作。如果测试通过,您应该可以看到成功消息。 + +![验证 TDengine 数据源](./grafana/verifying-tdengine-datasource.webp) + +## Use Grafana + +请创建一个新的仪表盘,或者导入存在的仪表盘来展示 TDengine 里面的数据。同时更多细节请参考[文档](https://docs.tdengine.com/third-party/grafana#create-dashboard)。 diff --git a/docs/zh/11-visual/02-gds.md b/docs/zh/11-visual/02-gds.md new file mode 100644 index 0000000000..c99fcf90b1 --- /dev/null +++ b/docs/zh/11-visual/02-gds.md @@ -0,0 +1,71 @@ +--- +sidebar_label: Google Data Studio +title: 使用Google Data Studio +description: 使用 Google Data Studio 存取 TDengine 数据的详细指南 +--- + +使用[合作伙伴的连接器](https://datastudio.google.com/data?search=TDengine),Google Data Studio可以快速访问 TDengine, 并且通过基于网页的报表功能可以快速创建交互式的报表和仪表盘。整个过程不需要任何的代码编写过程。可以分享报表和仪表盘给不同的个人,团队以及全世界,还可以跟其他人员实时协作,另外在任何的网页里面嵌入您的报表。 + +更多使用 Data Studio 和 TDengine 集成可以参考[GitHub](https://github.com/taosdata/gds-connector/blob/master/README.md)。 + +## 选择数据源 + +目前的 [连接器](https://datastudio.google.com/data?search=TDengine) 支持两种不同的数据源:TDengine Server 和 TDengine Cloud。首先选择”TDengine Cloud“类型然后点击”下一步“。 + +![Data Studio 数据源选择器](./gds/gds_data_source.webp) + +## 连接器配置 + +### 必须的配置 + +#### URL + + +获取实际的URL,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”可视化“菜单,然后选择”Google Data Studio“。 + + +#### TDengine Cloud 令牌 + + +获取实际的令牌,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”可视化“菜单,然后选择”Google Data Studio“。 + + + +#### 数据库 + +数据库的名称,该数据库包含您想查询数据和创建报表的的表,可以是一般表,超级表或者子表。 + +#### 表 + +您希望查询数据和执行报表的表的名称 + +**注意** 可以获取的最大记录行数是1000000。 + +### 可选配置 + +#### 查询开始时间和结束时间 + +在页面上面配置您的连接器的两个时间输入框,这两个时间过滤条件是用来过滤大量数据的。时间输入框的格式是”YYYY-MM-DD HH:MM:SS“。 +比如: + +``` bash +2022-05-12 18:24:15 +``` + +查询结果的开始时间戳是由 `start date` 定义的。加上这个条件,您不会获取到在 `start date` 时间戳之前的数据。 + +`end time`输入框表明查询结束的时间戳。因此,在结束时间戳之后的数据也获取不到。这些条件是利用 SQL 的 where 语句来实现的。比如: + +```SQL +-- select * from table_name where ts >= start_date and ts <= end_date +select * from test.demo where ts >= '2022-05-10 18:24:15' and ts<='2022-05-12 18:24:15' +``` + +事实上,您可通过一些过滤器来加快报表加载数据的速度。 +![TDengine Cloud 配置页面](./gds/gds_cloud_login.webp) + +在配置完成以后,点击"CONNECT"按钮,您就会连接上您的具有给定数据库和表的”TDengine Cloud “。 + +## 创建报表和仪表盘 + +使用交互式仪表盘和优美报表解锁您的 TDengine 数据能力,更多详情请参考[文档](https://docs.tdengine.com/third-party/google-data-studio/) diff --git a/docs/zh/11-visual/gds/gds_cloud_login.webp b/docs/zh/11-visual/gds/gds_cloud_login.webp new file mode 100644 index 0000000000000000000000000000000000000000..17695f2235795823e4c81f89dd2357d499f95e67 GIT binary patch literal 53198 zcmagF19W72vp(FhZQHhuiH(V!i7~OAiS10RiS0~m+nLz5)8CwV?|bh#@4f%^^{Ult z@9w>8|ElV#r=HzVk(QJkoB{weB}A1pl(>o8es43sgJglw9)sP10RRAsqV{LN2gvzL zH+%O7$P>s9kT^Hc zUbuc~P9xn4od^j5{e=en;{41%@?On;zgcn}^oI0iaJ_lbb>s^K&c0*3y8u%^_}-yD zE;oT6Ik}tTz%swK_k7^YU#_me9^E#Oo}ey<4uLZUS4hV~*Fr+Rc`qbyhc8?wSZA8| zOb>qF1!10;t_}Jw7m-d0$3I}M?EC!6KB9pVAIik-sn4Y-y49-8@#hSgJ_}V{ZzEXUMonc*1Z3_(w)qNxZKLcsr z3qHP_eMttYyjfmVj|mm}34A2JI9)*;bM*=(`3ZgeeA|3EeAztDxqXiW+JB(DnLIPK z3Izd$KBAw#y^EcJJ#k%C@A)kP<^9V2vfh`UnLl!N&hHIQg_iwVKL-7fUO_%E-ZWpJ zo~kc_3tjcV-uLHselvLhg7A=aSO)jEz(-*m2DjrsLQ}sa4v8>Q?`YhsxhHE&E zebphw9`3l^EvxMGmA6D!yA;(#KL77#9QhbnLb{jJF_tmRe4?U1;ktGIY(mk^A;r}! zc}>M<=?&P5d7jK6uFrJjacxZ9ChyxbwtoxyJP%Gneu6c~FN$&sx4~h_5 z%>EtM;k%EHS2#=Y%s%gEgr~Z_A~Id0vrjtPCkRmF2jtr&r(6v54r0Ro ztV$in-JbM`IiEy{2&NKiB2x;0>MR%=Df%S5j3l2H$6`i>s$cg#>wQqVBXE6Vb=vg$ zKZBiNF`R-kYLIOZ$TAC$?9#Lk0k=9re3_gtd?=%PIre~24O3m=O9zQ5SlV5jM33tr zZe^Hu`M*M`Kh60P{D0-=v}0xleO+y>!RAr@ygOMgYqI$P;N0QJ<*yT8(ia4kvmp*8 z5l5?LP}5vB(^k*zVLf-Ch--`X4>P;_G`%=(rT<;Q)~aDWK?i6!_rue3J(U&rjlU69 zV-a3o=e@*&)qTz)?LW<&ZQ}r~(=LXYLf7l=`3Nd-NDC3gf~RkQ$tB467B$%5u?~PZ z5W(ns2U>i};OYH;)KdM&XAh#8!7^$>0PPn~y*ro~%*b@v^T4ej2{ov8;`C*(qq7LDhNo^Dk�JWuif$~;RMXYbkvZqi5b4ye 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

cz_$?@YvUV7Z;A@$Sa(Aj6|rY0AJU)2;`EhoFcV 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 W?k|e)`HTQId1?Rv000000000zZUXTD literal 0 HcmV?d00001 diff --git a/docs/zh/11-visual/gds/gds_data_source.webp b/docs/zh/11-visual/gds/gds_data_source.webp new file mode 100644 index 0000000000000000000000000000000000000000..a1c7ddba2af5b11864add30b377062e28fabca91 GIT binary patch literal 67036 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

oehiWSU%a+FM#l`|0EABETqaGFje&Wxyr~* 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 literal 0 HcmV?d00001 diff --git a/docs/zh/11-visual/grafana/add_datasource1.webp b/docs/zh/11-visual/grafana/add_datasource1.webp new file mode 100644 index 0000000000000000000000000000000000000000..211edc4457abd0db6b0ef64636d61d65b5f43db6 GIT binary patch literal 55188 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�yh8MQu#o$^O0acHUH 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�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 D@vmwi literal 0 HcmV?d00001 diff --git a/docs/zh/11-visual/grafana/add_datasource4.webp b/docs/zh/11-visual/grafana/add_datasource4.webp new file mode 100644 index 0000000000000000000000000000000000000000..cd82156acbf3c1a37f1a30de5a0578f9ef79617f GIT binary patch literal 37054 zcmafa1Ds^dl5e$bW7;!4ZBBdIwl!_{v~AnAHEr9rZQC~L_4n<*z4z|keJ_8%Q~5uU z5m_fABO@Z~RLYA93pYdq04hTKvdXe-s;~e6fco=t1P2s?0>lIaWV1m(Zvmj$=K2

6I0uMKHw)_`irjj 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 R{No`UWDmL1_kcWN|1ToEHX;B3 literal 0 HcmV?d00001 diff --git a/docs/zh/11-visual/grafana/click-plugin-menu-from-config.webp b/docs/zh/11-visual/grafana/click-plugin-menu-from-config.webp new file mode 100644 index 0000000000000000000000000000000000000000..a27c1ea1b7c9497e8caf6b5863942d79b23f2e61 GIT binary patch literal 5588 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

Rqz1$>i$!Jt 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

Hf0V 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 literal 0 HcmV?d00001 diff --git a/docs/zh/11-visual/grafana/create_dashboard2.webp b/docs/zh/11-visual/grafana/create_dashboard2.webp new file mode 100644 index 0000000000000000000000000000000000000000..bb40e407187718c52e9f617d8ebd3d25fd14b56b GIT binary patch literal 99050 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 literal 0 HcmV?d00001 diff --git a/docs/zh/11-visual/grafana/search-tdengine-from-config.webp b/docs/zh/11-visual/grafana/search-tdengine-from-config.webp new file mode 100644 index 0000000000000000000000000000000000000000..ddc70cc15aa4b3d4d4a1ec612fda4e0c52559a98 GIT binary patch literal 12700 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 EFTt;GwEzGB literal 0 HcmV?d00001 diff --git a/docs/zh/11-visual/index.md b/docs/zh/11-visual/index.md new file mode 100644 index 0000000000..b5d89dcbb2 --- /dev/null +++ b/docs/zh/11-visual/index.md @@ -0,0 +1,7 @@ +--- +sidebar_label: 可视化 +title: 可视化 +description: TDengine 的可视化。 +--- + +本章节主要介绍一些查看 TDengine 数据的可视化方式,比如运行状态和存储的数据情况。更多的可视化方式会马上到来。 diff --git a/docs/zh/12-data-subscription/example/share-topic-example.webp b/docs/zh/12-data-subscription/example/share-topic-example.webp new file mode 100644 index 0000000000000000000000000000000000000000..47556e6aed5190281f5c8ff0620ea63d01b12848 GIT binary patch literal 72960 zcma&NWl&u~vnaZ8cMIz{WjTfQ`Frf(C-S1&847F8lJGQ@7r$`_8Mn z>qoEYSu?$Qx_hLjXEfwxWS)p10J_o=YC39sN~fP`)^>Sg2yU$3G8(%LaPP~3-oX+O z81Jfo%8o~eUa6FAZv;BikLh=}Ydh%YH4jM58;4xkDJLZ4t5b* zX*-|2C;}(0%W0Hcb8rO~Hv8}V3;6&C$S#v$>oMm$GU!1iJ~YTl0^lzugX2e>6o(K`gmhpi*nNHNu6yla$?2&_ zLf5Iy^noDfgVR%YP>OD2=aTMzMG9JS674i*7HO7EISy zwTlX>ijXyk^1ol2>^0d^CB)TSxwHsvE<(w*Nu1YsoYvY}TRy?Z5l7qS%gJ%YW|E(F zE9GnTC#o}GbTVfi#A02Btr$g3=wS*KK#B#+$;o+p^j;2-Pu*`h;hCQPA~kuYK(M9z z*DkAp(rK;9e$4sL#>R%L&;R?0Zs>jVD|q$4u+Ih```51kHVOMcqcKLiA#e=<4msLV z1x|{eZV5zf+az5!QZ*J-KX8&YzJ?}r{Cq$Z__JXS(G@8VChD{RcAO?Pj1(bS007WA zUq2Zpv}|+w$&&RO02rbAMAy7gR@#iG9}6Ize!8u}*Powp+=)s~|HuF&ZXAQB4O2g+ z&wK3tQ!vLqe)XXvp>eUzIjMK+^7%t$OT@Msu6L`lYj*X&WU}vDP=d91HNYq zBikfTP_;2Nz)-SrBHK^2ST23f*0&+hw@Hb@^?Bq!6uuIf2K%Yz+V`bm#YETaYUqEOf8 zI836NC)P4LjLdBWa1MkZjA5~-I5>+PP7$72T0HS>zDOlRJ>X`IZ*!te zr8*YArW_TbXzm1qdHvbwzog*<8Tly(lr_NC{cQwoDd~f4OhtG-o1w{HRo6CR%LuSc zQH5GMMWlYL3X%Fb+#W;tf!iNL0{#auTzD$OqSoJXdi^KPlm-hg51R?1;~bM0y`hE^Nk3r0$5aJgK9`FR7m#$2B-i)F=Mx6gQ=?o zx;cfr*nBhu|416Z7O@X2baLS^VwQXp_AetJ&lTK^r#8X^G=SfiRgH!XO`y&Dn7#Fj+ZGg%VfgcgqK~{>&AcP|dr3DCv z$&dzR!>3U)qs6ooKoMnE<37U6plNxjkqtcs_bm{sg(Vcj_i^?K3P#CnaaUk{Cp_K> z#j-0fyX(^~hxiF05pxM~VaHOl&Nl-Pg8a+R^@7@08CscgLC9yKX>Sp%ivAQ!096~r z_m|`^%#)TH6dNASUp^o}2z9dA%hUj;)9-D_{r?hQfY0w?6YSdh!)fN7! z#Id3y{Vq#FR|SKHOFbRO`iWHrV1nD<4f-;L^fMAq`RuoQG)P|>~G>jNogkQ^P6*=WuP<)JPhIl$6Fc|i@6^3$NDLY^M}ZEY50n#owtld)*X<%;ckm>*7uf7C^aoQRgrz4$!mO?GYM zE-KdI>A(~sS{sD?lyExMAn9q!%!Ur`4}EilvidDYzOS1sM}{UujZU|K$b8pS3jtxC zTNvRGirdTLiq4iW(GE3pn&BB$Bx)0w^4KK^yCJGl^#BAmZfHk3JGpGvGd+=;F;D<$ zhu(HS_iyCfP-dc*m<3J-^~%a(?L+Pc@;p@rEI-g5d+Go56cvO zIbOz`E#5mzqdBsVspEuWvV%$}Mi6_T$XWoX+&Z3=7GP>>?uo*x?VbZlO3AjpJFulE zjtXF?k}nB~_YlKITA0}cIiMXb6tVl=z);AxuZ3oi zc{COT%3QjI&s27n1i}Zv(Emums2r{U2@pdHqs5qJU27;fLqhgUdkTqtx0a||VMI_% z5eB#?JmyPXA?OaUd#md6hV6n4&t~Z6O%vyY#MPCKQtAGTE$nyz_ z?iQXN&DKNTQ86PIBAHhcK!^q&yQQ)#)j@p+tIo?9XCDuMuT)$iid7o!iw*PKhIItD zk6GeQX2zyG|JsG6XsvrxyU!u>H??{OtKdn>kA6i;6*~w~OiHO&d(Zu5MSFfIYbF>e zCv;B`&}HF}IM~H}rL@QzcnK>c*{dg~lGI{297hEtO?zbNkQhfx_da>zkxud6*r)k9 z=Qy>zpk;e$T(M0=<~jpQ09SZcJWj=)ruHNF0RlV2{9O!E(>{A{YnwKNeQ1+$x`=Gc z8#1WYDBMVPkM6~ZfXOf7z0xXKg*y4kp-bdYUGwQS*3K~^3Hh<3wbgnhX_r*jBD)H2 z)J!)uY3EuuQlZ^C_8%dccu4(3UN=2+iiWE16GuKvgFjq^7IX~qh}g{4pIJC`RaCQN zPYVxbvWP%(^nPsrhF<~?N#mu*yYwUN`C`xe6xJMMPPnlrE^@<7&w+f?++%bzT>UCFhzT0qA7Di4+hAhbwHYEzJ!0OAs8{ zkMJ?}7g+rBEdC)4Oev#2cC{&HN>&hUctPvj6*_PVA?k#*~kAdDJ8(nKtrcxW!9B$sO$I;#% zm3D9p<>C{A4W~)t%8qnXr(T7}RD^?!iiV;`E%pwE8S^qJV`@{WAP!Z;?-(LaXLiP~^oNkN6L(FH~eZ zHO%!i6VLO-Nf!VovUDC)bc~@>G3^x;+GIXC;QfRsy~mM?LWY=7cW}i7I}Q~TYI0bi z@>~K{e1}3yZ>jmUYvBP^UY0zObUj}e<((6A`~@F|^)oYqra|{How1U{vlv;#-Wjh# zenbe9R!s17vR5hjwcuyNc;sv4zhr5F5h=uIRWt*#;v+O@(8tSR$B)J)%!f!dc>IyZJTcUe`-OVQ#29;kK=$JkKQ9+uP+(1VL=J_?I;w5C1 zEmRP6vfUoa}6!hwC>coMgk8jf^=o{0MStu806@muCa zu+vbIK7Z^lrAAY^yZ>%t2(7tLQ6!>MP%I1#ViIhQ0!y%gojSDNuQnY;XP`ttnuF4F zyte&hriDinIW(fIyorb(u9H&GhlhQCaYy5-6sDA6@)0o^lz48*?f9FnS~C4Z6OMx6 zjaA_?9S|dEJ>aSRqYb9yhE{E;*_CJDf!3HJOuVn13pMyZ`_i>ygsE#_F zG@WlkHxj$2#b1+Ly0vtM69!Rll&9JVjwX6=F>EkBCB}Vp1PyxoKXjM462kzg@}WwvCsc1@1nR~?b1iv;+$w1lxgW86 zN1QQaE7b9#SPUuB@y+bEEL%tpqeiB zlJba@g8F!BF9v?XoS61o9bYJ@8^^)%N@$5)mp+A|_`@oqR)0EDbEvaV?fy|h3 zWUx6hKPdh54MZ`sr?Jus5^D^lSQ*Vh#G&k+g2a%rszQc#Ds(f0*t6Fx`x)8Sm~Mf# z{Vc_%3I+L03+@PK$u>&9@@JGUa*CL}_b)?y?CNg3wY-G|hQid3dK4xw6C zl7P-%@ynv%d|WN}`Kz$UI)n?&aTSUJIR;x-Uye7m$mHBzzG2QX_$sn!6oInLb`$!+4hB~*JT-cugh1Y#F z4bX6%y~freL0K^D<-ZRs77`!zI$X{(d;%!U*0Vs-MHy(-+yA=o;CNsFh-tHafy4$s zW7=vp3oB2izr_ak`Wi6R{$Mkk-C4+3>O#B-yK8)Z`g$U)V7L@4!zG#>8ADX~)(!R9 z>_mv!%lJa&8ERfNaX*?Ftkf;O0K*_|7^sOGU8|0O5^4pC^dtw2(sxGHDayL_bxg=K$JDn<2K-1_@n}3aN(1kMg7{?oQol2yuB0++ntzC?u{ut?HK$FCwnY> z5x!F39V=@Mxl_j2?aXP5zrWn`pl|>tcC{ZH+ap}}hallXR$JqP&D$$Ta6c3$`4JRJ zf%mG7DB%*dZpXMk+rJ53+{^6-SIhHGUoxOJ-<~}X^Bt`Rd?mVoQ z?IFn}l3juyK3x94;ES!OpF{Iu+u?ZiCn&!{5o&w)j1VX-ZzJ`pB3$40yY;jB*#J98 zzmM|iK4+PnV1esb7g2;7JMsPxV!RV1Yg6_6jpu<6Kh{V@QxDsQ9gjzy)&*`BY*d|h zms0*`Z~K4p!2dh%BkBLP#v#}j?4t(px;s=2n`(FsiGxHxo@2#5C?7&?@O?hMyFZCrQfMx>3%r zsaJ2Me@QJl`n+KUn^vB|!@QK_=#(;=^sbOPl(+gr-MWUZqGQmBl1wf^jj?Ut%c%G`Luy zo^8$uRvCjp5EQhm2$D+0|Op9!?&k$(CCWi~eWQ0gkGfZ-5?RnW|D^0stbdbZdw(TlQc2=l{b&QO>(~v-&F+R4L@7Aa_60(qGf=Z8ks6D>;-D zPqAVdSD*k`t@obki@njRbQ-^dGVitdsbO6e^om;1vfrxPOQ6%8su|(w&Yi?#t(Y-p zp_myHMgr{2_2JSf4!;E@<|cVKsd&la3_QaO_~CI8Pf)F82{pyqYl{3IFm@9-ffOTG zd@{I&G3yhCIo==C^|eYg%!={kCv<8V( zVu~oifq&K299D;xs@b@x(F&1h)9>^q^tYJTcBI>8UON=uqAfT~rW?jBZ`}p4=`{M_ z_FpI|621i&{tfN?!Q=FUUgq$`HBUoI_4XJonpK*PLc~O+**M+*UZyLse0qQm;;;gZyn-+-6CY> z%VQcTr6^)|R!hx;WNb&5)v=e#kcE9*DXjVN$fK(7i+|=kF9Rb=JF8FJrhkymvJNw! zEMm3U!I}YRsi7vEH~*pf%cpciC|X~fvcy9U8-$yy1Z%O^)v687Kk@_EQ-AbgW2Pu{ zU;Da@hv#MH&HmvXYoSOk$aN28hDfkY-W$9@GGa7ewH`@p{x(dz4Ryn`ET^%ZprA`; z&_Si__#CW%<7yuXON~nWZ>SsnO41%hqbZ(M?h1Q!BWK$YiC+6+QnQC*bbK)IzKHqQfwP@1&HhC*xqi%(~(b zK-^{Wx+_rI^wT>=^0@;Bn^8LzQmWVyMIIQ`x{)z;r7ESWl(R%goSye#KoKpd7BDD} zfLZQzdY%o|Oo1XE9Wo{pFpf-4R2fDsk#8oEQK$Phgl92pUr}ve7pJhHzcdYp1a0c1 zPf8yfgU47MtK?z0^n(gx)IyNS^FvT2511sLS*m9WuOctgHo}+>z?{JJ;Rh*Ya{qwD zs$iza*h?$5KF5!RzN}=>UXqhC5=@y2-~eidJ}{erYt^H+(HrjQ zjo=z;Y_Tw0UUr7gkKVQ{YPZV8T+!|HGbEkF6odzwGVu^(nrd1Hw|mA|iw!w3=sh*Z z1uCd$+xqZIuAa2gxax3H@aw3*T)vNyMHkQFs1MZE@A!9_NNIG~eQ2H;nI(Y~-Z>vAmZWMTN!#!i&nRU8a+9BZ%T z5YTgV%C5ny+E_HDrki~HWHMWmy|;AL36O(%k6K6{c|sp+{hn^|jIV}iD^DZM_D1H| z-cqAPF=AM|8QZbs{x6*-WTzd8uxaBiHx@o!BnUZv_pG zQ*Js6!?_vP$gs4u)T<}YoxRRb!V2Rryo{nZ7~N)|`VwVx$8{0hIh4EIbUN4%Z!_X7m`=YW%heJyHs+<=1!QWkW@}zEjd!(80F)6b zW?p(;8yLQVq9VQWXdEf34^QKIYVQN2rdTP)xO~JjDcjyjl|F)_N%!q-1D2517EdQL zxih~P+&>%WBxK}FHwDX=;g2<`z;N~Bv_Aba(C5@&q7^S!sn@*yGx>4XLk8jY&pbvF z74u;WDO0AZMNUj2GvukrAoac!b&^+L!w3bXJEgR9rF;rbIbWb%g{=H-a)X^2kHh*-kVQl zdj}ZvcQk-8=Wec3;_XejUEaGV9{=yPH+YswiYkxFjF#gvP*dqiG4no{BRy?`8pz_P zU){#O`KS#WawHKl$)7gMDjIRzEQ&*Y^eE?=qwIf)nT{z|bZ>0`tp@I?(p>Gwm-QwF z9I0iizw;)QgM-!ss7zQ=0a7)5!d*|Wy}c$^Yv4n4si|69C&QpFCfDUl!tN3C9fizR zjUYf~k8kFp#~7%HyPwo$8Pe|Lv!99TJI_#9$I~Pt(mE*+rf9rbp)0Z)aE;c0c@?h< z*=m<)h1~&@U`FF`pWa;Y#NSB=S|fIh0Q{k$L6l;!UxGE|psYPx4$$ zJDF!bI!3bV)s>{@EZ*P#1nUoF5+;a2YzD4(&7#@CYoFS@Fg4OdbYAQ)bq%q`Rhdht zV!*;p_szTgjsH>59fT4`qDlnWf&IM!-9@Z8~C@ng@ z?6Lxz;F6c&MZD~bH}bu@sL6Nhm% z6WDatY(CSB01_&oT*LVuAhH%0n`ane=_03;*m@Ebx#2FZ;0|YU^u8$>E*KG0^=*s7 z0(@^O2TC}qrUAf|hIFI}I9O7JmE z08=yS#@({+ zFHqAN0u-*}umU$bku~EeLb;T&XN*x|Vf~}!Hw14_*C~|2X!2lZ8r#cm!K{~N|7!Xd z*FSJnj&)zZ{H%y?G#G6f3iO+ZV|&U$6Zv)YNSc=f8Or(bz=`{QVq!UM0bi@~^e@DD zuQ7k(X3dnsGND1d0%6CR&X3ENpZ-)s{Uk)ab6c8CD&*gFj~_7f<=FpTt7*e~!!Duk zTC>2yN4@RbO;ntbvoE=xk08&!%h8D=yxi&MhG?TbO?)9uC@yw~VZRanCD`F+^1rr? zOg%fttxIS^A51UYLlPi;)|y4%MGkxg{Qv*AU3`$=61{`*HpX4Yg_ifQromj#Hr0~9 zz-zC)!r$}Ay)nNebkY1}lYhO~JN7sxQzk4DNPQd0F5w>5-!U3F6+*rUFikEMdOGNBlUob$=esZx>yj zhW-!AsLSGhNgSH9@!Ffi_xBS7Ha~`NKim92>iFEn8|4iE>!!Ip$dzH1HFQ=AFmoY9 z3DW&a4GCL%UYLQN>z)Fu*hVW>Ah;f2Gf^kfPRdU-Vt1lB6J=&;8&}KXdpszI#fb0R z=Y+Htd!Wqm9o4@(=2uhzQxJB(Ycyz4wXZtYvqSarblg%SbYj#sc?^8z<`PK8dlCr4 z^YW7MuEGnTresXYL zAQIg+q?`GO^1&fZm(6oMC@+;q-b{V-&aDV(w4!sCHi`zf)-q9whq-2^r7BR8+9;JLFN#{R2+d4Vp@+3F8&Z|mC z<4%6DMOL6lJF5c{;AMC}I~ZDh6FqnIgW@waD`WSPnONdaawqLs)$pwV|CBFjP83Kx zKITokZqJxz?A0m~Yx&bxQ4Dmnj?k%a_WkOWe7rl+@AX_&0q-`MHj*X@8Z)~{G8IwP zB`bZ`txn5UWuWfy%mDp9j;ONXlz?J4X~+``e)%<|yl}AQX!`msuSmvi`#2)&(a5Ly z%(MV`Y?kQjOW}U^l1tuQvH)??^Xi&uF{m!+oH31XN5*`}xJSS?#SC`K3hPTB(qOuX zDq4jPNpI-}khtRVZR+yZSF|_$k%DESIs4jL`sR6;wlTG>(ZEH~(WV&^bmm5C;ZdFl zExO0vEsTeF-|{vIdbKl$*wurV@iiCd!j}smL8CriEM?J zhshj4vKp5q?Ep_R1)OCg@a_2qK93=0I_6zMt;gF#hyLk9&upb$jHfRlEy*+f*9=++ zq59jLf!5LfTNEBxgjS$`{IGdmm&M#J5Bj*DI*}So7xL@!(f4Wm+WwrhT2V3CdM`DvzPzR$GF90qmEU>+t=-o0*f1r3&WSSjV6stJjshviysukO)f5WD2&_O;}P&^r`K7ECc`EAJs9l6ok@p8!| zEhe$}V^?`WxSYZQxN5J-O$E}7L(>C+9;##Imc%`^7D7xis6eKINNng>rp8!r?Skq7 zdf~AnV0sTNcihWrP%6`yTVe?a)T4)iQ130co-Cx^9^=0l-(0UT_{FfWG}4WC3ocnG zk2FT*DSmP?zbe1ib#1rDD8(R767I3k@|s>7@rwm>3`ZvOH@)DkBee#2jNy}!lV9++ z&q_!WZUQWO@Ikor8c5064ghIj12Yy!aAHdhlsxXk0yL2&vl(Sclm%BO+bny|DX9!K z24kP(QAGtKmRmj~B9UfB%uB9xELFE}Lj|~&STgK;#Rju_NGk-LD;MlmV}byb`b9-Z zGo?_L)H_@b8m~5O>^hb@RMp$peQU>fl%P#YHO~UTIH^YV(se zPGOPB>o8!B2FEr;5ax(i8q=1A0-RuOCD6B_NqsBSU7*EM-K*@r6c}2zaqEzaGkgRk* z03T^kNSV0QyEb{G_wrfP0VdLUTv}?cZ3G%l=SJL*YV;&E9d3|^=T-0RrPer^Kdh*@!AU7eSP2u4|5UC7_*`Y7 zoB(~H?=@$|-w;HT160sWb+>+IBZEM258a?Qac>x7KJSvd@LQcDf(At>=y-PTaATI= zD()=x%IHDmEj3X*!#!#0OmFpx03$7ONQzPJL*B7rmIH9NB!2mT2WgsrSSf! zuI>d-AwQg~t}bfFgpRefht{rsxh6-p5%@3giavczqk!vDHV!-Bb2vKrwjibX<&14~ zULj09cjL@vX!#iWM1uT^PFj(rkax0d%j+2&@+;4K)tF-F0usITiLoYdyj_+`SokI1 zRMNSQJu-Yo3gh=!U`U^R8IDCwEla%y^A>i*Jle5e)6-koS zU_}KnixgGm-&W8^?G!f(jD<{p(<$|duuic2skC%ZEG8fB^P_-zXY50V)cYy%^_))p zi>hG1RIQY>al$$WoQ^-`sG^_(Q5trIs8CP{HcndGu(G??a#U{@T|iSgDJddZA(8{~ zuPdd%(KS?z-tVEe4pDgRHO1opD4+X9@z~-K*dz>~ac26!Hnb-puOU3B738jfe3lbd zZrGTP)n96@Y#k^lYw@?d=UKBe+P@A7p% zXZX$Av^rS)kPS%JA++eE)y0VQ9&GxlJ>)ZQv4{l?h_dRl2hAS71?+v}Z zjoU+yc6O9{5z4q>KQ8$`a({OaP=`V+tEY205K#abOZVh!arJ|_+RQ1G4sbH`Tq7(8 zsx}a%&JX;X44^ELR)d&LdMEr`mF?9l;^BBr-(X|7y=!|*C0A5bgw#@A(2-XTvf%Z! z)Bk=o4GsIQ-az$lT~IcZ43n zaL9w{;rqK;hcePZWi%k~U{^Mhqb=bcY&#V=OsB?u>=3W%X5Y7JR*iXC=^)BZbJQAa zg7n)|BL1S1y-huoA~F0uwo%+uS>SpG75Mxl@2Bx;8!ePn3BCn$`oCyM{hXN7g73LO zwCIMXtJa@U*0RX{J4p(N!Y|ODY_dNn9-3nknV6ca<|zlJ&D3}MY@iP=qaV?Wx6YU+ zk;bltOxnCrh}B+ooZM7pG!(V=A7&KisLy(-BYj0qB|PX;;OhZ($)Lz*((Oloh9`2z zf6(j(Xs5uN5XvM5#5cXTTNG2=cvw{=x)wxVp4eoRNG01>4!ue~hBvq}m;-3gX3bJS z8+H=)?NN9}sOkIUFcxQ&1W>#W-hKyPa^wZg|4XUYhcc)mg8|O)_v~(=#g2=cpB;>j z(IQIBon(zP=Np-`Z7LRZeu!fXc;^x=75> zi&TRkGmFGMXxzaEuIj6uiIoajSFiPCC8z@7rX|mw>TiggpoD?%Sh5mVm&n@|f*fCp z$spW*q}$^$s5Fy-IWkt!qVI)#X&|KYVl1-JCMW?|obC86CnuP;qWd9%=~TfX5rj2u z5vtBEVZgV<-gUYf@_4y~L?lkwEvaIWb^8p?_&&Z`hiF%6@Jlf9#)6#)$6(0-f?0b> zEm8+M+9D!XM@%sT2fKhKfOHHoM$}N;4KDa9?G@&imcIBk$}k3825*lMKa`oIs>kKkn>LXh84Lz?Z^KA0Q|zC5 zu*-GflAEFxh|jme^Z)N-8J`ZFyJjECUylSRxy6HitMMgNby|10zz z7CilbRq%iKXI9Wh#cu>63klKCh{;a&>^P}|f0W$^Y+9%N^8S*oJ#4eC-_59$c!+EW z6XO!HN(cN>>vsbPoUrp?9aknyiD(#%CwuX-ECJ-Pn2+Po6VlW?4xYTJ8G?jl?| zWVw7iw(=s^i3@b{43^lJJG3@_bZELANa;5hG#J*bVEuaf;TK{Pxg{dnDeOJIIu`V` ziUuOENBVj4SZms#oTN^s-xFg z8_&I69|=lxz^;%P*4a;dZ!nEh5ZmUzcGuh69`opeCfQ;9<*sjau?nJBkGP#j zQ_%aq`u;k&e-*_!dXqBVO-OwI}40Eapry&Gs;x8w2E?>DPQMNL4Tz}E#6r%AoF35{K8 zZ8-*CC_jvU1J4ePHf{tqO+&COw4e8+a5Y(NV*CnSsXbWU&tyX>xDC9!YSx_Et83qo zCW9Gx&*E?IB3lPO%>JnWet|2qWG+68e%D`SzBXc+e|y6UIUd^!?wJ1Fx1lheoYies zuovtbzIw)Y{%6EH!plsFL<|TOp+jT!Ggi}^b#h?%?G9|+>8uqKC*J` z`A=!oGf&Z5)cAffQP%H5b;*zY7U_V>07m0h(N^)}FRqf8Tl8g#AtL$A6VTHSqA3A8 z?t|OFv6)afu;HFb2T8`VZTM}lU?={6^qucib#(p_IG(EJ5^CE^=J=kBx{mRlF*`PH z-nM5o?5cuzh|8!b)n;&v{lV95Yo_G7XhD58iCewxC^Qo}9htenRP$m*2-Da{;IBqKP8RalJ|& zz{v$I-}}pGKPdSqF$pSk6sdh6M?qIOR{vNoCQ%5VTEZ)`=R2wdPyZS%c(35iDYTFj z6&p%hT%DX?B*XE(&S-v`02fGYQ^vL&g=1GSAjT9%aNLrAC?Ig^bDyvNME&T(mA3c& zl8<3IV)(U>RXYg0O8@Z+y1peI@Jd0cdg*UH9kUYdLITgPFO?dhUBDBgXTphP1PxMv zZ~Qq{wl4<2@oH`|Jtr2ayd;Cr&qgg3fePeVOXne24>P`pI^y;dR3CErT zNB3EgJbxMTQ{zh*1!9C8Vc<|2bsTl$_KYk8<}-aNJwYNw8ahJf)}N6lL$fhl{?UbV_f!{pB|q=05lh>|XL-P>|2I#ff@` z*Qk&D?13VF(a!~r8{+x>^>8n7XMMxYVP%}4Hw*t1wpZ7$UXjVshN@NzZ4D%ASOJ7_*roMft)yWZqZYAPXHTuGs<&0EJ-mXeGqr{lRRAwqOe+XPr z3Voy5cgJ?J8E8Us#>TTDpFh=mxnIf6~-XQK6HGgSLlMuv)&N>}KtlHmqb&ixEW#~T(Jln)xJ-=T2 zfNK}rZWBar6Hb0uBZ1TMNh3A-ic88Q!oFqkLXZ_3x5AXb2*#x)NWe84O@TH@@$I&4 zIZ~}V^+DxP@z6)BB?`)2)<%1A@L8Ssn+VG^>SIu~uZkv!so2NR8_>EVD4H$Fe{YIS zFG%pis56P83{SD|T_LRp1JB=6mty~JJcaR*-V^dVv8>FR%!3ZjK)XcA)yMt#Kf_D6 zbJfw52#Fb|&>_C*DcS^~DAJ^f#e0Kk-(3*kEIfjZ>&SX7DI9g|<04Y3BY zo{XI?Dw>0lvN?0o;67_nZT4o#={HHt7&TN_hlNo!PHfgvT@w;8E-WoC{ze>*N!5`k zhugWFV7k=0q_xOT6`ojbbv|Z1SI8&Q@nP=HXXB<<(uT7snQdzz@DC&`WCX*X)zuGI z2iFZ=9);Zi^Wl6;Go&z9HfnJd)R4S^>=pOnE4XCi(p*x9`}$p*&}U`kjF8<_J#hZh zX;v8zn&(MwTuHA|-C97F#rxwhi4)0D@nfRYoJY#3_kDsdtL8gLvR@%oP_&!?ey8hC zYo~o@UhO+;Qq;dZsbv8Nhu~4C-p$9aHwVCU<3pGEsd3WUdzUsDsFtMT;BDu>%8$U+ zW!vT$e#&@u8U#EKzUAmU-x>e4v*E6zMxjS~)7OHTBZiM@0o{Q>Ji92-`NY?t-f52p z*Wc+VSYSvcn9T1cohFK{3vz2e`*_M&YGPishfC3-SABj5Vr-=-V4U69iGClj^Be@B zb8m~L52AZg^XV?AZtClZWF)|bjL>c}8TG(q5wfnr^WWDdw$}Aa*pgQ-aFTy}BSOr^ zXFI4D($lYCua7m_p?C%wr+GBMeha(@v*o_H_=PYRJqYd$tK6Bhd?gLh4-NV_o^S{i zOp!Qmchtw{!t~m{UnF?M!@I$dcb4WP3a&2m+zFA@sDsZThdtwPkACpDxN5j| zTUn0xHG?{%L;W+~vTk)mXS82EQRYdp1Sz14p?Ckp@8a{yuIIU7fkuSC5*^$gk_!>P zHKHF9N8_t}eXYBd8A6@r++n}Mx8v5*eXq8y-Wr%#_D>tH zHSkaQV)&p~ifGK!f4nONHv3H+=F0|F`(O%^qi>xh&jfC6p>LfC>;Z!qsOunrJh{_9 z<2z{Vq})gU)0c!@svMLAu?R$5iQCjv$_^2;pKV?e=n;kV19zk?GArbg-m5k|A5Y(C z`4^JOc=d($OW;`2)$m<<=@)wiKQB*`GUQvyt9uMmZ1t)M`4e+4!{=Z`s()`Ra=P#p z9sActNQlza9vA#ttD1(EL5Q^ao6U3|NIgJy)=UrT0S72sxVVJa$tAYtA!aqH8$SY2TL&hlCnS@{L8ScrCfX#>brc~4L z(vk3Z^&&^WO$!_`A1*=`V-$K-w7wya5a-!-f{Qqgf{Y*e`YIaF26GyBsD^mh@rUP% zMl@NtxZj5wJq!iHJJ*L{uydwro$F7erI%FC@j%rmpks=~cRt7Eo{AnzlgCDeZ*xrs zyM)7Dza_t6Yp6C1gNOJElnpLyRPx;B@7#oC{7JR;^Bi|tIUS|BJ~W(jS|REP!tQk2*sABzU;>mNAR3nMHI&rUcnwhAKA!rvKkZs`9V z6VcYE%~^ubMI+vofezsyP~EgKliXAIDHM66`iR92bvm z&QCMizsqMOOukc95ijT?nS>w4u>&`YdyktB0viK*9jf9|?*MCO73sYBHIhYw`(N^O z?|a~`Yj=;26b<#t{stl@I8cJt_9I4z^XxVxD`IcQz(8 z^Wwhutb!neRlj+vKTX>j0{i=g=TC)em3M8f*sGwd`(PMTMBm##D$06;o44}BeC&R_ zOK9axXw`s5TFom5gT1gUG?fRM1;>P``j2OesSgi z@4RBwx7T!~^Fb%Zm-ga(S%QvOrE?#=UyLuF5bX?IwP+!)$?ep`1qPa;ZsnQ!|Bb*~ zJOJqKm77BQRFM_N=zgN_QgWlZ53=6t%zRV-F!WxE(u}UZc6gMw5(q4HIJRSWqyuSL zP#NYg=cJlod1#c_0xg1b(4hQ2D|#mI=~?cJo4M-%RVMF=b5|YU<{i z*K$2VYF`_a2P6}s$OsD@R8$gSXN(!odwBfLTdukN7ja;|Yx?J#%ef-XM^sopuu+%| zJACv%n=2wSw(hZHE&JfdQN(*wE&7eW#%AplAI_^zDOhA~!Rt%Cv2~rk<*^7Ur(kT* zCAhaF_l6Lk^?t?pZaw8EmqAN@|GMsh6;xShP?_o4FO4&c{8n-U#X1%+&?Y}#pvhhG z$Bhs9$xN#`rg^SZW4+e@o(RtT=}U>XxktkUexPtcogoTbSWhKTiu}Ad#|yN`Hyi|K`d6=aLEbT?jz&=;Fa+zJK|gj# zB7)SojLhMOQP6)9>Z*G@xKa8B?OhR@Y!AOk!q=e5r@CGKy9fG~>tf(k$OhYR4tO^{ zSIoC{S{(7sEA_u8qK-KZZnbSG0$qVE?|GYL4_)^!R2gubfK4he%~PYhWsPd(r$SpZ zjCt3l9=CbwvyTXnyF9F0pXK@sDs&VA11ff7?uZXCY)pp6ogi@^>V}aybqE9OH+gL^ zyxrBtVDLUzXsqKwpoM~@Wmng~TEExrJGh>IhgD$Hk37t10X?4_m*L(Rj#kNvkaDn3 zR5&n}D6CLcf3f=4+9VOatM#RR(g&-+`;LzWL%Q{0g}S`T>*Q0a>a>>ijuUt)?#5Bg z!!CP=NcUV_>|&8DUVn_N_Buz#owysUy6X3CVukTIc5<}NF#T_e^Oy;OFz5xVyeEY{ zVOU;y(X9OC8EJB5vla!Tb*q zQnu%z_H(~$d6+J&g-TjonZnKQBAn!CS!?cnXpgHOB%uKRL~strCyTVa@34|Y~E$rLGURV}M^<5KRn*0jYxoUfm~^;ap5KOhvag$y1C;%%|uQELRuiBWg0N>v6m|=WH+S<-g4v6pxEY-pgT(6pIoR}+Vm_H+e8G)P#80AWziELn= zkh~;E+Itfy6##8U7C+nFmTgKg?tvtn$6~Jd zem!X+HU8ty!S2jzrFD+6YRivc%%{q4v6O3Pg353f#=inkFlL!-DyWg=0WPcXVIkAD znlr&2+IXgB2U&5~@ruormeKDwH5I;e*qNH?!ZG7!&v~DJ^OhXTX>&0{%J|lFSikkH zTHxg90ed^%DrF&gOXvS?JQ;CCMFD>XV#or%mIYV3UM%mM45eeAZy)x&x_wqV+WAv} zmq4_V_reXcVDS8$yzbPY@SY(TK#bV(MMF6V`7DV+LBMqO2)Qz!zTv(%ISV$g$NED8 zxP%w^-JgEbRVH(g^lPQ?#I^d;W!Zj=#Dk@c|91F7Tk=%Ss53gmiO<>NYnlLx5LaE) zjfLisj%#+XNEqh()L<;BMThSYzwGzer13j#8e^nx5c9|w8!JFrE95d*sieXEsIZs+ zjvq7a@vsWG-Ut=_=`Rbx2+z8}wh6D21e=U85lDurR`vq-*}Wxn8u^3xT%q*c42=D1 zg!O0W>M-l;i)j{2A^3zmSeD2QYAlC3zXK8})+-pL2Y#{dBlfy%lUGX@R|HO!)`XD8 zllk%O0}Q2(NWVwZi(`qm1Llz}{P7|PiC>j4s=fc#7T)5LkIT7)H^a=RwY%ZD)y!^D zqM+QG8M`k7rt!Od}cN021;RbYb z7LiF6flP_TNns6j{U^b1Q2Cv|qbO8W%f_a(lA?IB$fA$bAQCUGhB`PW#F4ikI-4Y> zgU5gO1kAC>3`v;khE$4QkvvZn7CN>C2pR$fD$45X=UjpOEpB#Si;fMv7ThjnT83i< zul4-=;iWZDJ{L^vFLa;vF&&?6x!+XdRt21^MIVr#Y3RhOC*Lp#pOKFdf<@&1;3P#g z{O2<$Ge9Tx4A)6QcCQW<{TMDE+pmbKr?TV3unZbcR$JXFhlNqz_n!BuvLa_WoH)Cb zm?a72(+V_7VH4_LCg53c@jvrTw6|zo-c3^U$HsGK6Bp2%+!z+m22|zTj$|jH3+eGl zZmLR>oW9Swh3*Ddno3wN*UkL3X-PW^QV zC&J@>Omi&rNWBfbYDn^NL4CAbeoU%m-Q}EVBgY$oW>#?g&(0)O0eUaSWt-Xd_o;Uv zy$0=9UK9^eaZ_}WDUQGbQX40}a7@Mu*|&_}cs&tmsKr;0y4cff6X^lRF23us;J;uT zw~&9>tLQfKN|i8IW7lso3|CFB-F2GfKYhC~JW6m?{mV6Z&dYifXdj;=8;a407Wabf zAgKGWDOS?H!ZlX(YG4T6xH~P_rhF5W6z}I-0`PqVH57Z*Er+lq?&jwH^DS-&nZx?@ zRu~1Q`(dYXF->8Qff$pyMv7Pe>;BmC0Jk=Z-jrG1*@31DlS;2yHsth@35~WMr>c}T z;DE4J59pjQNMoBN4!LG`*u_(j#d-=cy#YI2-(MAsFx85e1NPY|EIO6Kk~`xRAY~qr zxPK%ra&`Vt1RwpjUuZh{HN~zh6%~Q^WWIxo7M#nrPLVLW2yz_C)K4~7!Y&{3lkNPW zh1d2O%R6m21)E`%y7x~4XOU-Bhlmb9sET;ge6^oq_n!FUcE_zUoZ!J3kf`gQuW(ghd4$$- zfLrB7NmO8%HkzkSmNuvoD?pN%<5Dl4N4DroPVm#47|(-sOJU;7X~U$or<7JdTO})+ zP;i(eyu$$*JM+8thfbiU`dUlYeOsksq!zsEMZXnPVofT7h*xNCe&2Iqmz2#Df2t6< zZz#+$VrXuak)yNTksknNk!uPENrc*4-`VJY{^>smG8w@pVe(^Qi%3k2Gwyj^zl;u9 zQ(=EQcbX*$Rr^9I#KtJk53>G&M?&j_6KbHaztLG$jowJj6D3pft4ntfq-6ZVD3#xT zuu8Xh!6D(z9D)XAKx-e%f;miKjznX!BaLhB9ZK+_8OSxn2iXk_(EV;smO|bEp^@om zLmDp6tSB;6R8gGJArkdPxxV!utfiS!cRB@&T`}F|QGDtvwp?vK15UeJOWhT+-7n47 zdT&goJvbA%+*M|3d5QM78#A0yu zNhs{6ctcy+;4P=`bt$HLf&w^VuMoC@hO|!K`7{C=jO}<-$Dn6}Q`?ABo)~ORgTGLO z8f+h0EIAL^vZyrcOCPev=W31P4eVO1wv)EeFAKkVcaI57;UbHqD!LuipZzzO$CZFO zvY=S!o5&G_o}!dAuc%w;d7%SBG(+L@;bOJQi4!rrsz!NE?DeGHd_CNAo?FV7U8qQ- zc`sQ_76|cA9Zt%NaEInyU7&ST<0Hp(s3;_V)m{X91Y#-)s zG0)Nkq8HWGn8#o3+cRsCQt@0>AvDiO&bj?e+crCP=|`r95DkXaTRp|8|a z%!t|lIyLcEr@kidxf(8xHfv4cTgKCakTH=S6L}j!xr< zJPzkghpMJ|TEA?jL@|%0l3Q`>+Dc#nH$YB)%dT3Pa9S{MKC_maHzUpcuFLOaHBzk1 z40%OPamuA%JmuBz4_r^5+LE(JLdgl5#2aJ|MGJ@;kP`yY#9H@d9i^PEWc6P-k9@+; z{B_W-gqzAK`TKPU0lL89*YxPq_tMS|wChQ4nAkM;^*i(_askHS^KbO(hYuUcA}qaT z&Cb{6Wbi56X-q+4je8vW72Jag8~lW?7sc*^AtRFigG(+Ca9t(X*M=<^VbLwU95sWK z7SV0<%qT5KCGIA{v8FBavSZ}XjjF)?h{t^@QARMf94p(S{u6^2^?(zHw=b1ux4)ql zXEy%Z!b5$&W^1Ttb1%;KI-zNdvMllych)X+b>6Tfv+zo5h_(42+^`3_kE>zjP7I26 z;d=3?lK%J@tbC$)l|AeE4Ok)dkqQ|~TP@ea5BsLNS?j!IkA&rCET5*{VB@yMu@Z6| zUbMmr%XDL5VIi=gW)T=c zFacW0Z>i8DT+hjCS{e`uwfL68&dUD@qVIN~9n}iezey}jjHPL(0BT@BIRKCvQcyd; zWEvW5)6Z2^MoNq?&o_VS&z*hztMUWsH^H~zJa>9$3R@)#a;T37s~;lH-g-1AL#H{n z@7Dt?r2})42N7DvLOk2}6|nO&mFSQ?r&@Dh-F8_1$8r=`vmni##DS0ABh0-Fy6uN0 zndRRte{$PinA)Z)NKD-HV%B{)TptNLM06Wi3`(P@yGx^T=j_*=%j`otNrfYNZyXIJ zS)n@pNegEN5S0%DXO|D=j29L?<7|+>%%Gp7)C?ffdX)9Adr#5GRp(~d%0tu=d1thD zSlX&&Wi?ToVTEwY?_WQ03zZ*dI2Vig4q%Z^By*^V$vnRK__nS3XBcfGFg-0MD6+#{ zb&+Kf?3b0DnZBxB(Z4OXuXXrLmh|M-atn>k2N=5c&GZ7LS@Qn2S^yV1D?SJ>9*d(I z-3E!@z(kUJv{Z&;Ze1Q_LIJLJs#uqCsYR-$_9Gy6?7-U;1k=e@DVe{U+iv)7> zB3Bi}1F@NbS~2+rIwkE!`t0gg3P11q{}j(M4oGyJQHBTy|xlyS3lT0ZdOVk6Ouo7yA>282xwa2#Jp%|a&m z=sy^S-Ke%WIr`*9QWo&r13YlEu) zdJZhULQdwZ(G3Q-M@g_@7b&vr8bj(-@TSjfYMYL(KI<(I(@Brel0W6J3zJA)Qa|DX zQ0Zk{*o_52xWQ&bmJ#dea|2YfX~&_)QUF}3eNfDNdjeHv)%L9_h&`-LJm zyOn~-$L9J{Tdr1NEE_6edG~cnEfkBbO!J%b{2G?s1HOkfd-|^mmrq z=)5{cHw}~i#|4QO3m?AAUtM%mmnjdE44Z5&({pZjAk43IF0$sReJ;njZH$!d7SHW; zsKYy~EHGMEzF89G5(tp{njkOW;8ooNj1H!^K`Q}-(8v+A7Ij+4pOQ^IIozw(x~`j2-LLf*rCYu z!}C79pq|f_pV@a4OoPy_oofIlkcE+H1k7I=N#6-|hsFOr?|Hv8a$@B5sXngPe0TUH z^rrsxZe88EA1HItV^n$GPSK2aF}f(TsnKOBx#_h1+E5rz;I*UkHQe}4w2)NolPJbG zy|-}}vtX3t))!p77t?uPRs{1q-JWa$?+SGd5l+tWwt12mZpw?Nk1H5W5OOIbC^)*e zsZ&k!tK^CVV;Ds;)18g%%#2mBxC|~tRk_0dq&o4J=a>Jks;}Z5Cv2(&wFZM%Z$Reb z@7K@7Q%Ct(A zyDG=|ONB&C9>`0svSGLxsWjGaUQ2i~UFLEny@fSgk8J|>WStnhI@%QbKOuU$p&Jy+p}6%vbe5?DJN z@ZoZv>lH_0yjXFH>zSnA30-${4Npa~Z<(GfzUwx_yc?;)#E9C^SB&nSG!B1tXK!d{FY=<0nI)3_8mJ>0d^=&LB4=MBRr zKI<|s3P~Jy`nnxSC3(Lmo{p$B4)Aeurw^u;|0&)Ilt#A8;Ty`*SOklRGmlcY02)^< zK>x=_KO2v}p}mB?sOojqfwyEP4^PnoC~{n{q&==gJ*^WH8;2&+EQL0L=0W#9FOZ@S zdxs&l=#^(Kxch;{Jt4dKQhNQC>Kt#%r{}g;itny;gGcw#r`l^P*{l1&Yiq&BU@Rb^ z)qxkqJ0dKnQPp8g+46eRcKKPqA!oVsk;;baow&MO;4LIf%#F0V<+L`dk^l0tvwL~J}?*aemt1Ydl)T}{{w?^nHxw~ zR?$(ZT3D~jlJT1UhOi#alr}>-g!t-ReF7DI)C>qptP!kW9T#k?ZDy}2$N$k8Qf>b~ zQyAr$W zJrAL$g|?U1*d2&Yzz8{4_SJ4mnu-;V^I}Y-gi97S+2g{pBZ$Ns`xZMO z+8-p^AF%DT=SD~n8^mKmc|joUrN3O4(0bgm{Yag|P3mX6DYk9gYIqQ0;Le-c82Eg4 zXwV(VJUhq#&EYI2M8+Og_HTQ3If~&I;0d=g{v*b3)Lo2JT%GA7OU2I?RwJ!ggHrM@ z=K8J(srQCntB@XCx0+Y?J+eh@P|rLpSsUQQ7jL*vaC4)}HHgKOl#wqc?>$0FKY@PUZc`r967ZCoQ|#59 zEbwDbDA#5?^Y?*EHhyfB+^b~RQ{lN7V88AXYCoP#FG{jb>6l*3{;aoK9x4sf?&Q2+tLSgE-9OEtH{~`0OQ8zo zM43m;n}JFn3ytv+|M`1;Rd^<~7Ul&oZ7a=Na_4t>EW2GM*EwV~DxZ}}ad||#FLzeY z(wbgfmhLd&FgR#Ns!^rOq$(u$7|z)FMjsH$Juay^d!u81BmP-{@%hHl^X^3Q+JGFj zwPCzA+&^7`;dwY#2d^5(ZxXW%mUjvXebB~a*5swQ{oV#Qrvg&&6Xo2`G0 zy%aW4*H0&XUd`1S8Mkk{+VU{llbXDxtlZj~cYB(X(nd4Hj%Qo<7TsE3HTxriq^k7{ z(YGWPpC06gNXfhufl}4TsF=T|VxisP@Uu1jxyixCZnJI*?{=JiNrPeNgL64pq%`}^ z>S(3no!rqK)83}lO3n@8Hw`IC(VXcmS8T;i)<8PS`&Rh z+IQ4+qkGTzcKyk2OD2QTYmS&hs2i+NTG zkedZ1{HtTn3d!={wVgE9OSl%T41#AP$HD(}xi<8Q%8~*lu&M~HDKOE&P!F@}4WGAP zTIOIx47l8%Oax6jI>1wQDN3UJUyar!>a;NT(ZYX{g&r3k&NyVr8fBVbt@|eSvQrH%V{AQ_!M%q4lRc~Llxa! zekZ@*Mjw0#&=W6gj-Ytk7-CZ7J^S=p!Em@2m}XtOov?#44-UmWQT|fJY!K)6S@+H3 zl87mUQ10tsoKw#i4NzkiO<~-sI*FpNlt4oZ=-GdI&u1e0X}}VKHOGQmHr^JFmS89W z4AgIdem4`JK_Gt4TQjp(7bLPy?*dN5Ii{x&8R2aibHjG<9^A4wd*R$Gu<;F$!2(|{ z?RqA|=~~%I^ICHfPgI$PTUdrQMMCYHJ7lBFfZLUzASIPys9S$GOv-{BiPyBXBEjKJfd0|_V&@(!k_MgT@T(%C} zuZ9(44+(dMRO@ui4iHuj2`-r^YHNw4+xt^sVO7hBHEv=#rs`JFT#YWA>Idt+8NeMr z7qr7@Q%YZ`m2BUa*{Co`09TUC*;!$qhif~B$%fO?f zf&r%IrwTkcZ^0T4DiCxhJ`|hHGR5eW%v55+Ynh_n8t+l z>Yxx`P0{)!PKA=4H$_XfnQ@KT&sXWCyADWInJqUi)!tbj%_J?$tZC(PgVukR08{OI zq3IZ_#B7u@dXHaNq*nSIg~9vm+DT(H(A(YK$Do9lx7GSH7itmU_LLtdo@Aw}dT`pu z7kGr`BgQj1rZCq}ZLIp6X*2*5m5`~27P)3GCrj&AH;z+39VFd)hS_kAVfoyp1h8AqH|HRlJ1QFh?t&?%`8f8?CtENk)#(R>4skc z@2t;eT$-0|2)m{a>nX0{w_?us!>@~)D<)IP^DOOe`|k*)bu28IJ8(wnfY}0$G_cbX z6#WV(h%HT5T#PGSKUH{|P6oQ~SKFM2b<}FxpW8JkS3lxNHPu@iDYwiL%VSsOfAvHJ z<@#XHXIN;p_gV6dom_fMC(@?NUulkLQkW}xOGFDR^Zd3|5L|&W32cfp80B)(1ErIP zmqZsRu`;&a6jz;jFY9Tac>ibYM_C54A4U)32=O(NY67U#%SCpy96iw6zX_&lBqjRc z*W_3CM(=YCDrikP=rE?pE^ZXDi=D=qd%QB2)cV;EFx;e3`+xjyVx+EB-(Idcq`A#t zu_&W-@t|W!N>V{)RK}>_#zd%A1Jh{3C(x4;q8%wTN1EiF7_JJ)&zUu0Ehrn7irc@Z ziCK(-<)%5(;nn!g$@S8r`un>)bZ^0`tmqsLOiGUE0kGqu(LwwGMY35Wapjj zjapGV6_=+CB2!r!|N2C!d;;0yPe<6LlgWohtUOj>V*YN2F&x#0$k@fz*vqfMh9Nna zpmomUGK%14Y){GOv>*OlN-9r)MUChc9&pUoFzT&GXYACwXwO5{NWUAV4--CvISgT8 z)cmmZvfYxlXFt8Bh!C0Z)dD~HiSMHm+2ftZc~1hfwkYCD8DnzuN~yXvd;j$eJNnI? zRRY04(~^#ZSgoC4Mh$3=n|t^C_6@TSPj2O)>7)Bysx--CmF&3Oc#4U1U7%?jnTz(? zl0TsoDm~^)o7%1$I&C$SIC-$H7%!ea*{~_B@w1xXpIVo*ju}oVC!XDU_2C^4yK(42 z&^XY~n~Nedr;QmM=+-V~b9aq}$a!4t3!}uAyrdWgx;&k2tvKVyxD#`>dZX#>rBZ6bwW6RROK`6t^0Q=bw7jR&g}E+ zPEw8Ix@)flWHSR!U$nW1FVSuK2r^HV%t51j;O5s)$5tbA^1N;Bz&(%FXISGB+uXTiksj$D6$By zo<@S6W%7^^ft3X=Y_}8%4uEw-5>$SWYJ^y);%Pk2!1rg#urnzwg7< zwCnzxpgEy#T!f*HU)pYodwU!IsagtR+%T@0SCZ4Sqhb?OSWi?EIXsN;)J^cB^NBUo zY+W6rW(cc1Gxn$-Ox(fJ{8;Usx2$Gohvcs;ltIL_oqFzdwJvBICN0-yySz;>`ZAaN z^PlEkBlU96-loWmMER18<7V#w()2s6I94m&wPgQ|i0Pj{;=S&kM_8@iAXFioVTDQ3 zu_hcU7C<1`aVcI$4{Q$=DDt+?s+B=$ZL2twMcTaxQ#a@!&3^XUFB-VlC8ZdyKd$iDE~ zJNHx6#{0?UV%6l!x)7+3WIGf&bp5P0u%KF2BA-6YJhFCuwYD)urg1~fO43EPJWEp> z5f3>ka%eac9( zU)8@fAonIvNNCjh+VJkNWszi;+z>w z<`eFb))eC1!~YeLx>E<%^7qOwr}d6P_H z7PFN)7t6wCQWeg$q@PGR4aCM%sL69Ml8X$oLtc1p5Qh3tvEEC6VmKHAIU2+)q6FOp zC_be9NB#X?+uuvb7YPVe!Rvf-F^TEsGrk+)kkEN)_NFCt!GavMBA_b9K|A0{zXOOSA_mDk)p_X|$RNDn6D{lx@gZx%{zIyK!Lc zo0r>yK5@%42NJ-XszG$`WGG^FAC*f&6mFQ|8BE+XeGHybVa|zCME2^d@u0RNGw2xpSk*L-AW$L-0APqji8yzeIft4AzRrP5o(+ z&1*ULzXD6Vg^(ps9tabcIy4JPxdsdS8L%*9^e7djfT)(ZZ+Ax4t4?I=5hdU}eQ0wV9MmdDy zd-ha~5I(bmtGw%~?Wd=NR<=VAe9!{bE9?r>*khoi2ttIoV{Wbh8 zKbw@=U|VQ5C|mZ(i8T&V6K9v{BT-2UtH8fE*duO5oLN&PS-p7dC@3S^UDQ3o9Jvo2 z9Zp@-T4;qkgWn=%wOTAL$1)2!-W%Ej^TjiA3>r?^Mb&fSyTNk3FUhbc7qpLSOd8)K z8&}1b1O=cS3D7JB&wMPq(52#`FdgMmQmsc~`Ad2!D0_RVk$v20$Mbm3&LOgtb7S_> zN@An^YJ|xvC`%mN?K`UAzl!f0&GGtr;^HeZ@^Q0sFzln7n)5UdUGlbY5?pVMCWfu6 zoNN}$D=kI7WHnQdyL$3d8z!OzvyHNh2GKHz;3KcCCa4*9nn<^P*{1KX>iE<1{T~mk z*I$&d<5AU_Wkh{xFVCgu=k|vM4Xtt(4%J)_y*Q3keN!f(TmCrgw2%BlX(PZJLJn+2fV_!sKyeLIMtK*!;1{}})Gq)*kX)i=YpUs!x+Kd;Z-iFCr z!qACPu*RTG#nV5b+GqM5+P{ZXwscZ8{{{4ZMiJ=KcQAS5)NkI?Tt2JBby<~eHFo9Q zR_@_!cz2X`za@rwySY~jLih-I=NNp(WKJRG5Htso*isVWPKg`bTqk+WDRfr9@k`H-MQaRtE{q{96K77G*&E+nFlUL3Ign?e;G1_2VWX z!Tam7HxD}tK+leCo1#dIkT9RH&c()Zt}WV6)MJ#4w|koPX?C2nPqrQRy*iRt+gI?{ z?p@xyk}P*s6hYZXq3YLL1rMM3Z9b)?-tj`X76xKQ{DVB+@vd{L5yRj_&)~!luX!JTzI)?D5fO{q@s`#!!-eQV@w;&t z^F!a7S+RCu%nwc#E8DyIKYU1{py9XX5os;=3x|(j@#(p*9R3wPt1#n8Jw0!`KP;no z^k<%5FT&6LS1iLTr$2Slko#>*Rkp#)S`PGnTwwEn;aj)J?itv6Me)|lFF>o-a~L|p zq60)=yQ%sZe292n&>XT6${$)mJW@7XMGW|Z`nTov3i(!jv!&C3*izwR42K&GgB$Ul z^8=S0*GB`7h0=^wx7g@57lY|Dub<|=LJgNh2zlR=dU94fluU-pn4fr=^}Qy6JQJ~?>HhZTlITXOW$Rk`S4yl@Bd;J%vN-*s0L#5r z{U9iaqWabDU#gKesCNxw<2*yA9MuHVuUqaPBs!iqr5VIxrPAr8xyPpxA_&&Q4_d}O zibU%;g{34hYM`Qs*~bmsw1Ugz41Ng=*U>z+u}^K8xNKE~rbL_Z`$p$hF*K?_ozLBZ z#E$epe)P#rS zG0ii3jGs`boQVo4-@gs0!VST07Ei`msQ50VzdV=SqW`^BE(Kj0+`8X-FYwhIx$`W& zCQ#5t{>-AHzE~{7$&}?s%BHCF2o^|{d?O6klx$qQyRx`-)%lVWK0x!XH9ikUW zEH4RHfSU$wC=@o2cvP4v-BG}kttmgcM5a+$FLkWyX06R~mRU-ND}7w($9y0tw?hWJRd7rTPdl_HffIBxR#HY2 z(y@ul$K?$$FkA8qiWLfs6=c=Ig$;lS{0r9%N2EM?FYoaV{`}#)l(GKcE!GKl_BciS z=jA!ro!l_yHT}@5B`}Rk0%ew#&zcP8oPG?6R%DS09lsr70TpsybkK7 z>qPKQ(2vJ&G>Zr0@m0dPd_H!0qJot?gqm;`6ZdS=HOpkG?+!MwHoju3Vi>Fhp=c}& z-PT1IUMLSGO!?PSR!QijG&EeauA)ipfg}HOWw7*mo<9z%)0oC@s8+QAwKj$)og79n z*@y$j)Dq1|(}97k87dY9iE(w2L__Okr#bYHe4#Q_!@c7@XgMq?pa6QyN$$jAKUPJ2 z5rebr1ohrd1(U1ZLUcE>v#}o2Tu%iYQlaRebsS%kAxIR|$?|*sVoI)L55XG16n12J z&nQ9dN=}EK>l`0^wMs;r`h*|x2h#o}D&HT}s07urIw_afqe6xzezND0z=x9ki}l?| zffiB;VO|^}sifx5vas=>Q)p~5JTrh4kmE3M-WVVz1I!pTjf;ZkPY9x&WGQ0YQ-M}FeEuOGMh)GCrGW|~SWd4TNS{Xvcs4hkiPX7k3Pn9P zZ7ZW;N}6DA$g<#@PXAMiP%uU{k39TN!0mu7cP7B2QgiXSQ#vVUYgvqGA27Rt0mKo-+)>+kH&2bA#O>+->58-bR zsr2FWB5Q{*Y)W7Ho)ZIHKMz#lp)Pv?fEfVAU98*&l>qTql!S}n?iek}#r+*UD9~{x(h{f2dA>71zLh+@BGq2*)zlQ+XO zjH(kXDV>N)^#>e7B47wWTh<$~lmCL)1XuEvJGei?{T}Qa%$(=LpI=>fjZS5uLxq2f z0)E}$@|OyWR|=NVI1`%84WJ6P&?~MyX#w4l)OXQ- zR6fcAeY4ILuL|1?5BpE=&arT!Z)so5gn?DB#pI9OAkVg!9eiU%JwU0G2o&cR8iYBV zbBJCIP;V!_?gL)PC<{f1f=EGxKim)XIV%uonG$M;0VWWCtq)P_PS6|Pt;JHj`MNUF zERlP#h?ZZzqiCPjI5=aHepO2tZ%3v}SV?b8w*)WNJg+p4!ZME#Vt21}tb)#J;ZKh? zbt*p41P#8H6iCGLbWK6^Wz)Wm<0uD)fnrDe`Hu2$ zvI^e|ePm7S-?=g~-hl|IoacN(wrU3{gBDzSK;&5z8Bo}kf-;u+?|MPu2I{F*z6+9y z#v2D+(3OjY%Cg(Oj&qAQ`&Ir;u4bm{WeqY|#NN61g&dLC5^NcK58~lu=JKWE!;9Kh zCl}8FNcT01r{?vgMW0`5tFu3K#aPr6--bMHue^10!olbxj85<c z39?AW&kP9BS}A$v>f*}IUWE6{Ru9vyXRg_+>|6z(+m6q1V4qaX)}!m3NsrfMB3PRC z=gX5H?`)~!vfr%$=^@*eZ(}9m$M6SQEv6~+vb3>Z#756s2#Y`T#D@UcGkKebnUjN# z@|73uI09$SgODPmMdjoIcdoPkzs8w=g*Lj4LgI}cA*%8rBZKbU{Y{KCIyTx-xX;ex zGJkKM#fY#~AwgpbhuQ61pI{76-axnX(6#u54kt@&2QQ#0U>Qc$zplq9o%ZVtJiT^s zI<;9E8=vkB^-}ns-8ZdLJmiZ$r*EQ-k@enlJ=?&QW|*=lUL%zvrNW@KAl=L)$ph7b z^r(_^$tF&paw+#8ywU}7NLWMS6ZB!bq_qgo_Ry&l>~6O`^Vl$7oGAAlPkBqGyCpj4 z!%$rNeFnqWzvh`ekFj*^8ER?{8t|hOB~vD}sfU%k{Fc4p29_(j*R}TvFvzNe1RBgO zVL}I1Yiu{XG3M?#H}E}bGy(cS+*qd15*llZf^Dcg{`41#iCX&2N%r_aCHCQyBBI=y ze*3Sxx88)iP8X=JZ~U&$`H`SemxVPlB2YP0d|OCJoeTQKd=8yrsw-tTTe!gr@ZwYW z`|%pkH`Qp+EIpINUCDVU2x}Jjs^VQyq@g9b(3a`R=HO84-$sdb|1cezH8Z+#Mjf{* zHstPP8(@U04b)r&hX7r76~tToFyR%h6807O&Yzjn_I&$H$?7mChPcI7^WLA}#K$@Wo^Xx^1YqSJkgRmk1Pn*S)XL)N&%YMP77=sTN7 zU0ZX?-xvYhmk^RJm7ujJZ!A|dW&asS++74r(hXK^DPW>Pcvea6jGl*XVJ79=tIaiU zx@%i21W@`M?&hcFIUFtiCngu|GB^sn5}6d-Z&pj8r9lGZ%CPZ{>h172gaY&?|@PY8@)zZx4%zP zkS4?DHuJeQ>(kZV$}*e{rMB9t`P{x>6{Ht)%N)X8ti?>Hjw7`z=~GE;+?v`kjUzNo zp92=PWRy<4XWq2;}7?jz0DdqW;3=)?}ztwzg?? zHZcP&tTiErGA6%0kq}_p77vwl;N=LeR#jL>WEI!W=zl@i8cc0#)_UL<<%FD5`Lwc_ zkol$htx5#@g~vie2EKu?=_j0+kCa(36Y4S*$QqORyViT7EhG~3dWuNPD}j^r3{)z- zqoVSNzhs;7GITR#2>3_nv;%`uoD+if>h_0lZcU>&k86bo zmvj>&V|z$s{OPq=WvuE#pf7DEC2Z!nt;&OBdUiMjg+qJfv__+Pp*|2BjCiWh1c(Hwy+%>vCtB0~DS+u&i7-~F8uhw$c^Bmpf zojjd(2D~Px7!^v6EW%=g^c)Z<)%~JgSg}RS3LhDN4=ineaCP{$eVtI|D74&N{p|Lr zcvCfw<#(;SDAK9F45*PP8X|dG(sAe)>EBN6*d7rwh;_bJ&|IPWd@N|$@_cn72Yntr zcHRHZ@ahTIyx+QNF4^ADX|J!*FT1+6sCaq+p7?o`_N@y`fzwhZaCsk>ZY5*SD)hVy zTfc0+WB8pqQyBB7Drf6nJLg_o3|y@7fp=U5 zV6>R{4ZTLXVv+PT1R$TAo~QK%$z*Z_5~W(BMa6SsSr*Y7%&PSn5Q#bqH7&>4G~c+k z5N`(s+dc+3$lBDEiY(GBO>+TsG|x2~gKPZV^vg3Hdr&A3!jhly*Uj&$Q%Aj-4aZc$ z*X@yeWi9wI2&k?{Mw4!rIloO)1i3Ja?NnM&TD8@|ad)GibSHWd|s z1j>r7W{|#^aP1$m8sTJzd|H$Z<{o3V7v9x*U*M#v?fbR%!4~daouD&myp`5 zd0q|&+Zj*<;p&87WjNJ0PL?ke7(|_*4G!tQ(PHh1(l3xRFk-cEQ&b-22PX3>=>%CUzDOYx=M-EWSUF4r#u#`m=(FNtgq5st1!Yq5^Cb4q(i+$U?W@EH90i8R<#obSBvi1SJ4+F0p zo;1Gfxxc^rY%(mO`*G!ROJIx&wx7}o^ z!xi0lJdnSG4J@vEqxSg7lB$FK#W=EM-$Bnh%JO*-p{BoTbulG z2u1(zM9rVxThW8!gr2{%l`dVQPWgV5G#Mc`H~$xGc$;uj9vt6Pc%=V+$WnWFLUJmg z15JsW=zAn+k68qb=^*K2R0wN)3fKA;qX_H&G4@ZzioNP#wi>dVD_p;fHS6eX_2sj z$m#jq@XXxDD2@EM7pGvayYX61VC?>YMWW zah=3$`?p%lN;*mv$g$JS>TC)O3-0KrCUBViMU$B3FWL+B4s}9T6zYv2<*OP@a~)@5 ztR;C76WDdl_9w_==&n0f;b_~;qG1p+;3%1nLYD~3?JeDDQp{W}q~16Q&G{mD8EtO% zqWAX$qRGfvUFOdtoF3o_ac|l}N?{#--BP-jqkMD*UZFmwu8!%XI^blL#r zx2dKTx+>Ev2?+D+$%HzvO*-N#giQ<9k?+S`K7u?$GmLG7Vv>6@4h=i`sY|I5)aw7U zEf&`mlWkwMoj_$Kri1fJ@DC#|K+|`)j6LPTYSLQ>#C^DzLJFMD55m@3pgumi2E=DRhu3ors>3rPjG3im`svQ6B19rS?5xJ-6 zVd{08FFnh~{OAfT6v{|I;m*}>H@-Wz|h#a`7 zoYxR2cZq4zb6C=;aGmioSSxW<8V0YmMxS&4m3^M1sNvxuM%YAy_#|!-_BUa=@JmmE z`w_0IyeK`s{48NyUGzz{o%YlrbHNbm`{_eY8pZ49aD49?y3iP~4=k?@OrNjOo3H1t zAMUad6)Nr1!_KAu;gRPQVU?&8@TKW(-%-i-w>~~YRpvI1gibeIFSs*zp3d9XtEH`A z$9^XD>-+&1dshbU&NP>*hwLSZ=WhXAadhu)Ci+OZpHxwk{Bg-&mK^nygwO3wpzLhiRB+HGN<~7jP~gXH{w92~ zL__a~=29=eQ4h9S1#d*ezDPF(RY*oa&ymL4A-_M7YVHwNS#8E<|e$WneI~x9;!fmqx^#erwBRF!T%gHPc)s)oLN+jez&S|U$x~&*1d8- zL-Z%4IlpT!E+Wn4YaNt(lUN>qa&V&rjbrBB_s)8u4Jhtq-9cA#w&P$vuj2iLE>?MXW<1>~FW-_% zwZky52!cOsp);03fmnF=-SYI_CRcm)s#J_PnfIzxSe^Fw4$$;zF(BLzo9~FWa~I2> z)$)Lqs-XzaLaza=0et5vjBSM$2C3jXOj^a8KQ;?R7;>`Jc0Xke+iA8Vq+*>gk)0Vp z%se@gXj9LpTYLK{VOd}K(-t|+)$a-x89rYP0cInyud_^On90;s_ItHcW-+|URpJr7 z;1%~jLV+;-qaWtF%Y($hSAv*%cdttW1IjPoPoYMS*G2z!J`N0IQ0tg&S8d-~3uK&7 zey%^JEFi*N83XZC7sRR5Rx?M!3)2p#!?3>@VDTWloHaR1*Bi{!J^r$a5Q&HEitS*+ zl=?18zHIx2+_WFL_geHHV@+5L!@6rquwA~j9BC(h5*nAbYo^LIEgby_6bn#ql&;Rx z0@m2dNWBl&Q!ZAva;08hea}%v3Q22x$J(k)TSN-8f022?I>gTOF`w{ccF!`XduqfX zMwG?*4}3;5a^Je1TyoN=XlI=*B5cPM;IYzMUG>U;MQ5QSoUtgW#X}v_N-=UP%1XkLei{(FuU=mRDSn&Uv7pPhqRm zjm}elOZxJ)qi zRIaYXAEg6FG3{A0EU!&++l!}u$4%p0bB7du<9Cx_sPe{^Gu}`AG&)jfT8@?tZkY}j zpkiW`Dt5k?%6zjs;^uSw?HJjl!N(N(=LUVfDU~$QWqyYqp{9jui!yw)P@#4+q#=y{ zCuhgO>2M#76uP~U7~uFjWxbTQb@cMEo9Fu_EN1`EM|ywn-DH%nF#qn3S**fmv94Co zWe(H7-4?1*rfvpL<^fTQih3r=_7LoVN@}bH5*dEfEiH3G^(~8DmTrUk>PlF6pNu|E zq%X@qQ53Pd3TmmoP~D59eiZc-&A#_l-UOn{k=$Srv+kxb1cub9U~5y4Y5j%43}}d@ z-5MLB;XM;^QN(4`#5yT;>y}K*-p9&<+y0n44qyyq-43Q2#$hrl-}An0($Z>SrcP6W zc14r=30_X8w%J}~!cqv@iQr(aBC65~%BYle$mT(0$EB`<1c`)T;|n8}zD z6;nm6T2|2$ef5JSH>q80kxiN}`&XsozYhst=rpCgoGwj{uZv|*)k>id=7&2@%8Y7m z0Y_4mxGYGEnau{<43ec;-uZ*OtRpul$Gh_6bbc$Wk-3nJ%R^(Z@<~qxWymsL=v8!N z9}zf1=k0i}`<83t)MkwKOo5axMtxkZfiI6~u4bWCX(b`sGluB}aEw-V%j4zKv_W=A z6XR@#(18BkV}tOG9DYu7gHAaT(FFS3^xi8i_LCg^@IL7|z=eOB8W{L+h%Oo4+(34x zG?D7Ug)rVamp|6^V)2!t7ug0*fiS$HfoVl*amQIn(8c@op*2`9I3^)VEyVdwiIMvF zh`J2WY3wxx0KMTurXpk?7`1PN;xjAOLxJ_;&$v5Pf~(M_{rpmziN=we$MQcSiE-cL^ceEpxc{IlErh*F8g^=CJtL!MZj220eWgP4xJ zKM_ylv{)F|QrWm(#G0tOx)QP_zF2#<{|U$Zxn2q)My9y1Mv1E~B#gWyMfFW5*x74r zew+qY2j0A>AM3Ds4|K-RRv|NJ9#$uP*cT$C!?T@FE+ySbmAy5}JTi zK$5aZB4GEm#Dq}S^T&MJ}*RBLx zA{_NvL{~((k*RE%xKF}w0lTImO#+`B$;iEqxjP5)3P*J z4N!jU{Wv&Zd+w|RoA)DvZ2PgG*o=g^ZVK{ZI5TSzHJYcHAveK)2CMc(iVlsT4d zj$Oscz>{`l&qh#l`r3j5E>Bp+d??Ak;J`y1>|3e;*dsD<%yngT2Q4}v>|D$-pPx&& z>vBRy>w7lneja)N%;5WPI$K75V>=UYhILj*u#2BL{pJR%2qtO_W93pa9yK*tM#jHX zRC?7j!_;&Smg>&1CGEa=Z63uKQi$uouH5ONT_n=VFsBp1V>$Jbv2UMvNOAQ4Q1EIG z#u-Z0#W?@u^oODdMiSeAN3;&ImACpUEROK3FANdd)A}O?vL&knB~W5otobD@LzS;u z+obX;2Sq<2ahia{Rh-He9)P8I($23LOqKv4n}9_^KTP~p7d-g(G0)~do(wXRzT3ZO zx~+#gv2Iot~SO-;hagDXal(4`TBlj+qP#;5{h~ZMBUr^Ch zS+?jy6PI^7V(rw@ct76Spm?g0>LdXzg!xmMCmU2)r!#Ov-P`BVQ=_&g?It^Ecs^ zQFqwJQwOXP+ZW!NBq5eUhIAY<6GIb_`o_d4c3oZ`NhV2b3s&|?Jq+lMmXvhIOTDNjv3_&gzI zhpzvwmWRPro5g*3M9j4L507pUt$Vw#xCCjDF$Y1ARpIz3`{RZ4QFH9##LodO#8TR* zx|GVxDT;$nuTfytsVhWA_kbJ_bL$B)OR}vYlx*x{oFb2cJ>PNltCNR1BA^ZiMfyK0 z1(`z2ItMHJ9T~&_YwP4iYW{*pHP$ydS%;Sh#Y~?T)$o(VE2$?2fif9pi@1nSuded& zCMKXXY{ib#b)!Bj|Iy#VBJFTe48-YKG+DSXU2~I5;#|9Vx>M)+h+WO?!@rRcT8~Wz zRKR4NI=#gR!M9l&-hf9NvT&vw*TSJdl5**78q3ZBE|s#N=~`XIoO1h6^L3}KU&Xr+ zC(!%x!N0=RBkZ#}ZpY|2p}KQ4!UlI`u4hTPDp}7pzIjif|I&`442uP3+>E{Qd}VXV zq81~{HEeFyooMWIJocr8*N`&?(hGfq+V1h;%zr5$p|vH!OQ5Q9VOq#i1-GFjveg+M}2waEncq@H`!!1jaC?Evxt(eG-!b zH8iXk?UG&V-%9|KWyaROsT=aEiC~^y{c_2?xW~hzJhB-#2ygx~arX=ip7NMSoZ3*pkFMM=vdTbUSmS6PCIzcC$JxXVE8tK&-C*|n#pFzF_FsTKE7*%IWJ08b?%`K+br ztLI9GcOtBO^W()qf&n8S%CVC1lgEQUYAynLl*`q|zLsJq z(5~mG_!YpFD!792_<}96S&6egCuSOkzZ}FXVd~af9~L>)SsNgodT3-6`c;00XCDp0 zqF|B~HXjxn2EUVS_vFz*+h86eU(INxcKd_;{dWbj3c1b%^ zbYb z&&^jtBo@S<4z|Qtvf1=(KiV`|mZ~%>tq^f%weE+@1kuJhMK-m72M5T#I78fqh@i>< zidL9YcpN>RB#agUkII96_F;Y&m@)|`UO3KdF1D=f5FY9Fe?elbRg2fyflN$`03brU z^tMW7<_{*bfB8y36>%mW#C(LgiQd!U3Bn=eTv1O`JFUJqT4BS;{STL#ic|z>e-}BT zs%qRy1xjIK)j?n@iWLhGJx(&6a4H}k>_Ws;MNnyeKqPz-C^`BWiJtH(mo$fDs3OFn*PCPipwM;$XfO%lp9wikuWn?pN*qwzRnqV8r{2PNnbpxZ^k>HJ{``f{g;saj57qH!}_;1(#Xkf}H|xGTbm2`V7RczqMfi>o?wGOBcXt$VVZRcDVpt|moH6jJNBr(sb4 z81hu7(oi!_5V#9(y*d7VWX!KN6fv2xUlN$euWitS7pr(E9mpQ!^0*1p&oHFPd|;6R z#Q!N0*_`zb)=jPx#Yg@@&WvANxoW=}=j4Af~Iq+aLT?K^-uLNsDySYOOv zVyqSPd!mJvDQ@{8Vs+OhoLLbtKr|{-!#yqEGIeL1CMY0SV4D!Cr?fCw7sZO>o3pkyH;sH)yB6{@I4_tX1@`JzRK@+F%}z|evGw% zBY>8ue*_tUA9uIe+f0j5wlKVUHs>Ao`Xuip*Pyl$e0zO{>*^g{|D-o(a$&Wqb{#y) z)nmFdq_1$^GQgCVL8vy)g(kR*4gj`DAI-AK8Wbn>&Naj!S@A5G5iCjD9Xc6u$E{qj z#y^~r!Mf~2!iYma?wBiiHZ%`LuII62bBZT%!vu&62$=wu^lM7JBx70^)EyzKcp+yEA*bms7 z$m_iIdbLA_hHc+`qM26`txjCno9KLS;{NnwCaYiM;ADz?H6on86ZYB=S;B z=@^~G-Ydxw9hJuZr7pebh(PgPr+R=5Me3%K!Yj^VtiWV}`HqwvQ8cBqoE|hTuG|Wo zs{L8wS9~oB#3E;tAv$T2A_@%frVwvovv)&&f1G3{=;esyUh%3@a>Z zjM1Zd`Hie>-DQn6Swzy9A`E+5m^eaqPoa7eEsiI3Jz6eD_y&-*LLn3g6k>*TnGB4_ zoZI*X|HFu`HVb>$b=mdS6v)KH0OtJ5#hqPL-}FTC73VqEJ%<5lkyP%#KhkxOmCCW1 zi(~4^V}g#+)OgR0j;2M#RkqPle59ZcF)*ov7{?HxE4c9jUP$RVcFQwo4^k*%ySERRW9ppX@E&@v-HAs=s{)l^Ze5Y8xSuu#(my#+(J z4vf=kg+?Txpg93hb^Fy5?92|VuOgs+c|pua1iPyYo=ADL5*>8kq(m+UV0PZUKBp`V zjK}=2){W>dr15@JGdG_M0d$9KV3M`JrJ#&s^m}frnwgo;F!Bxz!f|Yjc8nzMnP^dH z3VAz52!3|zEGuOrQE7GJ#{3Yo-I!4JpIK)~lmD|+8T8X#JBOLCdO2=~obt~lt!QPb zdvt(v20nTX^}>YIt}!e|{L3F`WGFD#KT2R?VvYW67Tjf1h!H_SLJA1YEX2N0UC04q zTD5emIss2qF+jlCU<)_1+O0%-rm0)7w@8yQ>B>eGjt;V8c?Pfjvcx({akV z`PNSAA`_ZKlyg@_nMCPVRw52%G!^EsuSBq-7#ffc`04bObQoI58xkF7z4xd0#=(w) zpYEmSL#(%~Y~0T0#L&+sYQ4TEKQ@d23OBQKJ-^l=_wabT)cL z83Az9%dN)5G*QmS`EOmh+Cc^Z z3pIvevZ?EFJ@33PpZ(vrMW$`Z*4qhSFLC|)%-S&V`a`)0Wph{(1`Z0s-_;> z(78}&nhlvf4)8eZQyfH>0p3w9#E z`F47nkB-Lhl5fGTDd(?Cto$)MbUpvW??6uYwlw!C1ucFr5WEpVR)8DN#49>@)Ba(} ze*IJ)zQIHZ9M+88X?q0;Y^8aC2Y+d=E##!zEbJU8mgsdE0!4nO_r_~%tQm8?1a1 zAU;@574v zD$bDMk&z8XPQ2AE;>4DJqyK`^bzE=Mh$(so5n(8}czPenJpyiFSSzuZxXUmjzElIT znWwG}|JMIEKYG)wvT&_NzWe6kG8YN>6Qh^BcI1SfLJIA??G<~1OeuS9?N4Q0_fnw$ z9EAl-%5o6c<2h_PZV)@)SY@1=3m^Kn?)I>4PrH!3l14#}gl_s;Qj@`weqPhPeTK9r zW&mG3hO#^YV@~cAs+g<}^JsKim>Rj?C=JLlROna{IFHS)3xL`&xw^_LEbu?YEtz(yer8=I@Ph8TePR| zsOdExY$MNRurVGP%){^Ld^@WWaYu)WeMB8e7Tsny6-8J^{~ntl)H=R!(4Ft`=W)NB zP$J2%`CMtql$zUTwCXL{xk(UJe>;0C3$%}9LXfgvsk{3S(>4T~^d#!WgYs>(^WyRG z@wRpB{GTOts|@DQ`0rn4;Pqzk6TUm1B);m(0b}sSBij_ORnhnX8{T85)y+*x;K3cs z?251&HS>K?d$CN~PzS6W-*08D!5XkMD?|hf2$vfirV(8lSdNzxTdl2-Xd2tXZOZecLK<@okP9t*VR*SITcW~ZoAREc_|y4wkujAc2j{5P1W8iO`H5* zbNxfxUrB95ez>eGh@Fx^smfq^7aZfUZ+G|@+SvLp^ta5s|GSAXx$-c46ELlhQ?R4JN-Ylz02(LjKitmk%eOEo;8>|sLdSM&XmE>E@a=`P9B@S{{ z=nx*Dd?mZpIPKC1x@YlunU@~uF%xuZep=<@>SZBV(ttJEN1N}ey_fMk)iT}Sa=rQBZm2>-HorIKbE;@*@%>2!Xt#S&nG?3p$T}@37W|+ifJs| z8M+fRUBkD)$L_>IKw9Xml_1ZqQSBc;3g?>V3t}E{oZ%PF>E}h&FBLvbNaDw`g-~GAz+WY_EvAOm6 z@Bi(G!p-euJ{~QbFJLR_a1upPu$Qk_=dU>=+UL5^aoTzUGxMHow?0(??Z;`K;xGT8 zzC=5w#O>@>hROhOpYUfNU)w)kw6eXjDPo`wGgJpB%pvr&)}T<`J*~-*M+|%l-kGkkysyO}bAk^>w@$*9O+)|t zekN65J}(o;jbfB;X=&f6w39n9frpaJ32Ba{qkITf@jnr!i4UceX)^yX_) z8FPDa8*uQ9*4cB6M#+fYR{pZwsOKiVu3G9yl_bP>lh@&9g5Mqll@P5NB}XFoMw=9N#Z91eEZgyt9uWXh$8D3#hmz zoeOecys1D_Kc&L_K!R3R=y`H@^%6bsJ4vcV5G-HDfXc;Lz)bHP=C)s9YX_jw;tnal zfX+GnLa};?olqNCWkrqNf7Y_bnbTq1Fckh_C9xq_LFV5HP%Ez$4%OHp6q@D+tf>^0 z=*7n7?8cAaE+nV)HJ}w1=GC87knlj0Xt=PxE8`b($tFV!iU|^0g(Y*HWQ)br zoI@85_6dp$N}*!pKvsu$(GWVLst(7>0ij9ub0~;ZHF11`!S0vZM^%!(o-0qCul#6{Mk6==YM=DI#gpV(lL{kE<^t1%iI?yEJA)@2*N@C5iT?g8IPLz-}*!hpK<{(x1q;Kp%7A@NaT5Kf8>jZPO(2CjRGrT;$ z5g2~+g*3-MC*b@ix1ZPOmc;PO4}5xac_g+OgE#n(o7w?&%W862%iL~xJsOzS)cb4B z!ht>)XV};?C@hLm3?dZW4sJf^Shbj^-PHc0)Z|&URplh|IN2hwJA(N^=BT>tl}Dte z0|%^E=}8SRw|HXzPJA01EPu8`h~=xvNSCG>^v(%WH<_M@Cvc9*4qbGlHjAD)%ZwR) zp$JX4b^h3H@aY%v8Gx7%VMn_mey#fW3ZJASKBC3K94g%Pw$)TLuVMIk&jBfb)jQ16 z+?U(N9%Tzd=C|RO1Kp$?JP}RL>4uifWL4A?yL)BBOpON&`Qad?!9!Z%A%M_$0C&=m ze281vq9b@7FP+-_u!(rh_eIUc3veyT&D9+s!`s`YaoSl%z#!QgdwWuz$cLLrkcr`3 z;2)P#h>w9BkHcp?p#(^gTT+D{4=CXqGCNqq8loO|MUl08xZAe++anQetNm=;CKN%y zYF%amYN9Xds8h@i0Wv*XNX0RfbS4+)&ySk2$(;bkmc1A^2r)b(bX5~XsqwEPVBfLS zm_aDJ*0|!gxOn{+s)qKd6NDHR6$W?B1#AqZNhVX}O4R9w#zo6F6Z8>E7AeXP($&z6qt73#uq92QJVUss;GF4G&VHBL(P1L~ z&B9#!{=~DxfaTY}tgf*sx5Kz0gxMttjrgN8L?_HlZo`1W3No6ri={hKERLlmXawuq zYfvctzB$&&fbcOi6GfST3_JkBUM$P}`TSkW^9S^Kr=fbr=qdrVUl16l+w?lrcRvYG;4Vf5UgdGdT-;oDY@ow+0J^w@Y4 zHW7*?C+KVVZGp*uS|FQH*~K1#@96A(_)35~1W=MVR)X6@j~+oc7G?oA z6Cu271I)N^>FW*jSx8ET8QzmH2 z_veo5*DmqwmoLP4Be3B~gSytD!A`AZbWIY^AAf9V$qGMIxW$e^Z}6y&@ZTHYgC5Bt_aZ(PIy;2J$X7UmEoSr7-_e7{ zm$_^K{N`;cTRA_hY`Z>UoB7$yW%?P{grHGed_m()D7;Y7wmcx5PQ?v&Lvobb-m(w_ zd2Psy5#RhdhaG-hhhjBYEcaPC-+vjNvvPFjVf4NVZ?%hl57Tcc1AI#^C=`49M(Z(4 z;i6nId=5w36N7 zEixS9>jfRfd|Qw)+amOi>Q1V(BW^}_H_y7zK}GchdD0dsk?e9;Kp|6qJ?IKgnjghs z_6{Glvp>?+?JmNF1tX=q4pJrng9>k34BL9>s)P%dz!iw0XrhU)>!zLiz7})}+1c)F z50XL@i$~O;7On5CbaF2U%(Mf}$FA>IMqlPh312bixYmRKFm3JH+zWbeNpFCSL5R^DVtT!hs=NB;yi-9mg!R4KzNzkD^RxIFy4k$Z|zYn6XDt7+%XQ(B-RDD8|u` zh~}N5CK%XdwWf?Y^%y~u$&*ItA1xv=jYQtE?au*3ZXmj9hZdlNY_KtV4?$1ZZec$E zO8$Jqo=A@K@glH9RnOD)bzm0TnRkJ1l&7o3*!BGvNMDT$p$Aip#F%U4MkT)j_3NjG z?baz}56H!2x{GKCSO1){c34!b_Ktvc{>L#A)kl4fcDvHNTeV*J-s@D{lcs2MN%02e zTJjouwtG{K6e-XRK8o(9T16RW%?@EFP3RrFP}6w>X^0l8C;HC5V*Q{-c|Z_CAvk&Or0-MSOHw>}7pmCLRP*abG{81S*mSg=lkc&XqmM zo_((An#)-z5Mn7f;y;*}=c)lJWhnk~Lc!bOyphB(au5xZrxv#oWdb31!Bv-(JR5qF z9zu%78$2DXEqnO38G=$8W5P0mLuLANzfB7?MYi>zw22r=8*0vC6P-88nP6fRy}WX< zY=MU6&?iX@{2g+Nh&LG*B4VC#23gPB0258-f9>TiBSmbJFH*V2`n>lN*LV+cK2pjv zC_AVw<7FVZL5}aVjPbQ}Sk(!9sGksd7BLZklx#^CghM&$=#MLuTywrSMG7*3#VFlS z^UPxP1m2i}rlNY6Q(B;s0+aM+ffm1fa&?N;3FwOh7C(4)gUT`b8iaG@uYCO1cC?VA z7`Z4CawiXvWQ|2frkkf*@du){bbyq>Php$PL=g&Epf z95C)4HlB>BBml7iU<%uh3MiF|9I3KjYa*ihugSnrIwSj5Q zL6t-1PL0DS&zlbWa`s&->FImYLs4RGY(q+Pd}whr{`{7uokQsE>c5nNiJ*KARi+$1e~;!RAm z5VbsYpaA5_n9nkUYd6L|Mt7^1#0w2+WgvgGpg}svi?mc+8GFv5Nv^@fFV5pXkzFyU z0`0tfwY|rhlXZpYW_IYSAv4lc}^(sRK+ZVQ=%QjWe#;lSxCGYM;uwPge00loB^8U;NNwFc5A;S#M zA$W-fTdU&;Wb~t#Xm_4C{~`}bLBVlD?=Wu3;`rB=^hH>usq=N`D7xMXeLoqFwZ#L) z6|+s^Nos0xsSN}UaA8bQiRDHav#f0dk{XLON%l&&W6L98n*~q>u{GAlc^iT5bLj{j zDDh}-RHEvbb0pe6bBw!Sb!1&dCTK8wm4Rh#=Gc!-CpZEO=5x2<16X!uZH6WIVm%ot zo9;i2hKW_HWf!Ht9hW0{xuE_Ji@Y#3oowJ8Va4zuE5hu#qKo4+q-=s1t!X%y@wrnT zQ_d91TYiWy*gv;okQWYXtu5iJ;o^1u?7;p{+xF{22T0IaLAJ4eX}jzzA{>|obmCG&QB(5QuY` zY^F3J8O0k=3}xaA8Q*Mp3!JD^xPklh4KaSMI%}7) zP#4BQ#QGN*Rk>x}R3t{g-|5uwH?x7S61vE_i3ZxTvq$5LgTVwb%chOEk z?_^Q^%R-2s#Ar5kDqfb|{4<@t4>h0iH@JJ4<8C&Ce zDatXs>YoExKg_O+ataDYUIVKOxS1JXX}H2o!SX_k=}#jcUBWs0e(eR&8K?Z_Ssuh2 z?QXg)-2p(r(=6!KqRWZ8j9MA=z04y>8da~XuA#z10*g$0t&WTtasDjc;Lp7Z{BcEn z1ueK{9-2>fMjgd41IQ#PvC4u=+T?P9Tc513QC*V|vdiB|1vH**Mis8OkM}Ctr40ZQ zLzESD^~=#e`q1`PkbI~oB#E}+oXS$+`)tBZ&7+era_4YhE?|v9A=y28M3P2hoc^#Ltr+EDyr(i!|qjexX?nGf~ADf z;tl2uk7|oH6Cc2^XnIJ2mBMYELK8bd(@G4R?zt9dK~GUo12IZPp=CX;Y7$b(wCBLY zb?kEaKeEuo{r6Xa9qH@$*0g0oT?e6z0&TnyHkrImiXu!n^i29l{7R!+m{W)Z90P?% zS*jJq%*-r%W2;LDtgqgoHQ{kIA-~z>Cs~%;Yz=wEg=%-m3jn{7V;y;`>WdX?f?hSk zhlnA>P!azR=IL9{<%pobfUoXLDDD{cjNofUNvBKD-EH}GHcA5H=3b+HMCfW;fwM&M z9rk~5uXghBXLUjs_?wE8;_pHjYsl6IMpU3}PCR_>A)IXyp88r8*0tcDvZSD7eUfj= zkY1=b4{LmM=2dB-bI(m?Fq>c7k(E@3=UI04JChA9+qR`$iY(U%R%wV5H|wYeNgC{o zT+2|Qi<0Yo$Ozw)%W-E$iB$&i$s)Q`Q)Po)K~9=>x6x)yWEFbmX}`(;EMLx^-eQ%) zPNrf?R&ts~YiKZ6hCsA}L);|IY!=DD{w!U}6s71Yy~>KVx=V5`YMsDGzJ@mKhE&L2+$?_M#A0LvmV(mq6Pz8#1^53;qf#xr0wU(*Tk|HJgw zAA|a;9C|80zryP$%1NZ*c^GL?k}&?C@19J5g}s`VB9O5DkG?kwIqe;&|Btr9fQ4;a zxrSi_YAn|`kq*)=<~i%HG7+j95#rxb@b~POikqEEI@U|2)Rwbr`PTrn*&6QOg`mtg zJ0LO!NM>3730a>ol*8oUbC4Y?H1Ts#=bd%4w=d z{LA{(%0_+|m7{pXV<;J45P28Goz^TI3+b6ipp#6e#8Yq;Uel1`?50E|Gg!S+7J<;I z((!WwqmW?-*;|NaXV_l4;!g;z^358shJhmFKd{nkRim9M9efp!d} z@If~EmoOLZ8niN1og{N)z`v{>ZUb#!6+KlUeHhO~g+mndXgSaWsPRbIN5_aUzJhwk zlPB(PYMc*)%Ui=xARuFyKL$_cnpqnT#26zZ-|rcxirG75pqVh0?pMTRNmt?jE9AOBjQ36~}kT8i;YQoTG-i49zqv7bqqb_LwU6r|!URwZ*)? zq?NCnbeVv-#Qw{sRK80``^8o8Td|zdsy`lFW+0I`Sr4amgu`i=75oRsc@A>}%jGUG z8M*#%G7^CvEF)!dSc@nJU5%AYy~T!RGBd-F|JU6xd3!;RLtIS8S>g*KP55$twRS?g z!?W{sIp3pZV-y9Ip9YQf@})#P64|ZAL0vyKd<$zfnhM(lqUol_X)5Gq(47zYL_0(X z2X}S$A(D^Pc-LlzP1xik6Pva!IkRW)@SiB z)JjNc-4LPMF<6M!WQ&MhSK?*Cy7vFOGkX)KEhDKY-RuVl*Rm#9j-x%-db!&v ztr!6!JX1u$a&(0Y)W@rBxV2IyL9vQuK|MFTFx@~RX>hojIw zgM-dk$%H-6eq@l$4n@V}>8*e5M${#g@C)11Se5a7Jd zge23i4<*Ai%pqYTrGd)}e}FMAtesRE^aUKO$7W%dG}+J+6O}mbE0~XJlq{I23_Uk! zf>|UeW4BHx%PVH6+r?z?i?3&;B4vi7RU}8Zoi-olFjI$=2m^HjSd(eE1`yi?$bNI!0gB+(4P^0XVW^d;9YuReX zn2Q-}%v~;%KXI1T-7aOF3Y+!cUEj@4a#zII_fVbV5NNhDbsRHle*OpulAh*JJDUgc zD;EGqr!to}F~&-@V+7JJdE^ zk45^lm@LOwqV3_agiCPbGO2RHqpBayt8f zRaR1l$v}uQiabJ&y|_m*_Z|L78KJt-6LRB@Rf=sAcsB64Bqh*x=1+4)s-zUBNWPE2 z5o71RjR6kjCgt?F(B%FY1){%I4KPPjhiVwd?V1lY8nR($b zW#{pCrspQs%}QhM%WC9o!!bZ*XzWsMMbr6`B%e133S zB&1Lf@6L_N@>A|N`dHq7J_5?kXbMDRMuc;>-|37fB_o4zPkRna<_5Y&ot%BoPf-O-oGn2*4 z%+LahnVH#QMoY4onVDG@Sx)a~QcM8RXs0awY%&#|ppyU> zonFk>wJXz9ncPj6UZ?s!%Vd988b@>;R8DP9%j`97*a2xo^c{z>Qnsndr>97UECz!X zTiLV4F@rzwBCVFe{LQ>(K_5 z28I=zv_?@M-0Z+0FOs9iEk}+jTMCJs?0D_PtD7O3x3lCg#NBWvu?3sZ= zRFFj#d*nilKpzB&Es1nJCTP*@wqCEs}z6EFpavCob*+x^~?q?p3qt1mpB;x-x zKv9R0HEumva0$(kYjDk^K2f))ts%|9T~#uuk;osvTlwpE=-dD38{-PKa(_rFL?DC| zE%}ZD&D4~IogO}!5m8iq6Ceeqdy!FuHQ15!YuiG+J$n~I?#PF>8@EeNcVthZKqDu9 ztHpw^q0!7?D0FI^*}PRM91bIcwxA%;`SllDq&rAn=yKC0SYP!vvC&uDANZ>LrYnai zRM6xN`&uuevY#Q)&2*Kxd-TdfQz)HkOrs)h-lOeJ8K}^3Fi?MxtrxmPwiW(T!NxwQ z{82A|2h}YYFGj;OeN`?37emSl`;Z0RG?mz>4Vu9EB1V_xC|1&z(IqU7OAfiK)f1kW z?NZVeZ}O0Wz6|sn5tYRY;&Z1y@9{;l3=%TmfHp}EG-DYtX4Kzw>-dLX$+u^QU~_ec zXyA3IBc%Do%6RrlGqScBicuyxY3-wFa(N>JQ9hRUCegkPwxcv8DRku8=`+$!x8im$ zpj5^Zf~M8?g1LY+kUtRTQ7`FvZ|9qO2fp`8(|SY4F*{=qN&7QcdBPXd&wS+uubYyh zjG(SEg!@|9e1GcSBQ4}4ExzDR`3(*WnBW@vK}sXxQ&0XjFab!+g@q*y-J!>Kw>0|y zqI?oT*<0tL$~R)D^68ypHU%y(pegEJO>njpYOSdkBaQH z1L@u*=a5%~8T_1p#f14@Q=ydf=)|=@%d^QLJB4E~8&i?ivqc_eRB^@eJRke*{3QDV zHkw=fFpPa2%WxV$jwHrz0v|Cl|bj%&2@9kgP!;M)~V7eLX`;6_fxf!H*JY zJnBlsC9rOq$cF+W{()O9;)lin(oH^DQV4Z0Q>kek@Fb1Mc5$Oy=X94QbBPeB!`x~a za3u^F6>>jwKMq408*tfO;7b@xl_k6gjET_t7TdCzk<;zLNBnhkPpq*E%c$(T-@IjD z1Q=sQsay%V72jI4u(WC0vR{C|o0A9GJ)!mE)MtO%qo<-z^w{$_9+^kyJgERh-6Ew2 zkzKVy$|8rl$cHFfLK(Pw*s}NCYrvAw1KmsnzQ)y^BBGhKI3;!I5Zn$xcV8wm~BD zd6zkQUFG|ySnk^(ijmv6#Wo+LOC*}cKp$$4WOK6)bI79N@Um6{o<7Jj6#07UP_#7F z_F{3DcEJew>vMffb~q~l+oAs>4{OCo@_0xjDE-IJxqYh;;o48_x&}I7_yjhT}2@)itE+%rxDWcq`Vd=CIpkv)?2~LD66z|4C?|1yw z@e(B91KF@x- zMR&LmIm){#+a3;}q`zf;rWrMbUokNUO^D_MAqx2PrC#{B34g&@Rij;S^?dbZX^_mQ7-R-DrMj z+=2wS5`11+Jp$2UPs;`6%+KE4P8G$SlD;jS z@L`zdR^t=#Fh!I1yOj0t@XB5EhQQP!vD-c%{}Bv7Hk00*u%JXvxy(a8gfr=6 zIVw;#A&DPnWkppLkY*>DejG)4!VfmAoImDL#ZcT67@sY71_#qW3dko*FQgIS9i zn0FKawY9r3G?k!@k1D1AD1d+%oUWU}kQ1aR9qEjt1U{!~gj6L4H~7Yv#1Fl~Vy*7q z68-0ob`-?2bk{-pn;3(1)QanX%vd@&_6QSXE(FdUoQ*_i5%cnVVZc$}mYN-IjFr)i@rr8k-OM5k7F<#p4kM(~_~t*n!be|` zZO^u6O^F1SrDvGQP?=*f_Io5T?o$z#bI%ViFS7uylYKe-r63q=wLJ6Log&S>@c;=D zK1o#=Mm%@<&jDOtQ};Dz5zx!6E{Rh4;a8LjayTI(S3P$-cE7C2$j4v>Px)-FlS*f4 z#0nD@>e@`yEuFfYrx6#-B$+UIf&B>Ek}4Qa_v{&5%Xp%Z8vS1_ru=73CPd2+^l)JG z=wPb?GAHHL$Njtg|Mo|X{D3Z9*wK7p+BEodfT7c>cC!v#)x`uZ+l&!`pcWvt^rxOX zDsw`ALd)jrm+zeggon6}DB$<1kLT-4&8SNZVk{keJ<|^}b`NGijkaJ>UxW5g! z@S_GR`@1QkK%PGlW>B}~fVBh$jnEu=TlPeqA!LAOPi8~s+*Z%D5??9hVeyB-Ba zLX4LyO+&lG;et>)E&HI_5<5cSDbGqmA!I=3M9ZelV61+Ig$yhih`<@@sjrT@7=ie_ zHVYzrSY@FZs>Dg4DPSIymo($JzmE#OKXYhr9!--#K@lwCd^nLFvzO&eSip}!N~pwl zo*+H)WQqVwvFmwA=paR-f~OzXZs~Tun245a=n}C%Y~$9llMxLo8`89bU|RF(;=a0e zQ>#GYQ>Y(K4qdciHiKS};E*wfXwxUYEm3d_U5g%qW1Ca{U;NfTL@e0t%YwzuEL<&e z;?SDg

;OG^19ukFHtXD|KYV#oC_0GkWHG8=h`IHwFxV;wQkYN>VAt$KN!ztO%Q$ z;=O|!-uAG0^abURu_jnXOx7F6bXg==!w2U%lQu33z7Jjr!Nz=iq6mw?(xxXjP2S8Y zI3|qXIa>jQg0d3;p0%EFxfl77eNJdlCE6uqgR}CUOkk&@H+HZQlQ9wNk!J*4+u+*C z3zU{$va=sW>;~7V__+(XO~yH2&QW6c$A8bET6uzQN`~1LeSTwWknxHcxw$iQc1REnw49^o?O&r@o$2I#Ghc*8*I= zb1uV5z$D#9gS*fvi=fz8MiHk_N#n%+hNx8(K*X}DvvsqiFZY#w2`6HfrDWmtg( zR6wFolOK>gro_KRYT3pecH;Twbw%Jre<2vm-hrYgVmIYomL%Sry@v<~@Mr*K9oC_+ z^D3uE4ZN4%>`$m+7<98oWdIgO+A?Hp!hHDq&lR~p3$Z19@-e>jDQhZbHy~l@ctb_> zE+b`MHU&z%RkCAXo zfzC}3%|Mj|TFf6sT7riMa*}h^#v4z4yO!7nSPT)sqoUdX8)7yRX`m$qm&e6)yXxJm zMGMflf(tkjv&{GPg2%mrN^NoU8K6Q6eo$Z=Ym>=SrMCR*Euc*;`u;$uurKm&F+#*>AzWvUaBK`WNu5Mj-s91^tweuva%u9=!T+Xvh{&1CPpls@d z$OLd4oO6)Ae}*2_Rt0Do%kLy`roiq@LX8l7N!~mh_&x2M;$6FmC&*Uoena?^((WIa5f!uV1mNpVo z4>SI_OStUNyqSE+{A<-SxRdzD!BdhN?uW3rSJuY#*vW91ry#{vL8{l*qCm$Q{p(o5 z_zC!{l5eD(a$@LYl;otx{J#)#ne(SdBza$^abIz=4X%7*QI7oLPJRxXc1A*7R}8xIi3KnnURLJf-7b)>A(+ z#y7}Az1~EHx zOrbpltw}s*-yq$PBW9Olvaa$$fq1e6;>n%R14=ueE#(iM@_~3lo3nF@AJ_se_NEHv zh~&Pdk^uvwv$^?8s52oL2sY&UO}fdeD>pP)6QW`>p4+&Be?VkBHu`z2A#YiY95)R; z-}425qDG^eeRrBhn;0F{bjl0L1;?=e1Tw8SmqcaqmI8$@fp=6C)JgFcxxaFt1|lfZ z>JH1w0!|CQ4*3@`(rzx2b-bYA)4Q$bl;k-@Dg2eEUepNT0&nWjlFQe{e`hX%=q zao9;bux;!G{-!QrkoF> z&6bs&n%Ra)hm~2@5b^{X*D=2QRbnu0gJ)0FPXV%qpe-aWHA0O8T^#riX^jW zTdx0Z=ic~OmYT11y|VvAx(e9ML!`mwHRAXC6uDoQ569WV|I5a3m(om4%sAZ*ME#bA z)!a}%NWEDhT^qQiTBaxKH^MPOP$AU16MY+=`;KIKAjY&Nnnlb?34I>3o?5 z+!1kyM#V9tCLxDnmf&EM{{px3PXIKm5LpykW?JR5lXpTnmt zpxadmKh6r%Q;wSXi%Qf#anAcccFp9PGsE&M6UrY8Iy9w?WHlZYm$dc~A5orkR)Fkr4_!V5*7w zg+MR`oAEIh){-(XQ?7K~PbetQZ9SqAHt<2u_&j?4`+(+?J=ev!AUNtdHh~j4PYXOV z%pji#kZ@Wx%Y5D&xIzbEfAWFiVJFK#e;;WlsruK^v?U=w%t&=76j(&oCY}gaYeD|g z#d?f>N%G!mX>9vSieUf9vHF=r52iaM(2EL?Sa_;5L4k0zf%0<& zWJ#l^kx)*IEU4CiGBy^w5U1cTw#fe^tCzrV*eGJbY`^XKeQ`0n7q%5=?Donw=g|u{ z6Ej!tFH>G_`iH3Eup9AHT@W0}HDh2AC5o0&Ia?$aaf_TOhcWzX7|K6(Ib;3=jwes| zoBj;}JJN_Od|)g04@GPc8@KPOC-g!_M{t@3s|_iKaqXb=wPUJ>8cL3$D6RTj1ye^j z(pB`;p(f80a{t2&z>pYZOE%De766opVy?1e@0cRqT~yNoT-N|}-i!S~XPIf`J5}lb zQ=XfD-3gM55Cl@X+icMuR=&L5mG@C1$rQ&syPS%EThZTur%`_~i4M8kW2v7*1` z$x`;$I~=n4sy6h80EZyb{v|!_a*Gp-7IP7wCe@2q=F@|`Ln0pN0(PGL4_-WV9OLV7 zROd*1HMdA=p#b;T{AKIqoRPTWas-;GM5;UNW6tKP_Z4W(0-Vq>9xB@Js(I$%=8RYc z9q0|+Rs*QvfKGJcwvGa<-??gSZop7)8FTQ5@%Ux$$Hg9>TPIc$H^;Y7*#A~YNYHcmW2Q_#D>584$fW#hO#Vaf;D^_A+;UasiJT= zMF|V7(Rk!e&Gv`oI4MW6epg)q>1|$GKt`xv&4wJ;EQbIsYcJCeCjaZWD*Zg}Ov~zM z1UJptZCAZRPKZ`037j4s2i;p@BFiLYjt>Wiw=YJl$|0do^!&GNxP{k|-BAj%Z<&a3 zJU?k~2JqfKg$ZDgeY=y7Ycp-!twFTSbGi5vzJFsfS4*HPiP3Zj`*9Zt4x?|;2+KxX zFPj6?yCKMbWt;>C@Bft19K~7Jt99U@>{ixuk%FA&5ZUridbjdV-GrwM3iG8XYNf7w zj-bna0yR?d5BU{E8uvEaC6#lipJ?GqrL#Q#hr7)f`7_k`p&$Igr|TG*ZXMtjIYQ{J z9$|_mquYfh$=9>LAekq7_c3$>27>_+Key9hL@O*RT%YEu@Wu63GU4#%;7$cD)kO^# zWz)ugqE4OX%j+Yubr(R#0zu-sqr!g^7VRVP^Q+hfhNffruitBf82(dGIdBO;!~)lj zmV{MLI@qXVKYSG{S;S1WZu^%lkrgIv1$hkemmQhPH<1ZyBj*@m^BpwaQaO zGk+`#J@KdbDYcReHj2IzONtq4SA@}LAu0dkhe>tL;m#~MVxRxQ7OEH+t9w5|%{YMk zg)Md90G2*GI4gIlP(#&J@_??Z5mRFm*|P*hwDx%aFEdYv-`VYpdY zM~rngn#b)w3A}ysbw34$RW5|@RS=E-JlYC9ndAn_%!=W^q+&uWLV5jW8Fx@12ee`d z(2A5Wf1)xlMdvd8Tie`ql;$pGa}2-enXq*cUK~s-@{_V!z57Ffe6hLwn~MGlAtzNN zi^h-1436N3Ra|GB0LEqn471mrJAV9zA#zf=p+7aRQh<4&rCcazlZVY8x@-WASKtQO z(1BBgf;u9f?Dm59(P?ItPbEW7a#V)8CN|S(X{=p!O#p6GfGZ@uac9vHC-tHz@G+lb zDNPsK&M}vT%nAUeT=JI5N%pWt)bn&PfU-{7elZHH+(h>(9^;A{z2_;Y_AZf<-8#DQV<^G>k^AkHVzlBbIgNl6!Cu=1i`hk_>Xr-0XpJyEqhX0t% z!qV6?1#i@UG7}njK6hWPM~($~sF4&o5h{+%fC;HZ7qP=&C#&tK2YFKIj25uP z{HD;1g%yx_FPAfJ{xFWPev~j4h(?hkkZf*7t~F22$SB-*~HMOsZVs6A7C){`+(ro52pYgtTeX^ zj*Bg{nPkHInH5u{JKq^ZK1+x3)L1J?z*qVRhJ5?%gg_@1Nh9SbLy(+uF}$?4EkhZ-@7zRAX%~%9~>8SlxaPHGUofQHA3riu&o_~WkTy$rjf-Jd+(~cao}se)=Z-HHtj#OfY%TDR&MV` zZoWXBA5^7H&krMmEBB^G&GriWyEfkSwS37`(;w_whVHZqIUiQ_J@PJD`89T}Un^h@ ze%!`r*%k`4D|^z|d!sBv2(rS#e0P*5fBz4J)EiUR&u#p^ zo3)k`E^;g+?@CbT%IS&<9Ox0{ml%$(WtdBa_+Z>qMN-cvw8^s7#kf zKH4-6CG;OC@6=P}t2>H0^i`VMD#a7y%{81h`}>5ifUJvCwLlQ)y*bce8DH)sDtJ0Z z|I>th=2;n7rqh_TLeYNI7`&RR`U8-81DVCCqXV~i?Mi`Ny(BeNZF_~u_~UX@qW-gJ zOJO_RhrvKZQl5(+dUg@N%bzFT?@}|ZU)VRX)LjJKvXc7;4z}Uve2BJ>^Va)q5B9K3 zUzL377DoC%t)E6};)RJXZA!;wis1MlJBF#6TF15wt+hqcks7Vz{>(Qnju_eDw0rVQ z%C0T-0f@h$lHh(rESUYV=crrUKF8A%x?m-k3*Kll3p<%=5aD~!Ec3vjYhtxA7>a7V z5VC4dCHV88&dJ|=J{D%j6IPlLFsF}=E*(+z)6;ZR)XIf!|J9pU?u=2n7*hIYy%N4Q zIEAzpZjU?)Bs;D!99(jUG0V!c$f2K@o60IaUXn?IZ1&NNpz+2aYP_I=)qYTFC76!z zU`kStZFi-LlwZ_^oEXV9%Sp5-LF?=JfNXFN9e_~( zh&PF+cDx#2Z2gbC#l|*LAuh6AvL4}T=^6OuBF8i*-!RhSV~2@m{vEI=3Gb?E?W8ZB z*R;K=4f=s@_`st}al-fRIWj(oPB?@@FU7RGuSKN@ zzMsaeq7A3@BC)Lr^_Z(gE)^P&E3++*T*uKe?DJt(s`(hFSPV@62I3WtGxwd!dk5z# zajWuo#X`NNIpX4WXtzYTHVIub`_CW6gE#Ng1siTk4nBh?bkus0H`#VE)f#8~)>0w{ zIrQIgQhcbzxyhtkHY~|UlZ|I#`2;9EOTu;n7Hw`sH3r)>@E;D!TqePsMo^w7yxtbofT-pL?#;e4IfuhN3$1-i~zy*TkNhX zc)dHvJcp~`J@_hbED2KZs}v^6LJD{2*KLF))}wj-!P#RZL1HGht5QzIruuIU0=^7V z5LP#Jxe#t#XgD4VNf2Yr9r0!`D%R(RKicJYbqn3K zi$8E9qdgj$_id*-6oz0_J=u)Sl7&yf2XPFfl%@%)D|}h;_Gv0KUFD!e+_OB7L1)dl zbc8mBtR@>8#2X(VTALH=0>hTgG7~PM#z^@D$$C$spjzKlUc)fJ&?Ud<&|Ffwu7+7x zR#Y%Kr*D)9=Ri22BfMP(WS$G)7BTuwy|+fgk>*8&5`y?<;nj7ll=nZE4eSL@G?`!? zKZC0fjFlI{8P|AKBu*hJ@Wwq?(pK*XIq^H6Gued^x?7W-%DJ^=B8w=QR0E!Sg#)B+5Qc^@o=#FWZwZ#XD)c zdx=n#4)>V({lXmaAlU~EdschIA?J^GBhi{&avWC~VLMlzUVGw{0lR^79P>#2E&c4~ zT9bU)z3aKD)J9C-o^Hkw)F#?xbv{pIh|8L3{m!`hsx8m3`x@^xxzLBV9{!LZ8yeDvrMO>3OaHKikJtk4JjI}F*%snuID2EnlMc~tEdmYN_oeaxp^ z+Fsh~fPDAP)RdzVjL52bt?kD!i0{6?phP)SjhMY9jaHU|kRTVuz+5*I0WGfqpKchVwMxZIMrYX>r!x$P)h;2+u~to>&iXL zIHldtA^ z==B#)AUH&IL#GLYa?_TDzZ1lSUM^1WET>P~IXv(3%7>}aM2EIGHjZ@-8fC0MzT@Ih zRTd)QtqrF~nzS&DzvHbJ<-tV*ER+rSDeP4x>Xt~MVBRJv~ub!p6$n|NOuZKIY z{UM2#8E{dlhVex!0+X&O7E6P12vJvO1s;6WF5&{-@F^hQPx~85ZrpoWc6Wy-ONW8Y z)b$1s*XvwewR*n4<#3cQ5GJ}PT|mkN(F|EHLw8W?Z1`4Mzp5*~gh5;DTjcKT=?pm9 zu9>f%o&;;Oz%U6_rZ=Z}X0lamFlG!bjTsSiiof=-C)*--++wJ>jPOW*54WwY`pMPl z4h4;x%2D!uxgxXXR)@K_JzUf@`J!)I4=> z?l`8{VRG-M*7;I2>Nhh^w>Y}cz5JJYoYItZKYwVMVzs)ZU1AX>w=kURH9(fEjcB$0 zuNT|)DOg7W80xhY+fVs`Hr5O`Vc9-L5Jb5Zho$mw1d|S1U!p3BQk>t1%zpxt zNQgezfi<|{VNH|TXm{I}B(Jk5j<)#>gG*&MM6Y3|5sq;f4&~VfhlWAm1=WYSyXa~N z<@&Mr%Pv)O+qq~lD5N-;LuJc`YV`F9Vh92yh;9H=ctiS7-39tmn3RqBl7N0mCbmv8 zd@~t)*j&aIEB*vSinpHe^$V6Tefv*wk3PKXCr<3ORXfS`SKPIxtEk+KWzMBue9&`E zj$NfM;Y!s3qQCN@B^Ae`9!dGilKUOwI)`wTRtL9Njf-7Ia2zF3O^;||pmt1mITjoq z<7vFRiFz|d0GVoHbCKy4C1@Z+gOZS`CXg_`Yo(8G5)oYO2MqR}18rvlR5(JBwhcG- zW~k@**8y$k_;FAeD6l=Vv;(38)-h{)eWZZ*-Imyaru4SPi=;4<)vBR0-ETT1g61j0 zM}yqW`}wXLt`cFG)1>2<@(z%Co@?d@ul=@} zGV62KSYe-}imWL_*8RxDfBpuufi+eHqK?>`a-fijw0C|$+DaZFKE|@H6oQN-OIC-! zfAdOfncchlXm8J$%e6Tc}KX~xty%M<l=kcU+_79FjCN#FJhBOHCGwEk&+N=f(Mbm)5L2pgksa84)pXH^tN2c zRI>qo9=ckX>FZ+N)~F9_V}^C^X{3xP-bABc6Q-6Ku?)1=bkF@6n+K}RJW{xYRKgk| z>Vf+YXRIfqxI;+m^E9vtVgk?M>$OG6TT+3?0ZK>iD92yZuj@iVz{L@=qwfxo4iAB9 zJkK-~^^|bLJ>Mv#`!*DX4fv0j|7cJ25!w_dm5f$su+6Ip>;8~!fScJ|LF4NjuRvvK zR$ZxAhqIEgyzaIKP-pLb$W>*AsaJv+jN!P91ND@H;0O^9ScQnb_)3%gy%AA;2m}EI zq)~LBpM!Mx2Y3xgzJa=5gooTy>1Y=Xn7HxUBq5Etow{%UcMe*FE!x8-(0sfdX@TYW zR&whq1z_2@e(FRkX_--wMaeaMg2~vMm@LFr-h;+r(6Zz%O+^lCrK}?S1E3dq zI!MF9_w?Aqpb-A*PLavVD~P)eV3KwCJDq?$kQ3p^;JtdVVcp^^X-a67^Lk^%s~kvD0sgTXYJ*Z) z<`VFB`LJhZue8>|dPzIUWY{6K>AstY4xVt&e2IRY!ur~hCMRCzbl7eKvEjr`*mlL% z`%AUSwn1C2DoOu=vV4k%Z4HiS05*;=>0I5Hu;A-j{5BBb>3G z=9lfXY12h!h$QH`!gA_z)0Z3-oH!TDB)Qt8U3$ZOxYmhTI>dLQ_MKWTsygIFH08DHtGxs^Ol6?c#<3x_@- z9@z5_gwjQj0*>*Gv%o3qY}aC1e-ewNm(qN&uW-rvOWJh8Z6U~PB$(0q@wnoa_8qtd zJ4P%wWz&l-n_(1%D?RkYBk7QReQ>o|n{t|u4#uoA9bPE4c=)s9Tkx3 zbZ{i=W6|8F3)#krusqG;bdT6dYPh7a)t-v0;EqWN0#{}66Y*l>8v#-!>idu4WzKt& z$M_R{m2zb-y`!*9A?Hk1`IR+LWKeh%kfdBX;%${$TNvli%k(I$4HAu=rAi$ zm%9vb;L@~5iXSAsQz2o4d&5E=;0gwHQ#i}K*Lzz8IM1zq8N#-7wsfxCq=26DFCwA- z)}#SrUtKr{BCnV`IV-gwpX@@?E=ui#9tB<&Pg-Ds<$@($YY9rhDU zMf3pFNY}51pF7lC_+4rKj@d|kPj+QQ*+cs%D8IwgBs0h8))m647A*u;o9yeNRn||- zU9u99xKevJpU@V`mkuYhnT{Y4%REHqB}&d6p@P=ws(CX?+S=mjy|?*}4&#e)w!?mW z+8^6#37?J(-E65l#mUy{@c}>^#H(q z>9RrsWmCgvw0%8rpXp@#=OT&NO#IXzdTn|t_kkVopSj+6*NWFT%!JC?8M!xe5^|@$ zeh0N^*6RS?KYF=Dydbtgk{Aea5VL{#KYp>h6OZ`W^OEcOtH~L$e{BjC^#@P02JgUO zR@F61rt`^>sP)%d(={Rw=lToe+h<+rphI02(fD-d*SC?6|Jfwp|L4JmfeV?#J{=GO zB{4#AE>N+hd&uO)y$vUi;8NDVOnKh{b9nqIz*`*`XO4gYC?`j(x&Ym*&o)4uqT-JX zYW-LL^gpWiIaM@w?vg~n266x7wiI%!4;D;kREdEY^8#0FcIS>Mbo2JkcFIQtZhr;9 z0+>#-Y|H{6&8b;jPb2%SlxK60e)fh^a^Zd(BL>enV@++H07Y*&!)rVjMVz}Xhus{u z8ulT}7ZA`6+DqeN>KGJbJtL7l7K1#j5K~*{{`-6m_ zk2tfjCJv4urYHeG7QxWUI$~FQKUmz%(bXeQ#n~mHqp;#u&%q_&N7CZU)`R;eX2IqF zSCd@9q~dv;;zsNw)W{Ml)*$W&j6m^?CFYah8b9yEV* zDwJZ5DPLHE!s5*me`3}KSl8PdHv02>1P&&y)apjBtYko2i)D2Sy=P>p@@NA@$Yz0~ zow=V-g&&b8{*w>ILg-As=??gu$T0YOj0`o|_Bep8z#p|}!CaPaXp5_IU`m5quN9&~ zCtY*6%0)W^pXjfg(vT^D`+(A>k)p{lQq{tK~| zaV4=>asKE1K;0~VAGBEEWY&QG!u$&N3XX9pOW=mJSO`hZj5Y}z{+DT=AO7cHX!5P6 zvX2kmJc<+Iu;=UFgip#tFyL2Uq7Ju(pkv3)p6xeb0A-HVk6n?6nq zDI#CwDbP?j;pUD0K|e}?NCR%3R;l5gH*R`sLlHy*AL>uG#b?d}n5SbjC!%s++T;)d z7f~+{;UF1Qn7>-L0~=0$m}PvA)eyn>sgzSBuGM5)$t1}K>{RG)r-Tf|w~?NphhvPL zlt^(~j19t8%UTOSBh*T=1EsGLsI~@Oc_YhmT1;;xjsJUaI?J2CdDgmVzFZ zTu*Hk7X2oMC_&3c@qYp6cI|f#*ATvz<68)71;pU31iU2RzPAw4lytz;W)13atSQ%k z0Qo0EQ>)6Wnr%=zN-lB)1Q74EYx7lDaT`K?G#c3_`sZ&Y{i0l)O!^Tk{yPviVH~?@ zVB$vecf14l#raRy_}5(dvv{DY@RE5qf~$icj&fE-NevIlIC17;f$V;b{t%`_z&2M! zcVbk+LAbR6ZsCrXp`Ef6g;wIg@sQ5|)xVNs4m9jL>L0`Uu&7&i6x)`H(A$ECpi8=y zfLMk8R5qufqV2?C*Cz9~28C7KlxTPqGKU>riXa$8kYxMsdi=ydyh1u-vWN!e(C9zm z$JFGxWr&vc$84Vqa2be&FRawzM=ptWk}9VL+!5a*Wb_vfgSX*04Y>n4P~YF#(1tV2 z%g^zy?<15hu7_qUqe0-X$Q3<_CJVOQK8c+y6G~VjND3sh@&MfjC>HlA{c5`uW^y4S zuw&#U;vAapfjr<>(0Bk))n?v!i(vKe9y`F=6k1X!3vl>3iL-0#6}Q?vwBj4yb;?j7 z2N<oK@PX}Y%q!p!~tV3 zmJ-l7G?!+~)mq=8vEr754`b~qVE&NMh@dRTRBIh3Dq0%dnm(3aQwFV!Mw%SARH|2_ zKRYo{{&KtNA|Os+VTXm?{DJ&O&WG7Mr4q15rXqC@)>8WO5TL`Ob}AKiHi|&QBDPse zKd!p%5bXqJrST649jmlywTPns3VT|F4>ZV1sFis~tV@KlVa+)kyc}wE8){SUmbid6 z051**4~WKpy?T$B4*&$Ylcboz*R@MDvkMa6Og2Z#ri;Gj*g}1yWgbEI8Q#*i(ng=) z167^z?XkZ5=Q^Zy9PZ3yC3)fiYfvkVO^G}l-1@7e?`_|mE4nitq40|>M-tT^)nU$I>&cxRgq zgNKAWAYSzUkQePA{u~jMM8z@KB*99l)RB$cE5!sZs0#6vJ^t zEsGP>;6!ypDEio7;_xFaUZ6m4_y5CY#4rA*HNP_1kqKbqDm%&3UY?X2qC>`S3)ES( z0pE&&ej0F*{v9js6QED4u44v>@MdazLe&OYxTOZamEY}S9H2NbbpZu33f&UeW<^QYA(ya`&CDCre>y^~| z-}Qw{AG;QMEKurug`2+b@bdZ}&zJ%`bpy4zsTW`8Dv`>3loR-E0#0Cd?o=wR{T`2) zd@fgzz55N^A4-I}cQJEc`u4NLqZggLNH&A-;eZ+salPvXEK6>l0dB7x)&3DRidcaX=r|`^GA|P6qpYr4t z;eMMh2mYVw`|{q|#}mbLn^Q&T*AJrTvWnp@pFujo_eH*8znjiP{!5-jLd*VT=Ut+v zo}eIyj>c}t7oFd-_H=9L|u>8I@FEY;RKu8 zx?UZGv1#tUoA2(wD-=nyEWrIcH`DMiqN&$HPU42}ayQ|>-U7#>8zj`YGXIj;&*Rp7 z!gQtS?%wtr0Y@f!Ns4d@)VTRgBX)CI&i6%}o^vfbwU22`9c`WXt>YjtO7zQ@oCFl$ z+&A`M!_XepQ30&09?0Rb^;zT6bkc(X9g?k+1pgJQWyV)G?!vRDy3MIZa-GoQ^;*I` zX`U$+w7%;Z-{BLd^}9JsuUio4hG){~X2x3np*F9E{jGYwv`HdI*7y=)olwitU|fZ% zM6^D~xHm80;mN7)HUi+}u)2`quZDP3DaWKSW$xtRx`@(gCwEcR`+477KINZ1@eYkj z@hV9FNn#`S(ojP=+U5{`&S#f6I#e?4Zdj4xfB$Xr>CIEPEoLS@neXePLrxM3kmO2t zXvpNrXNz%dx|XF)+~Z}VsuL)0)^KPfmq6Q)Uz=NJ>$Zp|=l>37Sz2WPm%E-l@Z$aF z+_E@Sm=^7yfsOmHGMda) zm=ksEy4s&|Urcm|Q~&%QI3*;Q5Pp4|=s5|_&p+3)X!GK2Q?M$7)@CrE)Oi2RMovT2 z=>;C2uWFy4gM!=+GQ1RO%_a>dXCh zABOXCJ3qtzsbH1p{UmVfF4fWD`&1%&pCkGQo}tgxQa5kY?rQI8@IESbk zRpak1@iFaYw7*}4Za%i`8U;1K);{*-%1>%URHMX%A?}1N|KE0*0;!Kh?E3(vNzgtN zDDv1{CBCh*9(Z-zw&Lst-a)%wEK_2$0J#kNqJS zGYt{Y7#5BGAmUwYUV^ zy!I`Az4d90ha9~gWXR{gU|+#l;%6;y3-X_2gsA}cBnP?gUWo_p&gw#y>PFDGDw`Zj z=MAY8%hVtQ_3h|JYm^tnul8%`27Hj_YhSz~t(rY~Gi}%MJV5}2K_7@>#y%+TOoT(R z0YjiYi|3y;otje0^RPxkr2S?zA=218nX{;!T^n(Boh4|^i8tuZ8MNpLSOy*D7<1iU zUO!ArzHowcjS9!8yEYciJD3)=^G;Td<~q@W zh4J7=vcE;>&LI8r44=ul8JT>S`SPBC@Dcqbrk4qpH4yxq!^{SAVQZw%7x~$sTR*Mm zeFxekW6gbIV?`?s_~QGfRiOm_nSQDnLZ`SFQ_ncXG3%eQ8&wHW2V*^1yZLd9FWX3l z;5A(3PS{6!yP1N`0sccH7Y;s2emJ|=XB3LRz-`xlB3pjklVm!GsgIu1+Jet7HzDFR z4;BkQ5)p>O2LAGUV*ZN2js$}B9KU;~8G)$ZGdLLA&MK%UCgx}lS+b*5MxXU5HwDVV zd-p^WLx)EX`q~>JN_N^TybIZQPHUMQD`I2FSfR(x(AOcjHd?fvJIajJtK#o?r(19uhN;U0B zkGlA}Uq8f!@{1&Qz^)t;s!7XTbc@sHhDHLUKRRO^gy+DgndyRYzLK>$ksN@QFus4Y zW$HB@IEcrP`n7{Tg1|GxJy$Z>YZGeoObG^QCCDaY1=QpLA&(F&4Bf0Yn z;ye~7KH$W%meMsWaIuMio4|hD$K6y_83=;q2UWJH1Ab}OtE>FW7ZhMtyyNFVJ_Nnv z7i#p1V@Uu)e8lDX&LX}tHAv2`Z6oYSHbuMd*1_1slt!v&gFI&f=QtWSg`^C|l(L0o~~t|!4h zR&976m0BoK0MuP~Z>;On%xZ!7msUszO6!~qBf!mK5Q5X#e)CM2Q8Nq5uYW=|R;#Xm zj*Lp2EhW0aCu#d99z^Yh$^Rp!; z!cX{wVeNq|KK;(4Hv`wJs6Zl)7}+_W`&)W9iT3AK;Q!?k zyAYG*eO$rJJ#=!jh1|OTQ0UUVE*yGUv3nq%lQOKiIOpH)UT zs>&-rPyzPT`+vE>?=;IOHp4Aao7B}*afD&jW?mtN-&+ie5qyh3dvoNkhL6b@N|OE= z%kT&%)+ZV(2y=He6;XjI6z)`0Hr0DDOYFN@T1**vK?0jG`|4I+5034Sbs2=e@o5l< zvbpf2Y}mbGEG!oPC*uNERP)^%t!za9hiP_1%tQO}`Mw6+$+NZl86I*CHAx(IpR^Ce z=JAI@Ka3}SJ6C!zyn7k*YkGfXR+*LJ_cYNYA1ww+0nChbNTFTdEh~K@yTQ#eJi&D9 z9gV4(P^#4=jybD^BK@K}@0P4X)1LS-PoeE2mrUxXWa^z8EY*#W0g*t!Xr{elt)&FD zx=LBr92nL3m=CBqjLFl!9q!Yv*)Bj?EQ#mm0_B#Gxq+d@Fu&bjXE;P@uuYe3!T$seJpBL+7PiPx)Lb_+J&0}J;? ztsm{WY^?y&eikoY){xTMbB64FeYMFEd2e(Q5hJ!u;q!~4*W6w&kJOjWe zv%1bPXPff+@B2)_maXc|-&v>JL_VY2oIOEB3F+q+r`6#qPaSrqtnRvcMWP*nZ)&x0 zf<7SLX2|1&arvaIt-Y#lEsKS({@)w&2q(^bQ%4zD6SR_D8vEDyL2{R5NY(wlzvm?SSi1^Dnj3Q>^I zT?mi5TV{v8(P}OUA2!kfsbAT&Pe5GJurIi7+UCb7G#|Wf`NElMU>0PG_()pYjoLd2 zJNzT?+h0|(f4T6#*aFh#4p)4m#0jOzaAMsDJQgu+Ad?VeOouV*0jEYp~R>h)?Ohve8Z6Q3J-D&4BVJ#d{p=QRvA#kJtttrVD`mDyacz&vQ4P zDt)c#+|Ud6;X9f|L9FZC>|Bi#dk`(2nfdRPoH(a9&E+ z>hmLg0hpZQUuD$d4NtLb~7u~FEO#qn*a48JqvB9PQ|D4b#| zi-q1wfAz$B0>=!PtoluDjn2uYl^$ZUqt)|+{7cJ@Lgw&W;~vzumW3KRm( zIb;GV3dpE)PY$GBo<0p$b(fVm$42gqwF-KdxHe$UNjmmq3!E+%6;vG)jB9%@GzF>E_)5tDEiJVRp zu%t|!4G1Nv3ST}ad0yabK04>=QO{(@%s~iD4z;27G7=9pFD%H32ARKz6dDVbs=S6c z7;6uzjW*|!I|G(xU7Yc=Ruwoy!G9e)*s#$#SoheLF~%k7;r&ko`u7&p#CY!VNdCq3 z=%F%b_Gz-6iB}mpBZ@~Z{87XLw4v$UnM(mj+It)(t;B>4&v1zh{V%Rq3?y-8zz)U# z;x@Q5sm>A~cwMx7J$nvM+;yLf3+mDple8m=^repBirwspByf?iC&jV;+~gN_okhy@ z@~z|AFr6oHwuP5IpE7X?vQB>AU)j2`6Uj0bX87>s-tJ`$x4!){Nu<-Y?U>622O@O! zZJtvBnLW6g^~((6SCIz5w-V~U5&RvR>yuih_~9Hr@Z7bmLOC^WaBIa>hyZ?w?+*12Z>UUQF7> z>C6;z<5qg#C_rOb4WR|G4*-=HBiDJMp`EjTt#j1aSJ{pliBnOLxV4Z zhL~DUtMpPrx6~nI>0le_^MX{v*Cr>9>t|~9_3qReysff7QsrOLj!Z zwz3fDhm9+_EeY=G(@H8om$zDjF96jLhJTr+_|xtV`8bdNFJl>|%;)^aWziwe48oHo zgpVz#r3V@!ow9RF*yAY2@C}z1fDLf^1PkTFG#a*>nw8lt6n%sj4C{HnPsmNZQrGUy zG;#ox;T3j1`=1DNjK1ZmKLY#!Zq_V(M)nrZ9W&nAL~ zAocvfv@Yg_<^({}K()5w+uQ!L#rmO`#{Y2CtS1L>6sGo4AZ?JUYhl^RN=d4(tQ?Os zU^afHA1xFPOuVLOJsn@j7SDdmu3E$XPr^FccE>47kRRXjWPn+33{`_(@L@|Chz|ax zR+p_}eK(5%$W7|Dsufep-wax)epq4r$Ne`(N0kVrXWCKP$7a4~n!BmnQ=M-njxB;> zRD1`hCS7D;HVWpr;=s)4^+?{!%^+DtjMvKE!$w(7n~S(z>(7w50LOB*qK4B7n$~L% z(j!bkypIz$4sN6L-AmA^StdqpbVY*-kX#3OYBLwROU86nbz@n|#bePCpR5mF8^f*X zcox?J_b;r`)t=T@c=n2pAXLTSl63HUZz*KocIVeOKF4pw2|SKDtFR}DSrUUx z&*R1;p0OT%EuWsR_ZM2opV`(yFlL=_M;72p2S>s`)#n4HZz-%y?YYGL#6teJT~6$i z;}peEjDVWuaT#Kq1$O`d@p(d@Pg*0bv5*?yl>72@&at_M^DWNTmgR9te!6$XnCgJAdaSra3Wv~gaO!}l zWuup0p^jMCx6gc!oteXh7tR{=!e+xa#GUEw*Er4K_@~>&$>2MjKvJn~-WEDcd4v(WlX;0A$g!G^K{YhDlUss85Zl|1t6+;NAjZ?4$UHg@&<|1`E1 z=OrDe>J?*%8dnFP@(D3Dk<9qnFB*N0M-*N2mpQ&}k}*6x_xn)MNh?%z zcyl2|t%n#oN%HFXKWx_f&$_-`#q3%}^?;(sDkD9Qhv$l3qP_pQ|DheKooJ@$OL*Yn>;shZaF97Of2IGOqUnua;8{&`W;F4Oia*%O{p3Ip?d zvFa*fqhSH*J72%3h(?mB5J6#$n21 zU5SLuB?e?ph^qd9_Wj7)7kzmplO@Nq^~}4zQf%NjW_huTB|QwiiX1)vB(S7N?qLr) zKCZO3fT#0nPEQa!x0j@H+MS*rmRysTW#>XoAZmuGE~nYaPtU&if~4UAn;q$D3NPIH z-BR|pbdQJ1jh#)dEowNih@}$^N-7rlC}k0DeH~4|>^i~jnriNu0`V-l@E|QJ{-FsJ z>A(8}6`TfKSg_XETjKL>mRtL^mCVJ&HG|>(vp_iM& z2ahtV>o4di(GO>=v#$!fg|fH!)3?#(-|PMIqU(+x&9@;Z6Uw35cknT+3l`-Nh36lE zo3@g^rfe~Sf|5mr1&~pU3y)U=?h!diC9mndQpD>jj-Czvb~Jy(hLp_Wabt(dXcmXj zjNEo1wHNR*zM6=$4t4*MWwtqYKUzCPr14ewgQG=l5k0@KxrE0lbRt38LKbcxWy42T zeH@T}#aVpM`L=wmyCazdvLp3E!W3LTpUN6Z!E0}7Cv!0Rq1*aUY1&4nzV_IuOc@rslEqoi|N9P6M`(tf#t zmqqB-yH_s$iKNa}lMk{!am!f!RI`#-ZVu6yOP5M7&0E@sxm0%{ra$J+}_tb$A{7b#nx zWpgGcX7+Dj_2-?C;>?Lr4?Ve%*la71(z20uQbnl->)_^=54I(tb1Z_;L?;rZawQuj zr|nC@Qgr=FkQHT@oHne4Ghc%TIok!(f|$9o9Jh9Os7bGw5Olq1v%xfW#uQL~H;*(1 za8z`q)<0$XZpbMfsr+aXzK1H=l1-xSA%wzE5`(_>7Iw!}a9r0wo3I_sp + + + +```go +func NewConsumer(conf *Config) (*Consumer, error) + +func (c *Consumer) Close() error + +func (c *Consumer) Commit(ctx context.Context, message unsafe.Pointer) error + +func (c *Consumer) FreeMessage(message unsafe.Pointer) + +func (c *Consumer) Poll(timeout time.Duration) (*Result, error) + +func (c *Consumer) Subscribe(topics []string) error + +func (c *Consumer) Unsubscribe() error +``` + + + + + +```rust +impl TBuilder for TmqBuilder + fn from_dsn(dsn: D) -> Result + fn build(&self) -> Result + +impl AsAsyncConsumer for Consumer + async fn subscribe, I: IntoIterator + Send>( + &mut self, + topics: I, + ) -> Result<(), Self::Error>; + fn stream( + &self, + ) -> Pin< + Box< + dyn '_ + + Send + + futures::Stream< + Item = Result<(Self::Offset, MessageSet), Self::Error>, + >, + >, + >; + async fn commit(&self, offset: Self::Offset) -> Result<(), Self::Error>; + + async fn unsubscribe(self); +``` + +了解更多详情,请点击[Crate taos](https://docs.rs/taos)。 + + + + +```python +class TaosConsumer(): + def __init__(self, *topics, **configs) + + def __iter__(self) + + def __next__(self) + + def sync_next(self) + + def subscription(self) + + def unsubscribe(self) + + def close(self) + + def __del__(self) +``` + + + + +### 配置 TDengine DSN + +您必须先为 GO 语言和 RUST 语言设置下面的内容 + + + +```shell +export TDENGINE_CLOUD_TMQ="" +``` + + + + +```shell +set TDENGINE_CLOUD_TMQ= +``` + + + + +```powershell +$env:TDENGINE_CLOUD_TMQ='' +``` + + + + +:::note +请使用实际值替换,格式类似于`wss://)/rest/tmq?token=`。获取`TDENGINE_CLOUD_TMQ`的实际值,请登录[TDengine Cloud](https://cloud.taosdata.com),然后在左边菜单点击**数据订阅**,然后再想消费的主题旁边的**示例代码**操作图标进入该主题的**示例代码**部分。 +::: + +特别对于 Python 语言,您需要设置下面的环境变量: + + + +```shell +export TDENGINE_CLOUD_ENDPOINT="" +export TDENGINE_CLOUD_TOKEN="" +``` + + + + +```shell +set TDENGINE_CLOUD_ENDPOINT= +set TDENGINE_CLOUD_TOKEN= +``` + + + + +```powershell +$env:TDENGINE_CLOUD_ENDPOINT='' +$env:TDENGINE_CLOUD_TOKEN='' +``` + + + + +:::note +请使用实际值替换。获取这些实际值,请登录[TDengine Cloud](https://cloud.taosdata.com),然后在左边菜单点击**数据订阅**,然后再想消费的主题旁边的**示例代码**操作图标进入该主题的**示例代码**部分。 +::: + +### 从实例创建消费者 + + +消费者需要通过一系列配置选项创建,基础配置项如下表所示: + +| 参数名称 | 类型 | 参数说明 | 备注 | +| :----------------------------: | :-----: | -------------------------------------------------------- | ------------------------------------------- | +| `td.connect.ip` | string | 用于创建连接,同 `taos_connect` | | +| `td.connect.user` | string | 用于创建连接,同 `taos_connect` | | +| `td.connect.pass` | string | 用于创建连接,同 `taos_connect` | | +| `td.connect.port` | integer | 用于创建连接,同 `taos_connect` | | +| `group.id` | string | 消费组 ID,同一消费组共享消费进度 | **必填项**。最大长度:192。 | +| `client.id` | string | 客户端 ID | 最大长度:192。 | +| `auto.offset.reset` | enum | 消费组订阅的初始位置 | 可选:`earliest`(default), `latest`, `none` | +| `enable.auto.commit` | boolean | 是否启用消费位点自动提交 | 合法值:`true`, `false`。 | +| `auto.commit.interval.ms` | integer | 以毫秒为单位的消费记录自动提交消费位点时间间 | 默认 5000 m | +| `enable.heartbeat.background` | boolean | 启用后台心跳,启用后即使长时间不 poll 消息也不会造成离线 | 默认开启 | +| `experimental.snapshot.enable` | boolean | 是否允许从 TSDB 消费数据 | 实验功能,默认关闭 | +| `msg.with.table.name` | boolean | 是否允许从消息中解析表名, 不适用于列订阅(列订阅时可将 tbname 作为列写入 subquery 语句) | | + +对于不同编程语言,其设置方式如下: + + + + + +```go +import ( + "github.com/taosdata/driver-go/v3/common" + tmqcommon "github.com/taosdata/driver-go/v3/common/tmq" + "github.com/taosdata/driver-go/v3/ws/tmq" +) +tmqStr := os.Getenv("TDENGINE_CLOUD_TMQ") +consumer, err := tmq.NewConsumer(&tmqcommon.ConfigMap{ + "ws.url": tmqStr, + "ws.message.channelLen": uint(0), + "ws.message.timeout": common.DefaultMessageTimeout, + "ws.message.writeWait": common.DefaultWriteWait, + "group.id": "test_group", + "client.id": "test_consumer_ws", + "auto.offset.reset": "earliest", +}) +if err != nil { + panic(err) +} +``` + + + + + +```rust +let tmq_str = std::env::var("TDENGINE_CLOUD_TMQ")?; +let tmq_uri = format!( "{}&group.id=test_group_rs&client.id=test_consumer_ws", tmq_str); +println!("request tmq URI is {tmq_uri}\n"); +let tmq = TmqBuilder::from_dsn(tmq_uri,)?; +let mut consumer = tmq.build()?; +``` + + + + + +Python 程序可以配置的参数有: + +| 参数名称 | 类型 | 参数说明 | 备注 | +|:------:|:----:|:-------:|:---:| +| `td.connect.ip` | string | 用于创建连接|| +| `td.connect.user` | string | 用于创建连接|| +| `td.connect.pass` | string | 用于创建连接|| +| `td.connect.port` | string | 用于创建连接|| +| `group.id` | string | 消费组 ID,同一消费组共享消费进度 | **必填项**。最大长度:192 | +| `client.id` | string | 客户端 ID | 最大长度:192 | +| `msg.with.table.name` | string | 是否允许从消息中解析表名,不适用于列订阅 | 合法值:`true`, `false` | +| `enable.auto.commit` | string | 启用自动提交 | 合法值:`true`, `false` | +| `auto.commit.interval.ms` | string | 以毫秒为单位的自动提交时间间隔 | 默认值:5000 ms | +| `auto.offset.reset` | string | 消费组订阅的初始位置 | 可选:`earliest`(default), `latest`, `none` | +| `experimental.snapshot.enable` | string | 是否允许从 TSDB 消费数据 | 合法值:`true`, `false` | +| `enable.heartbeat.background` | string | 启用后台心跳,启用后即使长时间不 poll 消息也不会造成离线 | 合法值:`true`, `false` | + +```python +endpoint = os.environ["TDENGINE_CLOUD_ENDPOINT"] +token = os.environ["TDENGINE_CLOUD_TOKEN"] + +conf = { + # auth options + "td.connect.websocket.scheme": "wss", + "td.connect.ip": endpoint, + "td.connect.token": token, + # consume options + "group.id": "test_group_py", + "client.id": "test_consumer_ws_py", +} +consumer = Consumer(conf) +``` + + + + +上述配置中包括 consumer group ID,如果多个消费者指定的 consumer group ID 一样,则自动形成一个消费者组织,共享消费进度。 + +### 订阅主题 + +一个消费者支持同时订阅多个主题。 + + + + + +```go +err = consumer.Subscribe("", nil) +if err != nil { + panic(err) +} +``` + + + + +```rust +consumer.subscribe([""]).await?; +``` + + + + + +```python +consumer.subscribe([""]) +``` + + + + +:::note +请使用实际值替换。获取这个实际值,请登录[TDengine Cloud](https://cloud.taosdata.com),然后在左边菜单点击**数据订阅**,然后复制您想消费的主题名称。 +::: + +## 消费消息 + +以下代码展示了不同语言下如何对主题的消息进行消费。 + + + + + +```go +for { + ev := consumer.Poll(0) + if ev != nil { + switch e := ev.(type) { + case *tmqcommon.DataMessage: + fmt.Printf("get message:%v\n", e.String()) + consumer.Commit() + case tmqcommon.Error: + fmt.Printf("%% Error: %v: %v\n", e.Code(), e) + return + default: + fmt.Printf("unexpected event:%v\n", e) + return + } + } +} +``` + + + + + +```rust +// consume loop +consumer + .stream() + .try_for_each_concurrent(10, |(offset, message)| async { + let topic = offset.topic(); + // the vgroup id, like partition id in kafka. + let vgroup_id = offset.vgroup_id(); + println!("* in vgroup id {vgroup_id} of topic {topic}\n"); + + if let Some(data) = message.into_data() { + while let Some(block) = data.fetch_raw_block().await? { + // A two-dimension matrix while each cell is a [taos::Value] object. + let values = block.to_values(); + // Number of rows. + assert_eq!(values.len(), block.nrows()); + // Number of columns + assert_eq!(values[0].len(), block.ncols()); + println!("first row: {}", values[0].iter().join(", ")); + } + } + consumer.commit(offset).await?; + Ok(()) + }) + .await?; +``` + + + + +```python +while 1: + message = consumer.poll(timeout=1.0) + if message: + id = message.vgroup() + topic = message.topic() + database = message.database() + + for block in message: + nrows = block.nrows() + ncols = block.ncols() + for row in block: + print(row) + values = block.fetchall() + print(nrows, ncols) + else: + break +``` + + + + +## 结束消费 + +消费结束后,应当取消订阅。 + + + + + +```go +consumer.Close() +``` + + + + + +```rust +consumer.unsubscribe().await; +``` + + + + + +```py +# Unsubscribe +consumer.unsubscribe() +# Close consumer +consumer.close() +``` + + + + + +### 示例代码 + +在下面是完整的展示如何消费共享主题**test**的示例代码: + + + + + +```go +{{#include docs/examples/go/sub/cloud/main.go}} +``` + + + + + +```rust +{{#include docs/examples/rust/cloud-example/examples/sub.rs}} +``` + + + + + +```python +{{#include docs/examples/python/cloud/sub.py}} +``` + + + + diff --git a/docs/zh/12-data-subscription/share/share-topic-adduser.webp b/docs/zh/12-data-subscription/share/share-topic-adduser.webp new file mode 100644 index 0000000000000000000000000000000000000000..82b39292af2d8bcf189cf702436aa2b565ca130f GIT binary patch literal 6210 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 g4Lt{4kTNj23L*))C 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 literal 0 HcmV?d00001 diff --git a/docs/zh/12-data-subscription/share/share-topic-usergroup.webp b/docs/zh/12-data-subscription/share/share-topic-usergroup.webp new file mode 100644 index 0000000000000000000000000000000000000000..d9a0899e2f8461717d012a186a468b1807d111f1 GIT binary patch literal 21424 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

0DMN;4J??itm$`^j`OZtc2=4NBno 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 OSM|TD|5g33!6pFUt`J}V literal 0 HcmV?d00001 diff --git a/docs/zh/12-data-subscription/topic/add-topic-stable.webp b/docs/zh/12-data-subscription/topic/add-topic-stable.webp new file mode 100644 index 0000000000000000000000000000000000000000..1cc472439f4cddd68e7a1a3b97dab68216c3b9ec GIT binary patch literal 9204 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

{OO~Q;z2& zNt)X9)BsC6$M4MA?2{zo{Z7zi`@I;K2a7rOhERw+KY~hT298Om4D3xl-pe=4R>f9D0jnrYY#O;E&1Gzh(w^CPh6yyaZ{9oBjI5 z$ofqpDEEsMc}7o}0io0T^4Eqz+=i|)!i-tp%)KM`c|&k`UX^oOzTV8gpYzFoRc1C8 z?p9i}+U`ILeM2J1+gVyLL?8?2f~J-R6|%!%+fS zkjKfr`CIaY#mHR0CDUg*fKy31?T^G9tOsYgM6V^0KIuL%H^_*|}NQ(7R^(vP)U<{R(*bh@rLPR_HXm(gu&fCbzz+-0!cE~_elwTpD2`>`su#ll7`~B%~Snpji!)W z5A5lkazOhvps{n`p0ewj^{MAs>OlRRje)$Ar!K@3S9R$2@HERv&43(=A-{sIr(UCv z2;_aH0YH`Tqb-*2;6R!OpsaBEyqNJV-wSd{A%3B%LR*Dhhl#k=R+gtLO8?%iqzcO- z4R{CgAFU07Ppe*dAG~5e%un_jvd>9ikAR{o_irBx1bQgEh>i4LT<6}CWyW8xeJKq; zhgEtL4?67d&;fta3CH^CDh;D8+gRzzrvrH*vf6ziLeA(Qn)=SOjk~3;mm2VE7lFm? zOnePtydaH^RMUw-8FF-QoUZPlwR`aJPt*BcLBo&Z-{xibEB ztV%NUgadJ`B|G45QyLJkW64Kz)k5_v+Tb1J325Bu1~G`3va#tH?GXvc!|?Kn9CBY4 z%P)yYjDA(fU_Ulo=xsa|VRbj;iVZq+wZu1f#B%aAQ%QXCJb}8nJn}1S*6HE@476IA z!zh>(B;%U6!*e~BVDeOJ@3(!>MV!b%22*^Sy3Dm1yTdZ~&}Q-Nhj6|Vd?c$dlS4IM z>EZHSXqx#hUw~TfkkTa~`CVl1`BA!SJv*{>_u>PpOKN>JBXG(q1nvnT_$OuV<6fNJ z4J{?xh6iTHSP=JP3B#)kTjlLSwBbSpgt*@ziK=D%knR6}KZEcw{C$~8`M+1L*WV%k zyHFhxIt>K3JfpV3**)e3$d#p4qUMA1{re<=sN9#w#@=JILRu)d&(0gSH+v|17#dfy we+J4$Nv~nEZo#D2b?>_I9dfl_<};pE0{3&J5uVVF=zR-Mmz(~*gi4A0KOc9j4gdfE literal 0 HcmV?d00001 diff --git a/docs/zh/12-data-subscription/topic/add-topic-sub-stable.webp b/docs/zh/12-data-subscription/topic/add-topic-sub-stable.webp new file mode 100644 index 0000000000000000000000000000000000000000..1d68c5fb8e972f9916119ed81df2e3b47871ef00 GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/docs/zh/12-data-subscription/topic/add-topic-sub-table.webp b/docs/zh/12-data-subscription/topic/add-topic-sub-table.webp new file mode 100644 index 0000000000000000000000000000000000000000..526bb86711b315c88a86b74511c38457f6efc314 GIT binary patch literal 18454 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

aG3)+jw)3+n5cN;(%i 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 EU&#!yr~m)} literal 0 HcmV?d00001 diff --git a/docs/zh/12-stream.md b/docs/zh/12-stream.md new file mode 100644 index 0000000000..7e3d723b16 --- /dev/null +++ b/docs/zh/12-stream.md @@ -0,0 +1,112 @@ +--- +sidebar_label: 流式计算 +description: "TDengine 流式计算将数据的写入、预处理、复杂分析、实时计算、报警触发等功能融为一体,是一个能够降低用户部署成本、存储成本和运维成本的计算引擎。" +title: 流式计算 +--- + +在时序数据的处理中,经常要对原始数据进行清洗、预处理,再使用时序数据库进行长久的储存。在传统的时序数据解决方案中,常常需要部署 Kafka、Flink 等流处理系统。而流处理系统的复杂性,带来了高昂的开发与运维成本。 + +TDengine 3.0 的流式计算引擎提供了实时处理写入的数据流的能力,使用 SQL 定义实时流变换,当数据被写入流的源表后,数据会被以定义的方式自动处理,并根据定义的触发模式向目的表推送结果。它提供了替代复杂流处理系统的轻量级解决方案,并能够在高吞吐的数据写入的情况下,提供毫秒级的计算结果延迟。 + +流式计算可以包含数据过滤,标量函数计算(含UDF),以及窗口聚合(支持滑动窗口、会话窗口与状态窗口),可以以超级表、子表、普通表为源表,写入到目的超级表。在创建流时,目的超级表将被自动创建,随后新插入的数据会被流定义的方式处理并写入其中,通过 partition by 子句,可以以表名或标签划分 partition,不同的 partition 将写入到目的超级表的不同子表。 + +TDengine 的流式计算能够支持分布在多个 vnode 中的超级表聚合;还能够处理乱序数据的写入:它提供了 watermark 机制以度量容忍数据乱序的程度,并提供了 ignore expired 配置项以决定乱序数据的处理策略——丢弃或者重新计算。 + +详见 [流式计算](../../taos-sql/stream) + +## 流式计算的创建 + +```sql +CREATE STREAM [IF NOT EXISTS] stream_name [stream_options] INTO stb_name AS subquery +stream_options: { + TRIGGER [AT_ONCE | WINDOW_CLOSE | MAX_DELAY time] + WATERMARK time +} +``` + +详细的语法规则参考 [流式计算](../../taos-sql/stream) + +## 示例一 + +企业电表的数据经常都是成百上千亿条的,那么想要将这些分散、凌乱的数据清洗或转换都需要比较长的时间,很难做到高效性和实时性,以下例子中,通过流计算可以将电表电压大于 220V 的数据清洗掉,然后以 5 秒为窗口整合并计算出每个窗口中电流的最大值,最后将结果输出到指定的数据表中。 + +### 为原始数据创建 DB + +在 TDengine Cloud 的数据浏览器里面创建数据库 `power`,然后如下创建四张超级表: + +```sql +CREATE STABLE power.meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int); + +CREATE TABLE power.d101 USING power.meters TAGS ("California.SanFrancisco", 2); +CREATE TABLE power.d102 USING power.meters TAGS ("California.SanFrancisco", 3); +CREATE TABLE power.d103 USING power.meters TAGS ("California.LosAngeles", 2); +CREATE TABLE power.d104 USING power.meters TAGS ("California.LosAngeles", 3); +``` + +### 创建流 + +```sql +create stream current_stream into power.current_stream_output_stb as select _wstart as wstart, _wend as wend, max(current) as max_current from power.meters where voltage <= 220 interval (5s); +``` + +### 写入数据 +```sql +insert into power.d101 values("2018-10-03 14:38:05.000", 10.30000, 219, 0.31000); +insert into power.d101 values("2018-10-03 14:38:15.000", 12.60000, 218, 0.33000); +insert into power.d101 values("2018-10-03 14:38:16.800", 12.30000, 221, 0.31000); +insert into power.d102 values("2018-10-03 14:38:16.650", 10.30000, 218, 0.25000); +insert into power.d103 values("2018-10-03 14:38:05.500", 11.80000, 221, 0.28000); +insert into power.d103 values("2018-10-03 14:38:16.600", 13.40000, 223, 0.29000); +insert into power.d104 values("2018-10-03 14:38:05.000", 10.80000, 223, 0.29000); +insert into power.d104 values("2018-10-03 14:38:06.500", 11.50000, 221, 0.35000); +``` + +### 查询以观察结果 + +```sql title="SQL" +select start, end, max_current from power.current_stream_output_stb; +``` + +```txt title="output" + wstart | wend | max_current | +=========================================================================== + 2018-10-03 14:38:05.000 | 2018-10-03 14:38:10.000 | 10.30000 | + 2018-10-03 14:38:15.000 | 2018-10-03 14:38:20.000 | 12.60000 | +Query OK, 2 rows in database (0.018762s) +``` + +## 示例二 + +依然以示例一中的数据为基础,我们已经采集到了每个智能电表的电流和电压数据,现在需要求出有功功率和无功功率,并将地域和电表名以符号 "." 拼接,然后以电表名称分组输出到新的数据表中。 + +### 创建 DB 和原始数据表 + +使用上一个示例的方式来创建数据库。 + +### 创建流 + +```sql +create stream power_stream into power.power_stream_output_stb as select ts, concat_ws(".", location, tbname) as meter_location, current*voltage*cos(phase) as active_power, current*voltage*sin(phase) as reactive_power from power.meters partition by tbname; +``` + +### 写入数据 + +参考示例一的方式来写入数据。 + +### 查询以观察结果 +```sql title="SQL" +select ts, meter_location, active_power, reactive_power from power.power_stream_output_stb; +``` +```txt title="output" + ts | meter_location | active_power | reactive_power | +=================================================================================================================== + 2018-10-03 14:38:05.000 | California.LosAngeles.d104 | 2307.834596289 | 688.687331847 | + 2018-10-03 14:38:06.500 | California.LosAngeles.d104 | 2387.415754896 | 871.474763418 | + 2018-10-03 14:38:05.500 | California.LosAngeles.d103 | 2506.240411679 | 720.680274962 | + 2018-10-03 14:38:16.600 | California.LosAngeles.d103 | 2863.424274422 | 854.482390839 | + 2018-10-03 14:38:05.000 | California.SanFrancisco.d101 | 2148.178871730 | 688.120784090 | + 2018-10-03 14:38:15.000 | California.SanFrancisco.d101 | 2598.589176205 | 890.081451418 | + 2018-10-03 14:38:16.800 | California.SanFrancisco.d101 | 2588.728381186 | 829.240910475 | + 2018-10-03 14:38:16.650 | California.SanFrancisco.d102 | 2175.595991997 | 555.520860397 | +Query OK, 8 rows in database (0.014753s) +``` diff --git a/docs/zh/13-replication/index.md b/docs/zh/13-replication/index.md new file mode 100644 index 0000000000..8bb951ca6e --- /dev/null +++ b/docs/zh/13-replication/index.md @@ -0,0 +1,9 @@ +--- +sidebar_label: 数据复制 +title: 数据复制 +description: 在不同的 TDengine Cloud 实例之间进行数据复制 +--- + +TDengine Cloud 提供对数据复制的全面支持。您可以将数据从 TDengine Cloud 复制到私人TDengine实例,从私人TDengine实例复制到TDengine云,或者从一个云平台复制到另一个云平台,这两个服务在哪个云或区域并不重要。 + +TDengine Cloud 也提供数据备份。 diff --git a/docs/zh/19-tools/01-cli.md b/docs/zh/19-tools/01-cli.md new file mode 100644 index 0000000000..d024df1456 --- /dev/null +++ b/docs/zh/19-tools/01-cli.md @@ -0,0 +1,126 @@ +--- +title: TDengine 命令行(CLI) +sidebar_label: TDengine CLI +description: TDengine CLI 的使用说明和技巧 +--- + + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +TDengine 命令行程序(以下简称 TDengine CLI)是用户操作 TDengine 实例并与之交互的最简洁最常用的方式。 + +## 安装 + +运行 TDengine CLI 来访问 TDengine Cloud ,请首先下载和安装最新的 [TDengine 客户端安装包](https://docs.taosdata.com/releases/tdengine/)。 + +## 配置 + + + + +在您的 Linux 终端里面执行下面的命令设置 TDengine Cloud 的 DSN 为环境变量: + +```bash +export TDENGINE_CLOUD_DSN="" +``` + + + + +在您的 Windows CMD 里面执行下面的命令设置 TDengine Cloud 的 DSN 为环境变量: + +```cmd +set TDENGINE_CLOUD_DSN= +``` + +或者在您的 Windows PowerShell 里面执行下面的命令设置 TDengine Cloud 的 DSN 为环境变量: + +```cmd +$env:TDENGINE_CLOUD_DSN='' +``` + + + + +在您的 Mac 里面执行下面的命令设置 TDengine Cloud 的 DSN 为环境变量: + +```bash +export TDENGINE_CLOUD_DSN="" +``` + + + + + +:::note +获取真实的 `DSN` 的值,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”工具“菜单,然后选择”TDengine CLI“。 +::: + + +## 建立连接 + + + + +To access the TDengine Cloud, you can execute `taos` if you already set the environment variable. + +``` +taos +``` + +如果您没有设置 TDengine Cloud 实例的环境变量,或者您想访问其他 TDengine Cloud 实例,您可以使用下面的命令 `taos -E `来执行: + +``` +taos -E $TDENGINE_CLOUD_DSN +``` + + + + +如果您已经设置了环境变量,您只需要立即执行 `taos` 命令就可以访问 TDengine Cloud 实例。 + +```powershell +taos.exe +``` + +如果您没有设置 TDengine Cloud 实例的环境变量,或者您想访问其他 TDengine Cloud 实例,您可以使用下面的命令 `taos -E `来执行: + +```powershell +taos.exe -E $TDENGINE_CLOUD_DSN +``` + + + + +如果您已经设置了环境变量,您只需要立即执行 `taos` 命令就可以访问 TDengine Cloud 实例。 + +```bash +taos +``` + +如果您没有设置 TDengine Cloud 实例的环境变量,或者您想访问其他 TDengine Cloud 实例,您可以使用下面的命令 `taos -E `来执行: + +```bash +taos -E $TDENGINE_CLOUD_DSN +``` + + + + +## 使用 TDengine CLI + +如果成功连接上 TDengine 服务,TDengine CLI 会显示一个欢迎的消息和版本信息。如果失败了,TDengine CLI 会打印失败消息。TDengine CLI 打印的成功消息如下: + +```text +Welcome to the TDengine shell from Linux, Client Version:3.0.0.0 +Copyright (c) 2022 by TAOS Data, Inc. All rights reserved. + +Successfully connect to cloud.tdengine.com:8085 in restful mode + +taos> +``` + +进入 TDengine CLI 以后,您就可以执行大量的 SQL 命令来进行插入,查询或者进行管理。详情请参考[官方文档](https://docs.taosdata.com/reference/taos-shell#execute-sql-script-file)。 diff --git a/docs/zh/19-tools/03-taosbenchmark.md b/docs/zh/19-tools/03-taosbenchmark.md new file mode 100644 index 0000000000..15fb3a611e --- /dev/null +++ b/docs/zh/19-tools/03-taosbenchmark.md @@ -0,0 +1,398 @@ +--- +title: taosBenchmark +sidebar_label: taosBenchmark +toc_max_heading_level: 4 +description: 'taosBenchmark (曾用名 taosdemo ) 是一个用于测试 TDengine 产品性能的工具' +--- + +## 简介 + +taosBenchmark (曾用名 taosdemo ) 是一个用于测试 TDengine 产品性能的工具。taosBenchmark 可以测试 TDengine 的插入、查询和订阅等功能的性能,它可以模拟由大量设备产生的大量数据,还可以灵活地控制数据库、超级表、标签列的数量和类型、数据列的数量和类型、子表的数量、每张子表的数据量、插入数据的时间间隔、taosBenchmark 的工作线程数量、是否以及如何插入乱序数据等。为了兼容过往用户的使用习惯,安装包提供 了 taosdemo 作为 taosBenchmark 的软链接。 + +:::note +在使用 TDengine Cloud 的时候,请注意,没有授权的用户是没有办法通过任何工具包括 taosBenchmark 来创建数据库的。只能通过 TDengine Cloud 的数据浏览器来创建数据库。这个文档中提到的任何创建数据库的内容请忽略,并在 TDengine Cloud 里面手动创建数据库。 +::: + +## 安装 + +taosBenchmark 有两种安装方式: + +- 安装 TDengine 官方安装包的同时会自动安装 taosBenchmark, 详情请参考[ TDengine 安装](/operation/pkg-install)。 + +- 单独编译 taos-tools 并安装, 详情请参考 [taos-tools](https://github.com/taosdata/taos-tools) 仓库。 + +## 运行 + +### 配置和运行方式 + +运行下面命令来设置TDengine Cloud 的 DSN 环境变量: + +```bash +export TDENGINE_CLOUD_DSN="" +``` + + +:::note +获取真实的 `DSN` 的值,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”工具“菜单,然后选择”taosBenchmark“。 +::: + + +用户只能使用一个命令行参数 `-f ` 指定配置文件。 + +taosBenchmark 支持对 TDengine 做完备的性能测试,其所支持的 TDengine 功能分为三大类:写入、查询和订阅。这三种功能之间是互斥的,每次运行 taosBenchmark 只能选择其中之一。值得注意的是,所要测试的功能类型在使用命令行配置方式时是不可配置的,命令行配置方式只能测试写入性能。若要测试 TDengine 的查询和订阅性能,必须使用配置文件的方式,通过配置文件中的参数 `filetype` 指定所要测试的功能类型。 + +**在运行 taosBenchmark 之前要确保 TDengine 集群已经在正确运行。** + +### 使用配置文件运行 + +taosBenchmark 安装包中提供了配置文件的示例,位于 `/examples/taosbenchmark-json` 下 + +使用如下命令行即可运行 taosBenchmark 并通过配置文件控制其行为。 + +```bash +taosBenchmark -f +``` + +**下面是几个配置文件的示例:** + +#### 插入场景 JSON 配置文件示例 +```json +{ + "filetype": "insert", + "cfgdir": "/etc/taos", + "host": "127.0.0.1", + "port": 6030, + "user": "root", + "password": "taosdata", + "connection_pool_size": 8, + "thread_count": 4, + "create_table_thread_count": 7, + "result_file": "./insert_res.txt", + "confirm_parameter_prompt": "no", + "insert_interval": 0, + "interlace_rows": 100, + "num_of_records_per_req": 100, + "prepared_rand": 10000, + "chinese": "no", + "databases": [ + { + "dbinfo": { + "name": "test", + "drop": "no", + "replica": 1, + "precision": "ms", + "keep": 3650, + "minRows": 100, + "maxRows": 4096, + "comp": 2 + }, + "super_tables": [ + { + "name": "meters", + "child_table_exists": "no", + "childtable_count": 10000, + "childtable_prefix": "d", + "escape_character": "yes", + "auto_create_table": "no", + "batch_create_tbl_num": 5, + "data_source": "rand", + "insert_mode": "taosc", + "non_stop_mode": "no", + "line_protocol": "line", + "insert_rows": 10000, + "childtable_limit": 10, + "childtable_offset": 100, + "interlace_rows": 0, + "insert_interval": 0, + "partial_col_num": 0, + "disorder_ratio": 0, + "disorder_range": 1000, + "timestamp_step": 10, + "start_timestamp": "2020-10-01 00:00:00.000", + "sample_format": "csv", + "sample_file": "./sample.csv", + "use_sample_ts": "no", + "tags_file": "", + "columns": [ + { + "type": "FLOAT", + "name": "current", + "count": 1, + "max": 12, + "min": 8 + }, + { "type": "INT", "name": "voltage", "max": 225, "min": 215 }, + { "type": "FLOAT", "name": "phase", "max": 1, "min": 0 } + ], + "tags": [ + { + "type": "TINYINT", + "name": "groupid", + "max": 10, + "min": 1 + }, + { + "name": "location", + "type": "BINARY", + "len": 16, + "values": ["San Francisco", "Los Angles", "San Diego", + "San Jose", "Palo Alto", "Campbell", "Mountain View", + "Sunnyvale", "Santa Clara", "Cupertino"] + } + ] + } + ] + } + ] +} + +``` + +#### 查询场景 JSON 配置文件示例 + +```json +{ + "filetype": "query", + "cfgdir": "/etc/taos", + "host": "127.0.0.1", + "port": 6030, + "user": "root", + "password": "taosdata", + "confirm_parameter_prompt": "no", + "databases": "test", + "query_times": 2, + "query_mode": "taosc", + "specified_table_query": { + "query_interval": 1, + "concurrent": 3, + "sqls": [ + { + "sql": "select last_row(*) from meters", + "result": "./query_res0.txt" + }, + { + "sql": "select count(*) from d0", + "result": "./query_res1.txt" + } + ] + }, + "super_table_query": { + "stblname": "meters", + "query_interval": 1, + "threads": 3, + "sqls": [ + { + "sql": "select last_row(ts) from xxxx", + "result": "./query_res2.txt" + } + ] + } +} + +``` + +## 配置文件参数详解 + +### 通用配置参数 + +本节所列参数适用于所有功能模式。 + +- **filetype** : 要测试的功能,可选值为 `insert`, `query` 和 `subscribe`。分别对应插入、查询和订阅功能。每个配置文件中只能指定其中之一。 +- **cfgdir** : TDengine 客户端配置文件所在的目录,默认路径是 /etc/taos 。 + +- **host** : 指定要连接的 TDengine 服务端的 FQDN,默认值为 localhost。 + +- **port** : 要连接的 TDengine 服务器的端口号,默认值为 6030。 + +- **user** : 用于连接 TDengine 服务端的用户名,默认为 root。 + +- **password** : 用于连接 TDengine 服务端的密码,默认值为 taosdata。 + +### 插入场景配置参数 + +插入场景下 `filetype` 必须设置为 `insert`,该参数及其它通用参数详见[通用配置参数](#通用配置参数) + +- ** keep_trying ** : 失败后进行重试的次数,默认不重试。需使用 v3.0.9 以上版本。 + +- ** trying_interval ** : 失败重试间隔时间,单位为毫秒,仅在 keep_trying 指定重试后有效。需使用 v3.0.9 以上版本。 + +#### 流式计算相关配置参数 + +创建流式计算的相关参数在 json 配置文件中的 `stream` 中配置,具体参数如下。 + +- **stream_name** : 流式计算的名称,必填项。 + +- **stream_stb** : 流式计算对应的超级表名称,必填项。 + +- **stream_sql** : 流式计算的sql语句,必填项。 + +- **trigger_mode** : 流式计算的触发模式,可选项。 + +- **watermark** : 流式计算的水印,可选项。 + +- **drop** : 是否创建流式计算,可选项为 "yes" 或者 "no", 为 "no" 时不创建。 + +#### 超级表相关配置参数 + +创建超级表时的相关参数在 json 配置文件中的 `super_tables` 中配置,具体参数如下。 + +- **name**: 超级表名,必须配置,没有默认值。 + +- **child_table_exists** : 子表是否已经存在,默认值为 "no",可选值为 "yes" 或 "no"。 + +- **child_table_count** : 子表的数量,默认值为 10。 + +- **child_table_prefix** : 子表名称的前缀,必选配置项,没有默认值。 + +- **escape_character** : 超级表和子表名称中是否包含转义字符,默认值为 "no",可选值为 "yes" 或 "no"。 + +- **auto_create_table** : 仅当 insert_mode 为 taosc, rest, stmt 并且 childtable_exists 为 "no" 时生效,该参数为 "yes" 表示 taosBenchmark 在插入数据时会自动创建不存在的表;为 "no" 则表示先提前建好所有表再进行插入。 + +- **batch_create_tbl_num** : 创建子表时每批次的建表数量,默认为 10。注:实际的批数不一定与该值相同,当执行的 SQL 语句大于支持的最大长度时,会自动截断再执行,继续创建。 + +- **data_source** : 数据的来源,默认为 taosBenchmark 随机产生,可以配置为 "rand" 和 "sample"。为 "sample" 时使用 sample_file 参数指定的文件内的数据。 + +- **insert_mode** : 插入模式,可选项有 taosc, rest, stmt, sml, sml-rest, 分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc 。 + +- **non_stop_mode** : 指定是否持续写入,若为 "yes" 则 insert_rows 失效,直到 Ctrl + C 停止程序,写入才会停止。默认值为 "no",即写入指定数量的记录后停止。注:即使在持续写入模式下 insert_rows 失效,但其也必须被配置为一个非零正整数。 + +- **line_protocol** : 使用行协议插入数据,仅当 insert_mode 为 sml 或 sml-rest 时生效,可选项为 line, telnet, json。 + +- **tcp_transfer** : telnet 模式下的通信协议,仅当 insert_mode 为 sml-rest 并且 line_protocol 为 telnet 时生效。如果不配置,则默认为 http 协议。 + +- **insert_rows** : 每个子表插入的记录数,默认为 0 。 + +- **childtable_offset** : 仅当 childtable_exists 为 yes 时生效,指定从超级表获取子表列表时的偏移量,即从第几个子表开始。 + +- **childtable_limit** : 仅当 childtable_exists 为 yes 时生效,指定从超级表获取子表列表的上限。 + +- **interlace_rows** : 启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0, 即向一张子表完成数据插入后才会向下一张子表进行数据插入。 + +- **insert_interval** : 指定交错插入模式的插入间隔,单位为 ms,默认值为 0。 只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。 + +- **partial_col_num** : 若该值为正数 n 时, 则仅向前 n 列写入,仅当 insert_mode 为 taosc 和 rest 时生效,如果 n 为 0 则是向全部列写入。 + +- **disorder_ratio** : 指定乱序数据的百分比概率,其值域为 [0,50]。默认为 0,即没有乱序数据。 + +- **disorder_range** : 指定乱序数据的时间戳回退范围。所生成的乱序时间戳为非乱序情况下应该使用的时间戳减去这个范围内的一个随机值。仅在 `-O/--disorder` 指定的乱序数据百分比大于 0 时有效。 + +- **timestamp_step** : 每个子表中插入数据的时间戳步长,单位与数据库的 `precision` 一致,默认值是 1。 + +- **start_timestamp** : 每个子表的时间戳起始值,默认值是 now。 + +- **sample_format** : 样本数据文件的类型,现在只支持 "csv" 。 + +- **sample_file** : 指定 csv 格式的文件作为数据源,仅当 data_source 为 sample 时生效。若 csv 文件内的数据行数小于等于 prepared_rand,那么会循环读取 csv 文件数据直到与 prepared_rand 相同;否则则会只读取 prepared_rand 个数的行的数据。也即最终生成的数据行数为二者取小。 + +- **use_sample_ts** : 仅当 data_source 为 sample 时生效,表示 sample_file 指定的 csv 文件内是否包含第一列时间戳,默认为 no。 若设置为 yes, 则使用 csv 文件第一列作为时间戳,由于同一子表时间戳不能重复,生成的数据量取决于 csv 文件内的数据行数相同,此时 insert_rows 失效。 + +- **tags_file** : 仅当 insert_mode 为 taosc, rest 的模式下生效。 最终的 tag 的数值与 childtable_count 有关,如果 csv 文件内的 tag 数据行小于给定的子表数量,那么会循环读取 csv 文件数据直到生成 childtable_count 指定的子表数量;否则则只会读取 childtable_count 行 tag 数据。也即最终生成的子表数量为二者取小。 + +#### tsma配置参数 + +指定tsma的配置参数在 `super_tables` 中的 `tsmas` 中,具体参数如下。 + +- **name** : 指定 tsma 的名字,必选项。 + +- **function** : 指定 tsma 的函数,必选项。 + +- **interval** : 指定 tsma 的时间间隔,必选项。 + +- **sliding** : 指定 tsma 的窗口时间位移,必选项。 + +- **custom** : 指定 tsma 的创建语句结尾追加的自定义配置,可选项。 + +- **start_when_inserted** : 指定当插入多少行时创建 tsma,可选项,默认为 0。 + +#### 标签列与数据列配置参数 + +指定超级表标签列与数据列的配置参数分别在 `super_tables` 中的 `columns` 和 `tag` 中。 + +- **type** : 指定列类型,可选值请参考 TDengine 支持的数据类型。 + 注:JSON 数据类型比较特殊,只能用于标签,当使用 JSON 类型作为 tag 时有且只能有这一个标签,此时 count 和 len 代表的意义分别是 JSON tag 内的 key-value pair 的个数和每个 KV pair 的 value 的值的长度,value 默认为 string。 + +- **len** : 指定该数据类型的长度,对 NCHAR,BINARY 和 JSON 数据类型有效。如果对其他数据类型配置了该参数,若为 0 , 则代表该列始终都是以 null 值写入;如果不为 0 则被忽略。 + +- **count** : 指定该类型列连续出现的数量,例如 "count": 4096 即可生成 4096 个指定类型的列。 + +- **name** : 列的名字,若与 count 同时使用,比如 "name":"current", "count":3, 则 3 个列的名字分别为 current, current_2. current_3。 + +- **min** : 数据类型的 列/标签 的最小值。生成的值将大于或等于最小值。 + +- **max** : 数据类型的 列/标签 的最大值。生成的值将小于最小值。 + +- **values** : nchar/binary 列/标签的值域,将从值中随机选择。 + +- **sma**: 将该列加入 SMA 中,值为 "yes" 或者 "no",默认为 "no"。 + +#### 插入行为配置参数 + +- **thread_count** : 插入数据的线程数量,默认为 8。 + +- **create_table_thread_count** : 建表的线程数量,默认为 8。 + +- **connection_pool_size** : 预先建立的与 TDengine 服务端之间的连接的数量。若不配置,则与所指定的线程数相同。 + +- **result_file** : 结果输出文件的路径,默认值为 ./output.txt。 + +- **confirm_parameter_prompt** : 开关参数,要求用户在提示后确认才能继续。默认值为 false 。 + +- **interlace_rows** : 启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0, 即向一张子表完成数据插入后才会向下一张子表进行数据插入。 + 在 `super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。 + +- **insert_interval** : + 指定交错插入模式的插入间隔,单位为 ms,默认值为 0。 只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。 + 在 `super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。 + +- **num_of_records_per_req** : + 每次向 TDengine 请求写入的数据行数,默认值为 30000 。当其设置过大时,TDengine 客户端驱动会返回相应的错误信息,此时需要调低这个参数的设置以满足写入要求。 + +- **prepare_rand** : 生成的随机数据中唯一值的数量。若为 1 则表示所有数据都相同。默认值为 10000 。 + +### 查询场景配置参数 + +查询场景下 `filetype` 必须设置为 `query`。 + +查询场景可以通过设置 `kill_slow_query_threshold` 和 `kill_slow_query_interval` 参数来控制杀掉慢查询语句的执行,threshold 控制如果 exec_usec 超过指定时间的查询将被 taosBenchmark 杀掉,单位为秒;interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为秒。 + +其它通用参数详见[通用配置参数](#通用配置参数)。 + +#### 执行指定查询语句的配置参数 + +查询子表或者普通表的配置参数在 `specified_table_query` 中设置。 + +- **query_interval** : 查询时间间隔,单位是秒,默认值为 0。 + +- **threads** : 执行查询 SQL 的线程数,默认值为 1。 + +- **sqls**: + - **sql**: 执行的 SQL 命令,必填。 + - **result**: 保存查询结果的文件,未指定则不保存。 + +#### 查询超级表的配置参数 + +查询超级表的配置参数在 `super_table_query` 中设置。 + +- **stblname** : 指定要查询的超级表的名称,必填。 + +- **query_interval** : 查询时间间隔,单位是秒,默认值为 0。 + +- **threads** : 执行查询 SQL 的线程数,默认值为 1。 + +- **sqls** : + - **sql** : 执行的 SQL 命令,必填;对于超级表的查询 SQL,在 SQL 命令中保留 "xxxx",程序会自动将其替换为超级表的所有子表名。 + 替换为超级表中所有的子表名。 + - **result** : 保存查询结果的文件,未指定则不保存。 + +### 订阅场景配置参数 + +订阅场景下 `filetype` 必须设置为 `subscribe`,该参数及其它通用参数详见[通用配置参数](#通用配置参数) + +#### 执行指定订阅语句的配置参数 + +订阅子表或者普通表的配置参数在 `specified_table_query` 中设置。 + +- **threads/concurrent** : 执行 SQL 的线程数,默认为 1。 + +- **sqls** : + - **sql** : 执行的 SQL 命令,必填。 diff --git a/docs/zh/19-tools/06-taosdump.md b/docs/zh/19-tools/06-taosdump.md new file mode 100644 index 0000000000..5f45c0468f --- /dev/null +++ b/docs/zh/19-tools/06-taosdump.md @@ -0,0 +1,135 @@ +--- +title: taosdump +description: "taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序" +--- + +## 简介 + +taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。 + +taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份,也可以对数据库、超级 +表和普通表中指定时间段内的数据记录进行备份。使用时可以指定数据备份的目录路径,如果 +不指定位置,taosdump 默认会将数据备份到当前目录。 + +如果指定的位置已经有数据文件,taosdump 会提示用户并立即退出,避免数据被覆盖。这意味着同一路径只能被用于一次备份。 +如果看到相关提示,请小心操作。 + +taosdump 是一个逻辑备份工具,它不应被用于备份任何原始数据、环境设置、 +硬件信息、服务端配置或集群的拓扑结构。taosdump 使用 +[ Apache AVRO ](https://avro.apache.org/)作为数据文件格式来存储备份数据。 + +## 安装 + +taosdump 有两种安装方式: + +- 安装 taosTools 官方安装包, 请从[发布历史页面](https://docs.taosdata.com/releases/tools/)页面找到 taosTools 并下载安装。 + +- 单独编译 taos-tools 并安装, 详情请参考 [taos-tools](https://github.com/taosdata/taos-tools) 仓库。 + +运行下面命令来设置TDengine Cloud 的 DSN 环境变量: + +```bash +export TDENGINE_CLOUD_DSN="" +``` + + +:::note +获取真实的 `DSN` 的值,请登录[TDengine Cloud](https://cloud.taosdata.com) 后点击左边的”工具“菜单,然后选择”taosdump“。 +::: + + +## 常用使用场景 + +### taosdump 备份数据 + +1. 备份所有数据库:指定 `-A` 或 `--all-databases` 参数; +2. 备份多个指定数据库:使用 `-D db1,db2,...` 参数; +3. 备份指定数据库中的某些超级表或普通表:使用 `dbname stbname1 stbname2 tbname1 tbname2 ...` 参数,注意这种输入序列第一个参数为数据库名称,且只支持一个数据库,第二个和之后的参数为该数据库中的超级表或普通表名称,中间以空格分隔; +4. 备份系统 log 库:TDengine 集群通常会包含一个系统数据库,名为 `log`,这个数据库内的数据为 TDengine 自我运行的数据,taosdump 默认不会对 log 库进行备份。如果有特定需求对 log 库进行备份,可以使用 `-a` 或 `--allow-sys` 命令行参数。 +5. “宽容”模式备份:taosdump 1.4.1 之后的版本提供 `-n` 参数和 `-L` 参数,用于备份数据时不使用转义字符和“宽容”模式,可以在表名、列名、标签名没使用转义字符的情况下减少备份数据时间和备份数据占用空间。如果不确定符合使用 `-n` 和 `-L` 条件时请使用默认参数进行“严格”模式进行备份。转义字符的说明请参考[官方文档](/taos-sql/escape)。 + +:::tip +- taosdump 1.4.1 之后的版本提供 `-I` 参数,用于解析 avro 文件 schema 和数据,如果指定 `-s` 参数将只解析 schema。 +- taosdump 1.4.2 之后的备份使用 `-B` 参数指定的批次数,默认值为 16384,如果在某些环境下由于网络速度或磁盘性能不足导致 "Error actual dump .. batch .." 可以通过 `-B` 参数调整为更小的值进行尝试。 +- taosdump 的导出不支持中断恢复,所以当进程意外终止后,正确的处理方式是删除当前已导出或生成的所有相关文件。 +- taosdump 的导入支持中断恢复,但是当进程重新启动时,会收到一些“表已经存在”的提示,可以忽视。 + +::: + +### taosdump 恢复数据 + +恢复指定路径下的数据文件:使用 `-i` 参数加上数据文件所在路径。如前面提及,不应该使用同一个目录备份不同数据集合,也不应该在同一路径多次备份同一数据集,否则备份数据会造成覆盖或多次备份。 + +:::tip +taosdump 内部使用 TDengine stmt binding API 进行恢复数据的写入,为提高数据恢复性能,目前使用 16384 为一次写入批次。如果备份数据中有比较多列数据,可能会导致产生 "WAL size exceeds limit" 错误,此时可以通过使用 `-B` 参数调整为一个更小的值进行尝试。 + +::: + +## 详细命令行参数列表 + +以下为 taosdump 详细命令行参数列表: + +``` +Usage: taosdump [OPTION...] dbname [tbname ...] + or: taosdump [OPTION...] --databases db1,db2,... + or: taosdump [OPTION...] --all-databases + or: taosdump [OPTION...] -i inpath + or: taosdump [OPTION...] -o outpath + + -h, --host=HOST Server host dumping data from. Default is + localhost. + -p, --password User password to connect to server. Default is + taosdata. + -P, --port=PORT Port to connect + -u, --user=USER User name used to connect to server. Default is + root. + -c, --config-dir=CONFIG_DIR Configure directory. Default is /etc/taos + -i, --inpath=INPATH Input file path. + -o, --outpath=OUTPATH Output file path. + -r, --resultFile=RESULTFILE DumpOut/In Result file path and name. + -a, --allow-sys Allow to dump system database + -A, --all-databases Dump all databases. + -D, --databases=DATABASES Dump inputted databases. Use comma to separate + databases' name. + -N, --without-property Dump database without its properties. + -s, --schemaonly Only dump tables' schema. + -y, --answer-yes Input yes for prompt. It will skip data file + checking! + -d, --avro-codec=snappy Choose an avro codec among null, deflate, snappy, + and lzma. + -S, --start-time=START_TIME Start time to dump. Either epoch or + ISO8601/RFC3339 format is acceptable. ISO8601 + format example: 2017-10-01T00:00:00.000+0800 or + 2017-10-0100:00:00:000+0800 or '2017-10-01 + 00:00:00.000+0800' + -E, --end-time=END_TIME End time to dump. Either epoch or ISO8601/RFC3339 + format is acceptable. ISO8601 format example: + 2017-10-01T00:00:00.000+0800 or + 2017-10-0100:00:00.000+0800 or '2017-10-01 + 00:00:00.000+0800' + -B, --data-batch=DATA_BATCH Number of data per query/insert statement when + backup/restore. Default value is 16384. If you see + 'error actual dump .. batch ..' when backup or if + you see 'WAL size exceeds limit' error when + restore, please adjust the value to a smaller one + and try. The workable value is related to the + length of the row and type of table schema. + -I, --inspect inspect avro file content and print on screen + -L, --loose-mode Using loose mode if the table name and column name + use letter and number only. Default is NOT. + -n, --no-escape No escape char '`'. Default is using it. + -T, --thread-num=THREAD_NUM Number of thread for dump in file. Default is + 8. + -C, --cloud=CLOUD_DSN specify a DSN to access TDengine cloud service + -R, --restful Use RESTful interface to connect TDengine + -t, --timeout=SECONDS The timeout seconds for websocket to interact. + -g, --debug Print debug info. + -?, --help Give this help list + --usage Give a short usage message + -V, --version Print program version + +Mandatory or optional arguments to long options are also mandatory or optional +for any corresponding short options. + +Report bugs to . +``` diff --git a/docs/zh/19-tools/index.md b/docs/zh/19-tools/index.md new file mode 100644 index 0000000000..4712476326 --- /dev/null +++ b/docs/zh/19-tools/index.md @@ -0,0 +1,7 @@ +--- +sidebar_label: 工具 +title: 工具 +description: TDengine 提供的有用工具 +--- + +这一章,主要讲述的是 TDengine 为用户提供的大量有用工具,方便用户更好地使用 TDengine。 diff --git a/docs/zh/22-user-management/01-orgs/images/neworg.webp b/docs/zh/22-user-management/01-orgs/images/neworg.webp new file mode 100644 index 0000000000000000000000000000000000000000..6538c15f1caa17cd89cb017cf3839229e03f572a GIT binary patch literal 11114 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 literal 0 HcmV?d00001 diff --git a/docs/zh/22-user-management/01-orgs/images/orglist.webp b/docs/zh/22-user-management/01-orgs/images/orglist.webp new file mode 100644 index 0000000000000000000000000000000000000000..4b13f6b45b241bb5a0c9d0f1ae21265de24dc711 GIT binary patch literal 57194 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 z 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 UcW<~jaU1s>llf!YXMy^E00>0BrT_o{ literal 0 HcmV?d00001 diff --git a/docs/zh/22-user-management/01-orgs/images/orgprivileges.webp b/docs/zh/22-user-management/01-orgs/images/orgprivileges.webp new file mode 100644 index 0000000000000000000000000000000000000000..86d15769394e024a1fba054b79556f1875d09b6b GIT binary patch literal 43624 zcmaI7QRJ4u63uE1}KR#ZOkxrR#xkWN_K)eS@TbzvYcH@B$iAp zUO(k(*y?y6oSdBGY7EFYt-cPdRvN|P8wceMB7DdLv)6UQJH{`sHM1l?SU#i5Nay=A z{%@_>(i_*d$M|vE`?~9S`(1}qL5_>Dbq;~E)MFz6kuwB|vuizl+b;8Th;wRnHz>Bx zH5ifpwSD@$9dJD4_tA~)u5mvYDHRBVqB=H6W)@0~%0>;Ad^p;#4NHchL6v}(EIdtH z{S;+}B4-StUAIgc1QVDIOG*k_kVwp0Jx8Gdr_orR5%i;&c}RvY(x7gbbdokTu^Pb( zH6~r%1P!t}#+cX?bqq8i6epex3ZE1dHTMTA=>p0^M1cD2k8DU0bl4%0A1J~<#Hk_2 zqOwnn(^Km!haQAsgM+Z{B(wFba%j*4JKKyQC2Jz5i@gt@p38%xxU`tJoVhNwZ}alOnizAcJQ~SBJSw%``9qHx~FKmjWFDHD|ca= zo8N*_1!`g*1) zmwik^zZE7s6jqoS{v7Ujke31`2%DlK02Ee@8Qz2YiX2OXxUb<4N(hVt7*$6;HN+r( zF%$|tGl_EI)>sbu=7Z4z1O~|~IKhE-7SCMGbKBKSB`?yZB zsYVo-lnBt7AZG67IzmA38b{=|8{TIGVzvaKP zzPLUe|6dLWYQ(`KpxTbK$Uif1+=@6O1&9&T(>-p$Wt=(s=3r=v4s@DpyH z&6l?XlcUryq2-?=xhj|5g|sR-G4 zS5bZUpHZ|%flXQ=_?emt{=5(C6B-PZW}!T3%vPp!Z-q_3RrrSRcfa-Xfo&JsL%EDV zFj{VDS^9#B3(r+JKO`<(h31}yf(vbE!VR~dj34i-rH@3}p$aWM5}q3}$HSTX67mRZ zjlxZm}Oc-Y@4sUtInIreV1x^7&;uislz_X<*p{Gi@?YX zy`M{d{3E;C+^`?6leG4<>QV8_SK}Vuy-QTtq?%h>51a-Fd}sqlcg-?SdG9Xi0*PSN z3x&+b%LSgPpV8hYirSvDaAevYQ5LxA#Z zC8Ec0kCN01X^!=CcCuyt3|s9w+;W=e1u=F@57j=M?#I2b8oH8oNuc7D zU<#BjAhdrC_hxG*41tjq(apR&s4IQs>%J;46OUGpkvdStps86n_Vse=vB?BC=AbKC zsO(1shL~$}zq6>p8jDWp&JIC$P_gD2!q^P8fXi^0sWf7ZVNfnRB+jB;Q;W7n$|VwHj1-Mrj`mdxf@>s{^&jXViFlc8k4{dn`mI3p6-X3MTIxke7 zhN)39K_CT4U2DtpUb=6TMyk7UatWf)ALUhFg4JP_^9+l9BPktT3&GZ@l4bDaG`B`+ znbcV~6V?=#(jT)VeJGlzW=Rr#<;atombZ`y&WJM3;aTi35?0I`I%m7&@F*2+bA6PC zSSC7#SoT%uMbSfMC468f!^y&}&_iaL>%mQevd-p?*S9w~j*fMYlabroS$pY<0~_8% zVr}%#Rib)_NXJC)e{OHQJ9{J%Z5KSsi6(iPDLz|(F ze|z6^_Ax!>5;{%zFTJT)zLx0|*Odn(z#g~%ef^3YuoJl5l#)dTw-~k7Z+0Q)45%Fl zp6;gnL=Aa}$kK4YjXB2Oc@I2+t>?vQP>hd=IsJ|PL%OY@0b2`+9Z`B{K7JzbHR}SN zn^+hF9+LFUf<~7~>$`D5ez3Gby^~5p&gT$EDids-Vgm^%b7 zHDCKF%-+z?49Ori!l&T^>Q-$69Hn2?&*2s%VD^W7p5Y2k{tFAYl|Q;`M*77l3VI#O z{T*iUkp#iQIOzD*wcT_`wn%Bh4~T4x-HUeka#r3Ws#FjaF$11<4LOZ*Dh>lSvQaJ>{eK(qEa<*9ZZAsxF7e-^Kk*Y+)W7 zKb<~2g2GeA8i-4cUjGz|h>l3f9&_WtHWH=(G`iWitUNib+ga1Uuc8~cpquC}rP^M= z8IW<6l^yWt{Cg9shdLw@_|iWU6f4~lWWHzCFcFdm4tIOWyFGYnMveaDW`sl{3OQwD z@Wz|fAS@qDIJ%yRC;~^iLl3Yee5<0>HI^}r`bs>@$oiZ=d%b*8qz0Yn`HSMxy@15V zrAtDe4jMkxnYs#Hz@+SMW@UW(3!UH^TO+=$BkvKq<6bptMgRauD#MNz%*1)rux)8@ z^vDScMf#+81AR0rcXQfT`uN`7P_B)pPe)02I2AnH6Tas?>nS)e8uC4seuWCkxRYn# z<1z{cSHB4`NVtsfw>Ne9iW+yYNHtOEwK2CI&i;5L`qs_tXvz4=KP4J@HKy{-RfRWw z$33ZHj;c&~KV%Wq@qYObq>sQQqm-n`F$%r}^xr~5hA7Px@L zkU5ZE5{1R^hKzbkI>32^t?u}&_~trrw#LuP`A_AeiXT9e`62Viv@1^y%yg3Cdoqd= zAzkaeSiH@0r27w5kyuBK)nuW6Id7i&YPz8wzfz8CecJ)VQDRR6cTY{*g>3ip4Lx@j z{$c-C?5Ulp7>3(qBS?kzY^*gtf>^h`$6qophouOtU7#rZiTHy`-QBbRf_h ztMtB^r(`5aTJ&0{a#Q(Ei3x|}vQ4m|-cI&gjCY}wWZr3|UNs_Hp&^+1$(yR^v~hAA zt#F1#cvSJBm(_ktwLm_fDasP&uBI~^-35B%LX&O56_N=n#_2B~;Jl4T9LBEN|2vPZ zFrURH+biwNW@3DELhFjxwm}l3=K$wR+#ehMxVlmZjNtuT+-uRu-utq@RsxmZ1*akfb6%g2;a zY-!H?R|EFTWi!L?!VnT0>Vzpdj(-2Q;ni)8SZ<=Zw*`fxt1vm+-b-XBGbrYw^X$_9 z(De(&1#e*{a4m@%FJt)Qp953)DA%H{XrUH#Um}xT!7;82b+0yGxF?^9tSnn8Lc56_ z_>te{g$38U_>w8rK2?M)Tw!NmVSc#ij!9si7MOrRY!k2sP)x?p2)Kp?V$>e7hpWr= zuqD7+OkLX{9pEr+@pR)U3&&i?0{wk6a@2c4>vpXD^hR7LcaC$fNHWjMsx=ea)xv^& zO!q==Dx}T3lg>t=1h*HehvWS+5yK6oTNYQLcQ2%qt;k*&2zfEx8OdeF5?Q`+lvhPOc^@=Vp(Y+w zIxm+>FQn?lb!8bs8L^W*yMQTnPEwe-+?KHhf;z)#K`UmfeW|%1V5E5q0g?uW<&l&2 zR_TCJHnV>qT1U340XFIqFi?=MjX!&WJZdZ>6m(k}@1|5pXBjUU)udo*9mM_Wet&w> zR_8gTl68k^7P!NAtFSST1PAx#Wg4;!t18?hTIiCKw(L!He~x>P>9&`5B=71%ud}H9 zxp_9xJ;v@NJ(erxZbsd*;Q)C>?^F5|PHu}M@5o0V<8zj<6H}|aQqiicrJ2m=aR@GGZD;+-_jpffT z@5Lw!b39aSGJ4&xl6*%NAXb3Q_lM>AyG8Z;+aSQo+y@wLq_gZW-R{h46~t?={iN2| z^Y?lBuCO9w8_gB_C&#LLcYTSpTW*_~h}+4MC!xHJE4L}q!V1JflZ0GCqo(>sL-ijU zyxn!sV*U@-tr{_D&fMXNNQZfjJHtK@q&gEeJzk5v8HPJJX8&zwtBQn~lXcik*0G~r zbc&q2E*yxJ!`Z=vRc!x+Zva9g9~WsT}6 z>X8%VKgKjCS4Zzu-5?OgmZs+!l!Y#fdxB-ZEv}uFs#X7d8>fkgjR?L}UZ?c;pE$GJ zj_#Ii47)bM8ulso!=a=FhU%<}kTGoGgeLW>TQDDW%r%)1lJ4ZG^09#n3f(scE(7Zi zqphC_Y%d%{#icv;2^>p@z{2aPEhVFkpVSevqC2(_kYY@Nqw;H1b9N!5&5)Ce?=4Ut+Er-iD{!VRm15|8|7ATD&laEwjDj3OX+-zSfYj`jW4 zoLe&4OE50m$eQ^HjoKkhzh=*7=#MVu1Yct(r;T~0=-h_kii~Qo{E?3zH@WK~MCaC+ zdgzzZBn&Nz3!}1i`SvA$&lZ)Jd-M;iBeR8U?>CxZ=b8WEBROGZXzbYVI|?Qz9aDG& zEpB8W%d?nbLW$XFPn5khYMLS!%uwWLbiOOK5M(GQ+g4&+AaOOJyMq`N&4ZwwDZ*@7 z7CzGf@!GSynqBs2CX~2lv~(OoTBuuTiJu7Uq?<9ew#I4$@m})HUWrSMm7n`8xu82z<)XF=mvu)#V!$;xk{?v4becj?WMv_A=< zxrX*i^%XXpdmbI}WT=CDdvPa8vd7l5+No;ekS{yLCsB>{#CgT(5IwV?~Zl11*t{jC(MVU?w?Zw zWf<%gEIrM221qh}&Vd)BBO_Z@w0NlT)bA({ldD)q?-Yz3iD95_I&?TL&utTH!3mpd z!}(n!!02>AMc04zMrxwiC+3eQsGA_s@Qec`1TdB5iw%zJwSUw*%Y5@rO7 zEz}=o+Z(C>6C@n4KQj4CbU z5A)>$c3DC_$36j%L6C~F+4qm!z)JcBk2=S7H@^cD<@(ROinQAj_8&|DBi21}>?=DK zM?bX#ntV^nSf3=p})68{eBSq1x)DmCmk(YsZ}#)>Nx5X zt#PlxZdGn{E{^Gv>b&sUS0al)HfoC<48oU<;p8{u5|TAx?HI(Q@aLKJjYH6{w)-Cc zJ$zfo-y)-J(sQZj@kYl|r7iqX%#1XuDLK3XG~FljEIXD0HuI+~$wv5WX&|+|Y(y%Q zlqQbG36gH%<#r=kd>-7cIcs|Rupl=Ca*YB)jCGGY&c_y@^29hbneZ!{pa~*lPdKOqaBp3QCdO`{xhYiYNmYo z<4*BjrA!u?4#-?b%D-~ivyz#8tjf8T=GRhKy(3pQw12gj|Gp;__bxP6FB z+l}- z_4L=S67mLj?`i^8K`#^{vdN2W+_-BSXohlr+*ni#3&)(sAD6Y_V|3}BU5JXqgmJPX z8>kiXYL8+`pXcbiD)8BEFPA3#t*+FU||)ge1}E! z>zzEV!Ma~xKTNj`siJXn!#PBoL|B%v{7Ii7O2kS2 z2FpBpbJ+|BXEdFNJ{0#JGaVwr^{U?UL#DWjYK}=WArgDL2+dYmJ08jFkLHCgR+3l<@GG zr?!o5TEA`D{Q)Mt(0HM+0^B@0PkYva4%9J*54X1Jw>!U5K8L^OSH17$A3D zb)>d?SH-@#_sNvCHLVZfpCUOGAX^AsG42dlUlFu^PVEL3+j2l%s+ zynR-?f79Wm(huV4tL4dRbw&Xe?4nkGQRwK}(elIWKa(DMvv@r#j!Q{&>flpHbK!5> z6JN0BY3y*HI?ayh;HK^&G$ie{>=seluj?Rm*iPfnOAASK%H%EBFhR?2JeU-C{_dA2 z$0yS(NptZ34UxvapXg2+&sH;!_NO)9LwhTFNMoNf8cin$)A6@T@Ig@M2R3F`wfs@|xMCu^tnGS>-Y zTI<7ZMjcR%kKD2z2e0wOMB`o6=y15QSmT}a+gZSW9Ea=FP`dnS8vmt1$Wrt6)Auq3 z!bv8GP=xEeEKct3X9|5<$;Dz!F<`&(t9IjieAo;Y)hY4rYpTsG{GYlHL7A@*L#Okx z(2?sdK{UCOhhC8Dn1_MTm2aLkVomF^ zFbuy8E^b6g$^n`?D5CxSs+__!D?-3RN*P^KIvH(G3%S)sl+selS6+570^W;SUuc-Q zy)_%8FcbObd9%!9%kORtS~SDq(OJH35?U((hxH=&CR+{(|!yU z*>;7&_uyL9wRSJ*h@9==V zb3R7^gViPaA^}I%^7*Y|)3R(aDM8}H&oIpeZ$3t6?bH0}Cbg^N7bfuP#fqbyb}>)` zR2^)Fa0@a{s=`0@I?w?KtudF>vcaXkaxRP((~@)rrxV&{X&pDNUX(QIDLmI%ByQZ^jjiznBe15y1<{l}5cpq)L@gu81ru{8UPI>G1 zTWl{DOFBEVCR&64co%BZYP(c?E@~P|U=kiIKG;+|*O-t8VeMMxIOPJbfk26w{)OgR z%4uMvJi|Ahg39t5DBqDxt+SU+X1G;ZylyZz!;b1y3MH3S{%!s1Pc08XHnomdegdTK zfs-QgEd%QK#5QwL#fl&xg3PdO3j>9~E+^v2rS~Jswk0=HPA0P6B0E^q%_l()RbMPH zRLUL2u#YY>4n+y$zTj|{be#~@_t=>3&t1(-XAxXPI*PQ$IPZK)jc17uzem;y?nm`l zsF+Ln&9WgyJHF=q%30)zq4M!=ZWYrD}gGF@^AnUTAb4If2yEQ$u z+{OH@m*^tx;LXLoPX`JwUkZ9f2A(E1lNO@(*;F&LQXpbqBwXAM?~HKgwwcE;Qbet) z-rT>1rxS6q^c?Q*v4-$wp@aTJRu(+j=2!-!4&)O zGFhgF3H!{pS6-3CeQEEtv+L9xNFs;WFO&`Wc;M78Wyg+snvbHFzhfE?{B2d|!f2j| zYpB0mL>2+uU6XNKlD(gRzrt1GS7yndpDZ$5f`fGir5@5*&6g&Zkds^YNs2|H%J%Is z=2)q~&#Oiv)rJ`6a3LM2$RxXo^zd^Psuk%+mR}B%2%obQ)A!FwFc1O3YEGSGcoLBq zd{Q_|bUh30!U5E}-};ph>}6D9{oLMo7`c0eHe4anIu~akWI?ipnu?2uM&23g;sjNy zNPSzo!fEd28XrO9xTuD1%+T!}c->6|4-aMEeVbNI8V#QO%bj<34#QemhhCq4n&-Vw zt}q9*0wVTDC4|4J;;3VG&Yh3|Z5HA74x~f`loyB|Q%+h>qiHc?XkM}Yd8b?}UZmYY zNN3s0T#{uDwx}EytYRM;+K3{KTPDyTG+JpXsBT(5+*a$*YQ(rX6ipbvDkx?84tntA zR>B>6PcdXL!J>2oE`&f0>xd3oS$}H$HHe+6;a~+;B#DNq=YXrRoGj19hVl%U+v8FtgjjRb=1^FQ(WCz zwc%wmFCgFX5D|1<=gJpZM*Zz2R>gk2cfOS+HA{6|3<7|u+Q_OI*2{F15c_Kt$s{WT z$V@reeDB(Jc?MPd){D(*=!I*h0pykMlBnqnvV_WJ89`pQc-DAlitabsd1C_+DCB0qw+sq`nkTQOL@ZsaPB#+V#2?Y&%6(!cR#r(NB+sX86XEQZ z>|3Z19nXCD4o_|K`iq=^ob~WaKjJUh?x0=F2^MWv(Q2KIg&GR ze&_h!;2>TnO$;MFXMvOeWqYLwT5B>|Nf`AC_vBn%51MS)G9<^fskU3Vh`@{2LNe*X z(eA-WSA(4ZzVIMpr6fDZ37A5)LL{TwSdWj3k}4xZ?28s@UEKhm7&P_GvOc86;P5_K zZO}`{BURb7RC&GDwm{0sS9xQdYMYq-_D(P}sYJI7NO4Rp)5A9_pQ zcG~lbnztTto&ny!8gfR1hIQQSpX7RCO?wdkaHJ5DldLqC^2N4D-&k|jto$<&dh8C# zB4g;QVtq3RMY2;=L9u7q(U%WL?5J-f@69LmGOj6cmOTFi6(aVoJilQAmd%@{=45{w z9#dPoP_Z2BVa;Fag%@Ds)b!|E3jHZzB@2;z!IaQlwD-7b`gV*F+qCHnRu! z^IiAw#5S)tK843oa%HO1J`q~1L~`poU<&4`GEET7I3K!$dZ-cAXe>56A)||xf+PQ#lj%+ak)9DGMZ$1t zt7=4o!a{8BJOTJXGhNtg-FuqI53 zo@P^c2NPi;3z}S2&qa_B)@P!x(L!!JPnoTxF%kZ0mO@b-M^cM|)_ti>5ggE)`yIb{ zkDOLaFVY0<|Me&9zw~8&Y%MD(if7akKBx~;cO4cnb`@qdwMV%dv5R@ONUy)PPL&Yj zs399dAfYqM?sD~Z2|!U>%s)sW(;?V})sfVgwKzD`sdS`#gZj^C4F)UWGCb6L1yG+F zlGpkb^j73>W{U8bw2h(53y(j;e~4T40HR&e%?{Mc-g%}gtEr*a7;4_NAap4 z3=n&nFO`pSN0etHW0r&FM9Zy|&9?u!aa+(UQ~~RUk5o{b7BnNfPe>0`7Kx_Dq=D;n zOPiF8{oSN%WpK&SzqDss%!bR8bM{C5cnBS_kxbfsw#&G^ghz!y6d2Y2|V6Z3W@4{rvE(i!IVRo9f zW`fn+v*{5awPQyUrUMP*FJJ1MzjpI=5ZW zu+2JwslF)~?EdP7rUX)9DME$#Ldj=pJmN;4ejHw~Jb#dxNYJJuYX8F5l$G+;jljah zQ@q&?eW0W9Fp%Q}mt0yIU~ad|9>iN#Q9^1Pog`}(`yLP;)lUCD(IQQuqt8XxT2w<( zR#vUgg=g*MLhXtK2q~$ECGt=UTdL-3!lWo7W@LkP?(rp`y@~<(Gsy3M6d&P`?n$== zPZa}QTFiRueCvSj#y=s$A|L-wx~hD0hf>vsBxh!o^FlcnZ>y;{Dpwu?S?li6*C0A` zkN;@u6zO$_8rU=bkl-?vJD+~TApf1Q>?<5Oy(rOjw?wl`_m)wLV9Hte91c;Ys=>Uc zl#70noKu`%0?+fZ5S*ZfBL0VhrfPP5ztg5MgY31IWDbv5vV*&}T=HiUZLgCf_I>FE zTqjy*;*t@z_uzPSyGUTm*L)n)-|x1B+e9Wyx}Rq35>1(!3WnW~Rt8cij@Du|VWnUi zSE@iNMz(h-_N`K>5Uq$|s{~8b!?z+2A_Ol0Hr^v(--5Jz;;W^!rIr>_!1e@EV^Gr1 z9WqR_L#Tso;I_5w-?`J1alIFMp}63M2W9*k7$PA&pns3xyFj(di6?{_um+b56v8eg z5r@-g-qIIUqg@TGE|mcOg`Z~=KdX|RWBSIIdH(Q278xA%RBZ3Vo`~7^49iIXD{@c& zje<6HknGEvsX;KZM1gz|bx8Gz)N2pfdE5)ah)SUo6{ZyG0WlhrMkvlZ+lbNKus;>nnhdSU`ZBImel0y`MUadL|O-> zq|`wE`B6V%b%h_B88#l3qp2~sS1VKhv$nSR*G zCiF!bFUy`)Bz8c(Hr>Xz3+R#V2Lx^J-vo-46m8x$8pTX|4$`~K_~3`%nr_`^j+&eI z6<&$7tntC>_#L9WPl(YmMyKoYjA5MWYCxHwaX*@lck3W^JO_7jf`e}*7gBZWkx-^+H&Dao#?4l(FwZ0-#UMJ9G*IEygu!7 zTeT21+L<{t5P zaI>K@q{5vQi3VQL(D5*I4J_3Yh(JYJ!4+6}M8Cd&4CJ+!8$7SxPp9{19PRvqPFxf^ z2YiyYhM=mM#zUvLb(T2Atc>@qOXH&+rvzV=BxA(#(QE>scUR2wJCWgQ;5qMv6;6K* z!Mz5Q?2O}dHq?S6mv>3MgFwL{aRP(A1U`_d+QGjW_gWLJ4;6_PKz>u569%etuOqYv zI*iM>vdAN{o(?7`V+oP$eUy^^?8N&8sW>%nx1IlUxhnb-HC%#^;Jz9FDq z;D8dpU*vZM7k-O-%(%w!qfv#FFjLLHk6TUOCGe;BPdb6E9nkQJB`MdB@6s}F0~b&J za^5FYzBrU8A)rEVpiu&(yeY|>IghrhiJ1||Yr>_o8xGnA$ev*EGDi~-%$7jFt={0b zrMA1S{ycZd_x(KW7O41l;}HGouzx$Z$YY}OI1XR8FW`b3PA&LupJVey(+1aOnU!*V zSO$TuKKUmE*{BI;*NXhxPnm=W<+h)U+mKqH9)c#d1l@>ZxFpk!#YNic6U&GFECtik zB^=m;nK`dwIMf8cvQ&<;`Jgg*+7sV`?8kkHD#mShnAf^qtj+xZCpqdF;UN`iCXaZ} z7`v#UcpS^;Q$;~-)`nTKee=VjS5%o+<~ z<&d@Qa*yxA9}lqbmD})ilB}ir6qrck=N>D~FtdBIaE#N=Bq9Rr8tACp zxFmN3a5%+b03CWl5(i6}^5-`khFDQ+RAT4Vik@I8IVa!wE6Z>fC24ALD?fHH^f{IR za*Ej&Kqc$jC7Lho+7j0mJ!K-+Kv%a-r+RqJ<=$0K4=8=q{g|qYL@mNziF%H-sL?Cg zTR8qD0(D=5+&)hOx{VZ?tgg!VDcCkwWjpjP)r7^ShJOJ3Jvbu${p$p?`Ej72iBg?b zW0N8r-Nw&w%s$whS8bI>F#eM*U&*Bdy%7oSQq44P9s!e%F_t7WbEBl#_ZM?xl3{p; z#_AJKnSF>k?~1mCb_$;FRz-SbsI~n{y_LTGr9t}FbNr{{{|>qTKfj&hZ4zKk@qR7@K5~Aytx;NCjM-X`k`qH@Xw9lde!a@n^=o{Px0Qnw@cc9`IiT8Gd!sy^QAY(_IFw3yK}zfe;%-n?#B_E z+UhpVCz-6{$~z2xWz;pf^K8>7R41VyrwU`WkpD2m%jIvGd1}hkg`%@aUXmD5ocTyV zF+toOIEg|B-yh#DGJF-O&>nQkSrPbq5vUdX%-p^^*wb47e8y$Lnz+tU;$!gMT8|Ap zgGhz`)|hbUc~{0A%4Rd%-^u)X#jw~xJ*t^%Y`<(Vnn?4>q`L2&6b*k{qsx6F=kt79 zbz5-wB+kX4e~PJ)>7#ODTj)2!&c*{GA2UNz&t>VtlG*mA(J9--!$2$Y_ujZb#Fy6{ z2;li_B&7?-_9iz%;VlM7=F0eE8)bB)qR3~4x!5h-ewu_{nz?=DFzzce40NsmA zSq6MDBLzhtwJSVTv0nURP6Yjl5Jm3|zz5Ez1DNqLQWRKh%~iwr=-^imZ(GxK7W2L} zqV2&CCbN`RWMgfu^=aobqH01C|4QQNysh2%QInVo@nCg-Z65e?EyoTr@OH5i##|A~ zdx_R;(61OHO2lk$iMH$}Hq; zgX=LR0^YNZ9a|XOH!TeZX~McR{^||kSTpu@k2b3Z&waAAZDaFLGI?p=It-`pX8I`q zH9J^Ue~R7i7;2E-AK*FUC|hvrup}MGaeZumX79jJ#2HQa%?rjXN<8D%%6R{jd#g=OG$f317FfpL8jKdhpp zyl^a?bW8#CqTtYqRQ#)Z(rJMo_s{BgF8074v-`-D z_k01Hu4O^o@N`bdYb&y-`eIB22mkO| z;@+jyIkqk=G;J7DIjy7CV< zUHKoQMX~ED|Ta}L6D@i<=-S%r+lL;nBw=-x5LB(Nx7=^o~tp|qeDI!JzzR{!MQ_` zrv07kT*6~cMtbW+vWc%w`r4KD*%KNfMkDag`l|UVEr_zkxncTy@%h#kUrc&ufb@T_ zanYhl!PN&ekZ6|!Z_Wz2i!J}BlI`kD0biO?k}W?qr@b^pvw-4xeB-R-ne0ZzXEAK2i=+H)^ZvQ(j!6Lx~Yw28TiD)bMuAvX^Ows3OxiBy!3N{t}tIg-N z)uDbrii@69un2QIyjSCL6&T!;#Y=mToPCRV1>D$Yg!kFV z8YjH&`|#qBl0Em&r*>~2lw@56Tf=eyQmBE~VvLu_Z-X}FchjMb~ zyqV7^E1Bdhrcl63(n=h(Ht{bnP08( ziiP_-GE7z@+9?K$21+g306HtuEu~c~;O-OfVE=PLqyYT1xlF_$*q|(-=93?sx1n!_ z3>cUT&U9iFhv+0NstbmXmX!zZlW+;%c^1|_b7kKN<4H6`S!fptqAQC!g@7F@0Sf>Q z=0o3Q;o3$No8~Cps>)!2f7ajC~0X!&QWe6h)K&VJ*atMtnAsBJE6MriyA$L{Qb|>-A7BCD>rat>=T*B$)eeol;3l zK+V%|l~Wz3rSQeryrx!v&lPumMU&uG9`34};qxfaM+rezQXcuACw&q#yz7!g`qKLD zhE;kZ=l9N`h#k7N`rRGewE4BEQJro5MNP{)C8Qddg~*+^aK-~ySf9Et(;Ub+IGRtS zpF7lFe^Y8P<$BYA$PC?)P*x?KG^6^@lM(x z-&CmUKiHfS&c8gY=*Ils7V%xPY&!_Iq#rp+SiOOi1mfb|Q^EfwFW*kW1y~@i$qwIH zGcPkG{l2qa8MmkXWAN86If<-Kw0$6@<2F`kpXL23E{!E%Bs|P&?i9L@#MJRA6(tmQ zs?x8`o$}i=FAFr9Jy7^36S_Tw^_7oA7df2F9nta3_13)EtG)%M3`%_y6HR%&ZApI< zNB-Fx??x=>e-4~qq18Ox!qVhdVzT1(HT`@SQvQ-0CZvzs+(4oA$+Ma&;Q&sh5OScn z+q8@b@I>%y&$vGgzduJ}iKza2mx^tu#M3N$*Ev7cp=pU)Q`lKQeNI@XR6c!|Bl_<9 zy#BCum*~|wd(POVM2%_^4Ly2J+2p|qYf_Cpa;LH)Lg-(wlX2-tZbX4HzSQ#|%vq4q zuesF0s;R2kg8%<~1$2e0m6tZt;|sC)f9L;Rhk5ftoCXB8J-Xrc!+c||Kd^=o-ygnP zjRlFqfX8129aaY<@fGRg@t&l7OvOKdfBJSgTx!!abKCoL8ZZb~#7hsVwpie)9ns!3 z8y0k2ZArd1+9as@44-^CMtpBRXC2lq*-K*E$>X~C#(QE9$4Gho>NMVY#2LW>3V^H? ze>??O8dB2oT3WojO9o6=zWo8=8wD+$Mo<0gHk-BIV)(a}14(`x%0G|;I|l?jP<<03 z2ceHXH<4Fz{2gB(GB@ue>%W(D_QO6Q)BO)*yTMUM^47tql0wVUpIwBPQlpc*08hAF z7iHeG-nsr;?@>#E@whJBeuzceGFetKBh7n8^^j(8 z(3Ecbne;df_%SxZ=;g~{4NG$}UBMvLB#BziRDA+1wSMu#goQ?elI=dMYx?6sF^?bc z1iVm|VpYW2|BS_1w#l1Vp;iNDg0eVKiE>BM8kGrSdUWS~B}(A|10k^>3CKGKO>kKE zVZQLMgmGi@v*G+Dc}v}>doY?VvRcDU>0B4Ly88?@6XTSd#+PyRJ+T1DtTM*G7fUB^ z-`D5oEryZLMMT5zbBcQ(SF&3l*Sj}e`)o1kfp_KEjP?!!UrMJR!bh(kj@{Rp z#CvLm8!@uLG-%50Xsy>Q+%fdEZB+ciJC^y3{62Z-GMu3vBfa~V)#2V}vt7&7BMwvv z&>d+BFrDq@;I{vfoJN~6j@Zmf9`tfBZ zUhTD`$mh+G2&>jlNa|qYC88K7UA=9#3(`s zy!(6D9ArGL7v%q0I+_2`%vjG8-4D^QVp4Yhv7Q8UcC^3}c>%oD2DDq60CR6Nk%u(M z-E)TGMeJ?JX0E`0zt=@wsCVh^d=Hl*HAL|LFE+k0Jklm;cVgSwXk**v#S7`=8v}j$F$v28 zE?o*4+W`Qc85pJE1dQm;*j1axy7rt<&`x}U+&q~DF+&LGW6~c@1G&{Iu%5}14O=KjA30db92}Jk?eoOaW z7~dIa;<>?gU>ZSVeO8M0ad5FtF3{&MMSWw)lfGHpjsXH_e3jp!-oF+l4+=yh!mkH; z)``8&AAn*%?4@eeUvd;A$QQ>VQwWmw-B>TFp$Z8AEAo_Hj>lWe7O&xAM*OmE0B5v6 zz~K>Iebr_--Ch2EUdIhZQF5Tzdwv3RbEu<>KL>k|ZZ`9P?YsvpR}lKbM?d@E+H!qc zDfR7zAtH@;FSYH?(2D*}ycJS0hTE`_H`q!sh)ug0`crgY3pz+A>ofsl1wczC%I}lx zzVaIP?a@c8IkJN*{S*%5O$9;D^q?qQ#S)*zV;g|McPilI>l|2e->8ejBU+?C-8eESFoC)m?fKXqPaq_v zLg!8I6>n!AYl2lIB?JM${Tqnm{|3TWhDBNcKY-k<8?qbc4T1$@;y|LpAjKX(4Zg6xG; zBhnyQxOE4NK%?NlhPJmkMA8my4C0@S4mEx}(p`p3O$5jl+y5l4Pi*>whI~0GoqNA4 zJBVYZM+{W>TQ_v|d7Ghr`mtRC5dxT{ve>k^&T0o_r2&;rqaeewOTFFj#Ju0p7Tw~ryYv26|Rh-!_2d``=C%`4!+ z--~^Fb&oY*zgPM=mC&H{Sv%K2YL!Vfb1G_V9(GyOHg^$Wzg)*|8=e6txv?{U32hz{ z;19`30PO!0MVv+P?i|!kjwyB7G25Zdc%>3sVKyF)<)W!62U`vIO_ACMQjt-y_9JGb zTQwviKG*~wD01^Zk#~-FG`z=J9<6c>SUVRAXzZy=dft!!%-<&P*{90lp*acp7%^dv z?lUuh(@RsGFR+*egv{Nci7pYOE-vxd!JAON>v>|A%eN8kx!G?W1CKzA41Xmj2v=Nu(#~x_^ywWD>)D9FOG-p?%=K^uDvG1p{JLpSyU&( z6Ogo7x&3I-$@gT!N1sA@As5ZESbUE2yI|g?YvH>pZIa4ArELwhNe^aU9r`}sw{usi zra$J{1cfYF>uRm=DL#9wod^Q;J8yfr&Z@xz^J(9$eZ1W#4fm{{_$k|wCt72_J<^dFji+0&{G#a-u6G>BH8)Ta z%`vG3$$?4?f=!7=EgX!PEjB1v0j>kA$S7BN-*gc$qkymd^wb~iUKX_3sB4w!K=aV& z0=hWv-Mte+bo2CNpXzZy6>{P z!|ihrZ)E)i-5F3jWqlX`Ev(t;&)g#7`{N41*VfOfHF4MXNL6&5hBtDLQBYEKyM z)U|*!A-U@7X4{g2>hRtN@-(YG{JurZB;*5Wt>l)oFh*b>IrKFY;&WdQ0{G3p5DwlGeIFtU;y! zXEhY(hBu}&{TyF>o9+%*1Qss8glv4vkkMCl;r&fOaJ(zXj4J@DLv-r5gmlS9Rp(Bm zyx9GK(3dX>%Y+;nU2My^5;LPX_p8HigDGLB&Yi;B^3mLsoDv1%2`(||s`tDq`TnQW zc!4EI(PbdBj2D9Qh}ic|IGlzL>_8u)`;7Ej6RDGtN0w4L-Zr_|v^-?fUADJx3Zp(d zy6GY&Yv__1<2kuuK81zzNa3PBIr({S{H+Eji(;yrwQ@Z7EQgIb*ZFhH$P|0$X8ZoQ zR&NW#-{WT2!_X~L0Y;O36%o$w5cE2p1am6Y3qB#GF~MWUoeumH1mal}DfwT!q{i|1 z*1q_O0=^&`Ee^XActd*jw$8s+a-de#pP}HkdY0ebGeY4C#K2yXziR@;DnTA1#|iw< z(m9yc1^k?xr~di+N3ak$me!_NXn3(9{Kh+$R=bJ!rtcaPoFD3#aG{(bu8 zLI3MvG0?MK&tB*epZ@qEuC2@?PKsqv>>zwEWYtm%hca>)zq-zYUZd$))%z;%Bm8RH zdr>SJmJ?_JaA(D&pR&#Up!&;#-NS{Rg8uZ39ZF0Og!IRJeV8Ag#5;(+%VGvVIhS!( zwVQNgZQ4#83voP`VH<3&MY_qAif_89Yva@+l?s&!jnq$_(Io`i>--mBw& zPj9N?+;es#e?7fnZm8b95T?g+T`o9yFfYB1CB)aR{M7N+#w+#*vfWK9mdE)A^{(=! z-x%dP(~93VuM*=H81mXCGat?`n$OlCwqJ6#Jl2y#JKMx}kpwf1D$cou3ywRt0XzemNXuPMIPtjYCR=Qxs z8SEg>QlyL4%^#_=e|J*RLCZJJCkl7xRw;A81*$Xc6(a*oe@m=9K-c$2Bl zLy%PqQ!kjQ#dngq&(_Pbp80$@+j$!{CgBdpg;s$k&%Xw2ukFV&( zQv`8D*LHNB^i)O;ebG~0<0|~hEJ4 zzvdrzOQ*xRDrp>bi;Zdymt#nbPDX<$udg5*stTiDzl656grU3YQEG8Vakwokqhc(-0U1@?-Z?rAN5u1&s1R($-5(ECjQiJ zKTzo)=`An>+@rq*1N<6u+r#ge>WXcD=Y3@f&uKWBs68KqWu^8?%h`0^VF&XsM?m+d zlosx$&neRc#t=3%WOJS*@m^2~;S!p2Zoii5l_Kyq^+<_p@G$O*WPF;!<_X%}nys|T zwQSF9RUZ`2@vSaWn&M9-K8t*=nECl5mfU5EZ=rs2w4ALWE#>8Py9-xE#nVrNF!XnO z3U6?-UVqP}+dTF@IGr}<_Ny_Ezh!hSN829zTM(+NaT6?YLSVGFo9ISNXt5(+`ovsW zzYci$NY<(BtJKtTl$5~o$3aT>+K0IFlElhn?Y2L?u|@mq*Qcvi876*WeXB^&NYMOO zbJdmu-jiua!+|$p1aMu{ z+K3mt3L`WS1-`BoU&J!5u4l`J3P-iUMS)k@&;92gV@NU{vNRM|_AEd8hL7eNpWm{J zs6K8`FR=uuO5CzMR57)^@MhIvguU~&1a~O0mQQlEuZ&OMU6a_Z_mssxJV87tL_S&0 z9wk0A(d8h!OW)o-e^rtBc|9H6i66GIU)k`J>6=r1SUll)F6y3TWk~b09DPH5xvCxw z9@wqRkbQY8d7`ve6j1S(yd}NY)#c2FG7x(HMowgYg*0t%itDE~#TZIZZ|%5}mFZ4T zm=J!t z@>2L1EeS{Kum1`7-LQ8jEp0HdZHQvMIIId_=Fdlm9M~mXznlW!noH781^7gm?W1&H z`sd+j)$adomTyFzNT3A2yGAriKlrqnNK2i-6zEzX9ifBNTegaPD@8S;tnO?1kxi5? ztzX$(hFLo{v$Pk`?uxuNe2(^v4=cd3aYp-X^bb!%kGLpP1p@*(CKP$C>6PA6`80h| zckYEiUXG;HU9> zfGT|2!|HE zFl)gRY-Dx8HD7FR_{BDRIY%m6UizFAH`s#^{l5~iN3&>cSXy}&0~3hU zTA{SpBEacTl8H~SCTc3yy=;KQy_!m%UREU{rw-JKEe-Gj--}0V6lsxf!5E2TB7Qk$ zKb#<5yp~7`JxrfOcn0zbxkiyazJ%%BA~zY5pXdSE_eQm%zF@zDS5^y-_B95Ki!-$V zlqYsza4dLs>_JuUEpT?@oQ)+H>_I080FrPv{J)@zY*Z2_hBIZWNQ8wyWN^t?f2q53 z293SWade%anV^#-&V8}+Fl?pbvS`BbTQS_VY@C~Cm*+l`f6kZ*aH z4iJ|0T0<lh=l>k8O7t+i^)GH z)2b+LT@-m+;rh;F#gNx}gj>i;J<&nPg8lGIe>gF5^#jd=W{ewS06)$I&OWlQE=N$G z1895R#b2FKv6@(JK;#1%*|*KeIPOE_08vu|)qWt2qTt%_T6Hhp_;pC_-c+w zMI$k9i1?!ec3;B`Z3Lx{oCMFJIrV-9|2zNrTeeEzGU!#pk_g)0kU7)BYU=;^ityiS z&TXeJ7h+_2NgWGZg>o?S7*6aL=&kL9LWpi50r3vbs%6_v_PRZGcQ`y5Zf$W9tGcdB zhj@Lau4lfT<&A%T>q473o?GTDpYd`ey^%ZRiw_RvX8Tm3T~A_t?Ik zY=Th;pe?HWLHA+$^HKv2e$Q-%zRgm;h@!vdo3iC$p3aGEa?t9_`@%HzT?5{O!u-&a z;1`kHwO9q2)uT1KYpn3XyP9j3o9MPxugQr@<1x7MBJL9PvtEIVBYM~}HQ%z7Q(|ga z@-gz3-EyAYcqM&Q!)L{PT}Mo>H9-f{&b5)hv3bSh3BcHAf{*0#kH&brOh{C7elf+u zCxMYp%6?BSI@zuvxbv#-12I5!X{>M*qM&R3)i)n|G?@I>Dn25bf~R?IFfvwzl_l4Wmg%D0BO00! z5>mb79(}c@OU=C5{*sl%(R-HkA$kP0MtIdo$M_hauS{L@ht?xfx%SWf&EdKg*iSEw zP4XxfTEu=kMUujj1bZ~`It+;yRJ+u&eTA$#j0ydYDyl2yrB0>p%S`EokjZCDd-k-u zL*-o{%?~Gr#ye|1VU+JjIdsyVQ^%2EUjPA{qoBiNyQ-w7k?Z*TJDt)||W zTHY;$&3*%(E&B4|{($TG4)4@7Cl#s<0T4MnO-URvyM$_=`#s{+bKaxx^vH{I<4veU zVe&XGl_v`klT~b2)EDHr4waY3i^-7?b2|?yW1rSTjkBXjQ_?`zD4iwt;No#kUu3ul zE;|)TT2oXbM(dXrQI7>FPb6)7$>JjB*(r9u!e&E+p% zD=eE;L*LJq%XSf348a($)Mshnf-{SHMf%p|nt4kEQvTkeh-S}mlb))ZgH;x+CwV^^ zgV&lP4pHNbkVRP~yL@r7_@hT)e zmqNa`&W-B>L)|{?j&P|(`_v!AVnN&QC@(^qDGC69k4S}dcL*4Kr>3N)m>;l!5o^}h z2(cWB7s1b{6s?dlO&8(gF)gqFt})dOyK3EdcbUpjU-8u6L@V7LGBL7J#>V#goEbn#;=6J{B+-VHjRY%7J@8f^Xp<1 zvDztT?9xRg0gfDofeKH-C22#6zM2gjtFEFnz%zHAb!f6#wls^d|#U z(z{a(QDg?!8rY4!9N49WAXLWDcn?H`GrTe;VD- zoccgRa=Bp-bMc=akhwJOq$~&^%owB*$sRjgFUJ96-o9Db#WkPab$ z1n1jiKv>nenK!|8zyZ`o|uA__R| zSJX|BS=948>7I{Q)Qnlus|*ij)*Ie|?FBQu$aq@k@e8 zl*=x;cJG2><)w}Io9gm&q44KngX(9|PB~R+ab`jw<$^~-9*VHNn8HXVk>XV@IIa=gk#wTT`V1ph5oe&ce`*yKnn%d@1y_+X&O6c>y@;#Tyga_A^6bQUWS z6jmT1ckdA3U~pjZvO!dwp2T!$rzB9^o>$t%hlU5WgM?Gmudm$XL5mes2yDHa69V4< zZ?$bgNZwwrvZ}hZ6zxMT7fWqqn?Rb>Zj zQ$O*G6SbAjc|6gE`HL3iS0M03QTolIG^XG@aCYsli@OmGG7vj&9ZsqZ%Wrq`eA3U> zQoYR37dic3rMMy+<6-fJ`43N51{6KCJqBFl*=xi^_j= z8ALqw$GH4>p`lyMM#jQjnD%9|(-J0_?C_KPPIO^48_6d!uljX1Ly-$d(`j^HncFa7 zAaNu`+@x~oy-*+Ghr;Q?1XUt`TdXs6bhTAvb&S0=&lYmGh6<8${lh`ks|7c1dEzi*x)RV|E= zp)*%HII!Q%uWIaP$`OmQIdqZv-$rOYrwvRo;PVLH0Bfp2Fn4K|{eIRb4N93KDn<8>53jKlRLc~sn#ZSTHd){0=EZzbfFR5BObvVJQi zZILG_C;jx3bS1xYt1U?-S?2a<%h|2egzbr2oaus#bJ31Q-n_hAT2IJ0M+um98xpNU zFuOZD%0OxN4Y&BR)$a;IH9s@;MR0wt9N8b3IPus%dRjR+eh_c%-Svst?sO%8=bR@} z7$`xlDuAV2S!k#PqbW`)gr`3FF0Lo%@yogVJ-NJS|AH0-+jS`4(a>+_k4kaVKeD?M zUHy>Rao#G{R-4;P zRdEdFDU+_|Q<$%Pd-u)ULboN|wlNvY3wmFPjezjx5+mH&x88||gw))}{mD0ZkZfkDyt2^^R_U~4x4Y`&uXz#W_Uf7a{`k4-9@>vE%uX<;>|0J{zoBgLKgX7#ZUU6%z(bOtFb$}Hf&q5RzleT9;wI#$dYa-WuF?EfiHrzl4frnVINti@_RY)Jc)%b z3}J_}zNUtt!F0SHueBcV>rFh)12rh9x8Hj)4Uk(%EdjiZ3Yuvr${<_GT<olu)Ut!nu}TkZqc)#3J8n`pC4 zHdmR>mk1hbAfJUHJq1bgLsY<8tQ2#(R5_!`9Y^F$`gyEWuLsee3eRr*fkkF;hT7E; zkYHdf`jxk?8+giLn^+F5tKC1mrAqOHfvl0wIegl}RvU7aA!-!s0mn~{3t9h9ckTaHs~w6Bxx}hHFj^Z13AQ}izDjk; zSN=nytOgg3zGA1L0#`UiEDD`VSE<4Dlo2XPFANP;%qbDvMoW^9^$KQH@^SMrTr!U5 zmmXQ~dLp~!Rkbp)WBOhzDgtyEP?7j9E-C&Wf^Coo8~-*`)PI1-7rkeKKx<}Ohyd@X zoZ=VtMHs($WMm3&7(TqlsOxKqckCdA7ZU-F(}HH+9RK<%=3Vrso9&`?xE1o;&@G@L zjr69Ezde|J`x~^G;%(Gp>6?ww%;%jJA^&Ai7=N8!mcKEb(jdW4uw~7k73+tnlVC7* z#I_a3{KtSyZ9q;&+0kX&<}}$DBA3Q;sG5;p9dA#CSdh?_dT1S4@D zQDF&91rT7k{{R+jk%3mOW5{$M6d1DOtIQ{5vl7hMJ{dmw_rqA8;lNGoKWM@IZALz@ ztpr;B1!?k#?dw(NtZL{VxFn4hT1Zz>uG4QXjTg0$f~p-cQucdi*lSO!tub7y4DBwN zUa=+5g21&KE#%wa6m@`ww!IZD8q7$Dx_*}3oeRZvXe^LyWLjal3IXb5Y-{taDX*oj zR~X0hqr0-)jaNj0}jFE;__y!BC_D)5_?+B^i^y66=;^& zb|4oc|Eu*MSq0P}LtC|9$j#lVRgwaO!TWJLsAH&vF5RGh)Zg7&O-&-%4VnH-O`F}Z zz`8qjygVeHDv?=SrSqj%oiJQu(B6Ob3c_r1h+DLc)W2b?L@xX43gm*Sh}AsCX~sA4{n!;+s`MCzAsI7L6re?{(dD1(CfMKZ@`?-+z1IzR~>K! z5vgGMYQ=@(UxRgNLdFO*OZoNT7~V5_;frVaU2}*O96Rh-ZDdn2;Qw7m17ZVp7F9P!dob;rXTv*ve=hnT7}h4`jSSF+H3j= zGpvRz|7(X_DxWplamq0Z0V`yC@fM(OByirm)tY2`=UyXy_7FygK;+F7O1JO*ciS4) zr_0l(Bh?Eo&hgMz?5SWFYgoLFd9W%`*487Ra~ei0BnYNu z=`Ej+qoc>tZ$c$;P1HHaoUpq< z_R(}h?1f(`XGd*dhctnRII@FuG73p%FEneVVspV&pl^io3#a10b zCd9YtF=CxHYbV-^SsZa!zJ*1%Hck31git$e@{QFnTv5NPB~Yi}tWCLEYtE$&mk~3H z+t&zDV}UFoaJu|;>(jMat})%h@T-WFpXQi}Xwhes?uxNJ;ua9#E^jrgfYm)5nxlFP zQ7B(Z>A;(Iy3oTmxke0=@#5#YBEw${L-Uy?y<=|8IRo!uJ-lo15WJ2qP=16dP^zZ# zug^~9;|K<|lkE{)PW}6B{(_cEs>sxVXBlSXnMC&wD2P@mEjj~6;|T9Z|RvKm*hE3J=5=;GkC4ItImq7hr!Tr(qFl*ptL#m z61!&sBAL3M-d}I)6zlI<9lyw9J~pz$?Q{CUvQK=*i|D$Ylumpc$I{@3s~lGJHh21z zIkOF=YO-Ia4(uKp@0bBJS-M-E@?EyDK?Th3n1pSolc!|9oxxUOV6=#1m~7{QlPaY8 zYmzoHc1PSpX~j2TQ-~!~nQ<@xa84I)KlRo)$@$D7gQVSL$KQsIB5KBN*F|?xms#yR ziX=G{F(~lE5c^$G<*l5#9oD0p>g-X5YgTrTW3IN}XFx0Ke+KxMrEJr*g{cfNPf2ijTziyCos!w> z4(4DpF~>Ta zun!A)~^YGF*=`j%YLI4Tner78JJ!LYy?NA8zTh+Z^JHW6#^UWs7=yx*#mO4wU6 zi0;z-p*lv;Iu+v5j4Fsd$(A-D-VU%Ap^rHk1vNO_mRi^v56Fq}qZc|y*^D}JeqNBm z;sU{WYZ#!71SQY`iE##;3l=e8b#z#sq}wA}7PY%U1x_!nYcA9wZw+Dyk|aoy!Ra$9 z9|B9mZO$o>wZH;%`^x_5Na z{6TK^&G2~|ujle~kE!7f~5H8=C z85)}>$*`zbs&Pm71DL9sb;fppBO-^LD<}sg9M?XiqzSZ~j5s467aW(7Dee`IHPpX$ z(P?(hs6M*KWt{XXm%TGhTT=a&E0V~q2nMkqHCIm*4;O&j?7D0g|2`hzF~m6G)_p4= z8-H{j5}?5@ghm83Kv|(y^&dGy7|8`#CvXum!7>$VT;>85=3BN8%dsuVTh?(Kx@rZX zIg!`IeeUKwj8o|pA=erjqUZs=MKm6KU`_Lkc(z@IT7?uB(Hy*Cgb^VcCpV!=s`8>Q z*925tddDIXY($-suvsq%39g_5RDena210r-%T0HWP263k(G{s@gnmoqV24`zeO=I$ z$9JgzD|7!ClmZ0{E_TwE#~Bid zGpc|FNHrJkqDGN{>Cc8{hnkpMhQcP{q;R>`D33pKjbgzovvX*~CuyL?nTk`?pMH<~ z1`S}gd;>)Q9{LMLt3?-(?2V!-Von*%w>Lh5pVfw2UhiY>;aXuuH# z=RTGc9Gki?Uu(_)Mi^6iaCj^An4guq73N7Usb@RPS;25wB^~d>H}}iFy@v-4 z7F|f}X|HjV#Er7_$1ymwI<4d|!H=${U@o}P7O7#c-?-X`_s}5C#CU;D z)*(_mzkPfm4kc=P?*3+_|INnS;*s=oM9X@Gnv+W~lL(DU(v~du-xxkZxJ#n%QBCC? zyFg2+p5|)-UI4+SXp<;_riYsvAl`HHPP>_Xd@>fhC%s>1TpaU>G$Ty_lpz}NqPs3l zzqj@7p{2;!dU1`_qp*VkUp(9HhsAVl1*!!6EWU^#PGP< zff{QxBVPD$`fH86~nwty=82VknAzL2l zWUn%s`gQX4b=uaL_MTPljbb#~g%g(KZ8|Oc^(VK$p>!L8>agqFl)<}fV^3b68igBu z)Eld#OvdQ`>Z;8=br}*0O&nG}$QpBkpHpeFt8JcJlML!~QFVj)daj)3g)}M5dwTvb*+Q1VDKwT!Y5s@eB!Odm zf14^9CR_u8-34poS`N?>j~GWeW`bnJ_i=Y7XE-Jd9y-`yw+;{AeT<=K5i$-Enw@oH zUSs%f9M?czTn+vmOfZM~{$Sf)G3Ud3kyQ#*k@6L@sq6t^(&v5(&c2Jm1~!CrK|A@I zD60JuOP>^is|Y?)HJrU+c_#@SR=@XA5b+TY`B2jwXxp!)lU7q~Vxirm6l+;9$}y@Q zN{W&sLGh|2jp7+i{=$J#C9V~~sN~sAFBK-dpXJ03c~~8uHFhP4W0kd z;>T=r__l|19M-QEw{dE_gjl{hN1)SVlK^bD@-ywbn~dWq zy6$3sltl;4&)r<-%yH;iC7%GoHcYhgjwXpduSo|CwfD*~|Ml#FXFzm$Epr|8+D%V) zY#t%Hk1)%(XbZ9>=Bf&}U>67QC+p06sYe1%NP{WlOqhfl-TJ~a9 z0dIackr=y(+6IkX2~AEQD3>+w!Dy+J2GeoXAxC$jQUFZ|rc&SWi@wkdi7hWav6%tC z7~Z?1QCU}Jpm2tl1s9tkf6}0&x^HX5O#}UfOdrzIdDJ|4EjF!U+8T;TaP*YcOmsqm zW$xBpPgjK5|9;I)wzPyvPj9}W+J?=;R|GSx@+|k~VABBraE{&YiUR2=-caeW=+8A7 zzbq$TsEOIHW^(2N!0;b68FARNd-Jlz8Mtlky^L!{kTc!)0-Sg^P;y4QRk!?Y1MlDm zldwx8-tju~&7f#~GIhY_QV{TCWS^Yi19pU)1`p>DcngT^64-NhIwk-2*8?OohX?*y zxTn2^Knd$6vXW(yB}9_a03XAbeMxK<&dym{fqezv!fL7{FnYKn)Xwof*7;|AD?ozwlQD8mQd&>NM_albIrHhw|Swy@Izs z|E%G&Ar%Mpo}=zwr2956=U0-UomTNW!~#2E!cK8zq$6TKid+Miksz=XU=F{JWJ+Xj zT?KVd6OkR{6w7qAl8I++@tk2k1%7|tx67uo9Y7yG+l<(i>7sVMHqGgjV^vLhJhkJs zCf2jfn2Z(xAgjE~H$x!-c<|KH|DqAk#09Nl(zmI;0PK@p+bqv$Gl!f7QT*W?PA^}u zPEvK=h@Bs~0WI#;5hXy>*=tMg6YGk^=-4w7;7NR+L8xIlL@2zEp5xa09pwgTJ$8NOpi0` z|8%1)S;(k9Eoj~x8quX-H08&ZbxT{3F@|yE-e_-<~UEvqy`Wr=v=VK3Jg9fuA)RY;kiKLAj zaj6#UCR$A9IuBROdkB12#cmd^$Uq@xb#Y@r?!J?xmFA{UHO6U@%M7q~liFmSWZK173|U zKD4??4PH3K=BtQQOuZJzCfG43VZ}QmQG+-1ZEcK5oUBf1%h@4fNjJWqwQ9<0x z7zwuVIdSK)w?0ngm!(Rw=$&yF$!WZu%#-FcTa}c}KiHhtW1|cqWk<}Dzn{`{iP6=i z%hV`aSKF-NzoNx&XvM2NC}(eT7pSq;?PN$hal4)=B5}r^>*zI$>XPBAaCMUhc!7=5 z=fWeBFB^CRHqYiL!TlV}&>^P~mYIz(f%6_~${b~-)91&VveE%>J+gz@bl%$cv+dFw zM=ro?0>y+@WP=IZGK7J~C#=GsK_SX%m#{O}TjPA>89ikMg`@Tp=jMzXPR}V;%UznyCe(Hj`iH6Bj>n z+%sRFX?M^cQi(s3)4f{yU}Cagj`gHE?ZPO6(H|btHHFK%bvyxmCl_9z{kVwN?s}UT zl3v%NEVn~D=xk%79AyPKCY=I}F)XRaHu>i({jMO`Ej^$qOb!XKtT|^|e1t4m(motc8h2G++ydW9N3Q|2jnY8GfmF$9qvObdT-*&0HnE%5A^dS7Kj+_+f5 z$-%>&hiFZEOISEp91feOg|jB>z7;v+T%6NFtUg*u*Q2&isJ$!WC^xRXN}K!q861xU z*KK0=&}mM~fxaog(z(4PX0Q5!atGqI;@xoUrxdcc55@y}tVu zJ7RPU`O-`ZgmxRf4=BO6-(q46$PX{waYvTyl47rfrUQ!o&t1S&DGKi1B9~%Hw7xl| z-)P@$f%PX?0C^+_Y+2LR;o?*@OSI>I#DwwhY(Gk!dDdeIe2IXsJNy86m!!GPgc~p! z=MY%HRX^+#Q2CWo?zyl#ia9_<X=Tf*&vDannu|^rlgkcAA#E=%(!#8y`0J z>ijDu6>-f6%y3vdZQ0$Tc_U^CQ&Y!Fo&vf&iZkt&Zvtg2%>b-AImuc;{>-09LGw>c z^IwE~nI$Thg3bUbeungMCH7zRhU=-I=`4Ia;n*gvOAs7N#E;QF;6T!Ewh^&zZr*y? zvHa5mq=JR2=1xMayuk2L$KE{i8Np+`pObuMzSff5+qzn46G`xvXlRX+jTh?Y+Oe4@J%qo z!BSbCG=ORX?vRnn?}1Ezsyo3ILbqRSwmc{^B0l9lm5EW^J9>$qOwZ)IxE;VWmpEgi z@!&4#H>n};GOKGBXQP6H&lmj{r}VLq>k4I9e5E3lt> z*NTh`Ook_WFAL-!_&FHUECPg+I;U)K>x6PWx+vWtgtJ|YHxiv*D^omwdAe>3)CfH{X$_!BqV!SA)HL$tq4s90C!Z992eSKWkPyuBejHe%_f+FF{jH|O?vL8d6a8L%+DkV77RIU^ zp>^_1H#;ApcC2o^EH_Gj;u-Z$b@9C&uU8fslkvp}LVk>`zgf;D7ue=2)A`9i6G zK#|)hMee|hNxQsvt9d@Kkk;$a0gVw1G=``Cy#+K8aKsTyth&5C-)*Z?z%&?G0E!MJ z_>I~8n62ob*5h;fz4aXI<)YZ($}G~226;s2UkZ2MqU3 zc6k`NX%rTxNr+OxsJ7twM9|_&7-Wn8%s4O*yK}~& zhDbo`>>KnVp<_y09cw_Ym%pICmo4TFga3CBqKH>$_r`!J#j7%Otd_*uWzkmxe(};P7^z>sl{E3Bbwd zU1nl^q9|f_o2cc#l6g2Z)|mxn^*@C{C6FHsfl4@NdrywVK>`)u3!H`OZpWgA9q?L> zV+8`@IG;CzyIJy~3%}cVgi<3n+zX4L*zC2_5l3(=jH|yIp#K6Vxg)dyRgF{71$SjL zV!Qs`|4*+4f*M~=xDFd zg8BpQuwa%chRmb>+RfA{Q_XC!m5{81}{y~^uOYl zZqxxG{8WjFe~tm?P&_uXitjgx_`xY~c6q5Wn$A;zA|CGR|~^$NBRtsn0^eFZWtPzu6(o?!-8t58)4JDuwh@E{1Leq2rAD$qRMyvlC6JsBg* z&h^Wka7vzXz2(OgW79KGgYGShvZb$VpJrhl2fJE?SvKtf;s_-%Izf`^6ES(l9{1E# z3x!adGS+F>jAVW;G%_aa^qS`@u6+Y}-&BP%x9~1}hTka-v~N|NTX57#@yKYX*!1u# z*Ug5RRxf!eTNbOn?0WAFN@(Ag+g>Kq+LEH69scx*3uEk`v`Ul%ZU2OdrZG+m75@{e zAY;872z9j37&uP*#D2efbvdTcl9$7PzDCX&E5iD2YE0#5-r1IH=4#yohgQ>j^tbib z^pPZYuL4`MX~XDkFt;VoExmq3iYHgjuIzR{%Dy^->4L;t@D}3cMl5J*{iVID*aGq*7-2Tu&KD`@P?U({iy-`5>yo5)L z`5bQ1TPI}&Jx*=X2OLCsIpoO1_{#a60$@0YKGpkh%$?!vh7A*lAS91v?h|&)EgPuW zXx$ez0}o9+3BYZW9`nF@C9hYM!BO^WKW&BF@rz~smD$e~-0rZG&rq}Y{oEoM72wHd z2oJeCU>sl%2>2H#^Qie(SrzkAC{gt*?$8ba3By96wv6@R$@|O7l%z6$RI6`}2~cE- zEgt{fm*tV~Amo-=Hbh@#j|^+Zu-``;ZE+^y(F*iP=*XtbcSX84EIP8^VXc;^h#;J? z%x$hdXun&jc0#10lpu_F&ey^)A3~0>$H$_Vh6ESGP?_SceYE6>1{eG|MD;yapLmnx zxLLBLo?tRSQBWDWl}i*Qjs(*x>uJ5M#Q0{keka%VQtWn~Gi8#=V(UsJNF!S|0mni{fgQJlqca9H8j(`kF2IQqdk-=j8(%`32UhEu0tS(=Va28!=>;vGlyQ+>4xdn*8)d1Rl zo#;v#0}>nwqeBrFk}c@Js1S@@U^amRoplfvb>n(O#LDhb@kX^E2=#R{Q}ka}pgl8< z0iw2^+gqy2(I5;@eQJaGcTQ<7+(>nx!9)GV0S%k_H=jG?J*Zy1Fo4KH0eWMqBMb5O zmq%~vvoF1$U^|S(L*)At61`k7U2QD&kMV()FN5cFE0+ue1<^y=k2Ee+_(dG)I3xtQ z;5aSIzjpy;YzU+(H8YIy6!``7=WQ;ktktHW1Lo@BR$DymJcnlH4pBrsYWYvKOOI9i zOok|my}xBnIR>IP_)`FORHnIiiqqh3_h>1XEU)p6}DmVYHC$G<-}|Q2U&@Z^~JTrXBr9m@@vMGsza+JGFnjR(vfO>drAY@ zQ`LUO3uJ@WyDiRgKPN z?g_0w76ijX2TigOde>L(8XU?gc*^36{l=yliAhH5J!h?)*01)lKDQ-n1sD>SYEokg?Ytxp0FPOZdpMVYWI1*%j~(g36g!`5T&ABbwBNHT zO4!TX;O6D+!64Ug3UX*#Q{UmD{1%zgM>Iw3M2`Qng!Qe%S}cI@~VWtY%{?*tXz>?ABV#IvRlS{9?7CAfObNw@gCH~Zr`ZZ z`yXk7B>jD0a{^(|b|K;sR2citf(=a_H?SO~zaFbERV;AkC>lN~(FeDYPso8k?_Gu30DS-51aLf+qPD4B&~%!IZ=-!RxFH{-nF&k<5Y1 zbP4EElLwf8X8N^}d6fG(Tl2rjPe~!70}8q8~Q|`zaKnR z<58~4Tb49^1M`fos^F+O5Hdz)5RuB!q*=VMV%G>JO#I9canom4Y&#QKk(rw#6i7=N zLvP{Ws*t#Bht20#RwHXo>sHTL5t-4xt}918+cckZJn2SI7cPZ-+Sg|jm?IUZH%`76 zN5j$6B;i8FvyXF$V-X<3WrnD>KjlEa>LCvuqWpt{zb1xDg}5SZj_!%6--bkNJc&T9 z1h(>9J;Qf;w(M0e-aym}63E(D#;J4pSt#Z;rR&*S)id~P20@ph(Jd?JdA&Jt`+0IW zLV>GFJli6l^C_uu5E$P&0c{&&GgrB>#M5S6@r~q{Tz%y#i^h34rJcm{f4k!NzS0)vzbIhqkT@&7l#BK|^73fs;o)&c9UPoxO`ci95<`9|Af00Y zEdTg$n%T&j$=a^RhIVIzu0Sgp_g6@GjJO=-0tABL*1FER-@&*EbH(XRkug0uJtT?* zbY?)uA(zjMtopFys_Z*&Sf_kB7n(#161z4K(>NqKr@ObeSCRoG^Ei40myN6+SIG0t z^6DD|1axM=TI`^ptu~9zAE&n5`BZJ#Pe}WuO%|9n-Pow^H1rP`lOn-;lkj-z9x9*Q z3UCv&iqi+h5_z_i!X@g85z~QR5jfZb@S+Rct;`)#FVp~Drv$7_OqZJ;3FoT*KHK@L z>KIm-`la9@`1!Q$i!wQw3uri1XaTWb#OaN|)t26>v`54qnQSIA0uWac)46*C6)K15 z+~4`g7-gGtRw$^BI%t`YCC;B2bF*rBwq#DPiZs`(9DM?CUW|2`U}U7DJ-r#8#-atx zUkZj0^Ge9>G1L2Z!W9~DGJHZ=5>aJ2OrI<)OW|WLfy==tbIT%L_ZjJ~rCJxID-D3O z9V!X_Y$Z($amUneLJ}}eMc^6=mkZ3anI0$*R4;AG^avhdAyHZiC^*gR zMHC;$Q>nh*BW<$AtN|7fOR}JMVkl=89E1rtj&YR@gD?Q$9mNNHqqzT=#Fw)ZkCT*#e zTSq|>5YLlnso6|q#_2kq#^+V(kNnE)J@;16{&%;pG6J!0e$5)A6P87M%evn`^uDc4 zaFQ-&z)=U)Qyk2ASnq6-%& zi^*}$;+yP;pjRa83HqO672@~IFHNZh@-8rY%~Z&GbGP&yiz+Y(ycvATCwkqy`=pSf zMIJ5;CH7W>yl6)Yh-a2rOcsuo=I;*8DGXLa=g#X04xt z0DBGA-G$fqcVO?E;|iLbpz`97_NPe9XrE)QX=5ax>`^OWUF4n{^yh=GQnSR)+@7K< zvv`eRILapk2>3#?b`fUs1JK>#u1LBTegV8oRq!>++JtuE;%jcIBod#q?5@6 z9bx(*W+ujaAun-K&NGzaYc#kE$Sqn0?>DWVdjJcCpLE|HjCMAt2JOm%1UPpD2LwXF zIKLBAOVS?GVn;?tqrs@tLGcmO)u21^I2k7b;X9OsU0e;1&c*|Wt&p}NwD&;LZqYn9 zFI*E;t;w^*UL^KBg5Y0eBkjRUQ2uX}53G>nVDz(e7APdzXPj#oDjfWH9{#F~y&;qW z7cK})s{(%!42@l5@w@<}-7E~0tBcgy_zyleu|m5O&a+i<8Hvcpp#KkVPv&MI--+s@ zM1YOlFS1K)7RQs;XHvT;ca-`W`OOHm*hWx%G5Eg|D3>g!SVqvCyf&HwEF;)YT=G3V z)>+p3P(NicYNfC>7Yd>P^uqSNF4v9l5Ab)%AFMQ$p^`Y$H)SM3F48YVKF9=Cz+OD+ zxC54n!9gPVM1sjjPWXFEc5M^2yqTgl= zjgeX1fQ*q_GpYQp8E7pKZLyTi|FRJ0YcW6VofP1#Gw(iLOsa^SiSBLOIY=9N{nvuN z2dEo(iUiducZoxHKV*WXGb z^@|{rm~3Ef`i$gtY3Y0%NtP>ve`VOonh=4o@5X-uxlLd1)!q0|Zc0=~D{J@)XTwg{ zCh|wX69GB#`HK02#FE%|F4#bcHt;!KhbgKL2MA@;yuC$JLX7TBR?P=sjhPnPtl>mS zHu6e0VLP#F)AgUK=rV`yMwbeu(ILNS@52ojec;Uu+mJyp3u*|i3zbWv>{Gt|9hJw- zQ%S~enbixigMQu>A*;xNd<guKB$T!49r@5Y14cs`N4@uvTsbEyH8YqQ7o~7mRCc#N~>?zETPCITB-M{ zoFi#W|4cL61dX-0N#VV+=~HwuSKTzVdSH~}ZKh4Hx`w=VT zkr6we;&Ynx9kPE`jr$9!scSDpZC+iMqY8Pj_eVr&WXcO;S4Xu?k$i~97agrH&gAk3 zZLE$CHyEwN!7(%*+2tJgIm?*uq+FVo;#NZK>sM{w4SDNxEn;(KM>eJUJD``mgE{v) zcfM7xCw9~vV0X20DhA&OKM3U;Yn^PuPvcMY&)pEfU11f(>vwur%wJ(#8*UgF;E>V zDh*dR`IcqzqKm*=!G25PYzvN2GR3X#P0;ie3mj55pmRq45E?ot$tXBSCcee|JJm67 zBG2VJ^7#_QRa|=C@ky^wz6dmr6SHlFUN4|e+I&$U41JR1VVoGnu*UU6R~a5xuArou zl)GAahX}7*9aMLCa$|R}bB!%Hd2Vqo^KI6otp#rlZ4fE!goKj9hC*Pv0&8SKm$0zT z%oB_t5;-fFCVsfME*2w#;_Tpg;8{QH{5)v|?-!Rje>vN`j`hQ;yatkkH7sFy2bsOI zYML7)fzF!{f_v9ZXhJJF&1_3DZ?=XvHqp)j8S#Y4{=2yFhYE|_9ef!9x)2KK1O1ZL zXX-zcLZ1z#JJ*J2%h`S>j-e#{Y?5h&|L|yd-5zdlYkgDeM(uv91MUW(_d?#>*PKOO ztfnVQZ=$8?SZMP&Zk+DakvdRV{es{P00mPpa}AfGSp;k;2j`atH~;-pj9`!Z$L%Jz z4F;D2k3h9wSAGVFx=K1s5tG1{e<)-dATxCJojM<-BM}?YeDRBL-GqDo85gdPEi)c@ zX3xfz$RiSjIObB5PU28J@k`y*vR77cDHN0?-|s0NK9p}BUAORMnneT>NC5)Cg<%4V z;Sd*Q)}$RH67uN{J9hP%2E-YS-{1>q%W%5keUt5g?;j|M+@W&&5~(EsE+(r%6!@vAV?Drwa@>ENqj@IIHF5#>utNT+OHXMBHBNmIpi38ZbN8S7SH|D~^x1d2SxEJVN7p z6x;b-d*S1dXp?7{Sbq_tS~~I~|CNxwKj<>@eM4GOv}%oMuEzl`_zy>}%12s5NbX2S zGKg#g*9^UEvg(KIeV%az-$uDx)?I7s)*Lp3^SGPXE{Xv%?+u~%aJ-^b8EGJgqXcRW zj8Tih+BlVsj9!S6;`3ldkCod$Di*;cb|Uc(HJQWMpVB+reW@mq1bP=k7!K~AdFdk= zhw6V^f&7|luF}8|P*7{-S;BeU_Fm+nE{Q8qIY0PZRee`N#l&{^;}F%^elugpzmWvX z(xNzqB!91l`ndhMgMNw9=Ms?>Z^{4+4@Hi~c^}60h=(Eu>_^)>i19FYG z?Ox}%htJ(ve~#Nax)!Psk?@gz)o9Oxd~#MjUFt))3_>P00?lR!*ff5u+tR|3n%40+ zY85ed=~)g!3yMIvSCt{9emfTTR{c+eN(SZGAYLB^*Q& z_#xF#Y(M?+LTtF`N$vS#Y|H-JS*53Z$N!uFd7p*Mj60C{ek_8kpUFM!_o_k(g{}Vn zIhg-c_Qn)c+gloOqE{+)a%iSPb%7dK<7sigmmYZm>`=?k>z;m!xIK0^;rwJ@yVzwl z9sR>u$)1Et%;G1|1ZDEwyJOOuvpn<`9opUXzRUu7p7SOy?&{v2xn08GP?nYWqB62n zTs__5X_Yh}J`G%bZf+}5d)r>fE$`PEktfx<{Lw?)1}^$yV)W{xa_;$`#>#NRlXkoW zs5zLJ9D0%Pr6id1>%$sIZkEZtcG@_`CQXB`ubbbiadLTL#N8mf>Gd1rmtre_BXog& zv`)$0d!=4)*v%w#U*Ux7LkF7Tf?^28)R0%P5y*+a(?f^bX=$h^8sbGHmas(jN?7MfysyBiIiy`mo%Z-*o?dj#D8%(yE zAyG-TFkEqWjDAUFszx2)sj^G;bjkx8Z;?lmL)+LFa_F)ASMJ&Y?oNi8LhJX0r{JVsAkSwOg3KoA%d%nILP;| zX*G>LRp|8f9&@Mb_xpkTvJZv3DU!x~{6;1vC{P6G>2k_u+<{b(@HJcg>1)^(&i8#) z(7%xAm0LXcs`xL%YuduI;gYNK98(#~{^(PHgPk zpMk?bbbt8$BL7w^)@ zEFMUh{(=g%)Y#*XvFPyS-%Ez}%q;p7fvG_s){FXd>m?g>}C>0IwOJcXk1rsfJa z5>@=CeH`SbIEZF64w~7`!BCKJz)Cmu>+dm^*Z7pfCO!~93A6KX2y@_l5Rf4V$gr*s zAOt>gCuU1<`Ou7Hgi)bEo2SF~nqy{WNmC}C7W7YcM2lGgc)>D1BjFbslmp%ZATjMI z*y;hq9Eh_x|G|J8CB46RTK=!ZSh`8Pd0ohaekS-~k=0}Ro4pOUe1o!3OL2oes6ng1{t$N+k(3{)r zoqarBexpIKWEmFx{z_x#@Q?Uq_RCnUv?gF}Te$oswmOC}*=Hx-RaBN7C>xdcKO2okxtaB2NQ zra#tjgzq%7h(?;h(aD#NhDld&w}GYUd8{|xZx+8SV_htT%Ek1MY3?p@sBu6?49DL@J);V&o!=PW8!Ew#6lJhW?5i~iuM zDa{gW$ubq(ziH+D155%1fX&>yz~;eIz271j$S6ZZ5B1cSyh#gwyQvwk-Ur2ieMkUz zHmAMdBk*t^SL)K|RO#!Tngzd24F$2>$y%HayCoAC$r5#LvgGQ8G3xIbb!% z(;DVG-R_KZ>SRDI@W_> zkwmSCwq-%Uu$*6RF;j@*_wXrBal(SEVICa%HG!haa|?kbJ@8cUXRg{p0V{^%*4EH- z5?WjPc2%SN(l{W?y_Lo=f|s<7Do3++n^0N|NdhIm_%S~tBS!j*?hm1YxV3y?aR*zm zQ)q+VdT-uPWE1Ok0<50&#;BzzmPkyTJFAfFrht$ zeTzwT@*y(6dez@50$%Nv^!sX$*i{b;e{!>pZ;%(+)<>5y6!asX)h>Dyb#$3^;){<~ zw(>qO<0oP0X6J6{d`sb**^v}K4?55)dLXa(dVX=CP0F&Z z?TR|whB5@SRrmz5+o#J%e*lOlTF=?!`Qu<4Wjs$}SEdBU$NrSiVtUzS+d2j+5$xreEAvJI|Lc@1^tnYQLgyfx~B7 z7neW7dCX6-lJZmLEk~81KpW_lFN@L=m}5f2UAW|YGu_TVm;~};pXqAUHS!wX9@%;F zj2Uv_&8ASpRHGfRf{W56Hx%NmR`7%KoS;eB$IQfFM*JsC_wxo z%=S`Wy1YS&aq_$4Hrvo;-Cj`2E^`aT;;r)--(3!bLeHZ8d7sn4N+^E4e;NFXwO30n z%pVuXs0EncV6#VRl3T99EigN=R;2aa6PA! z74@$&*>>DXiTAEHKL3Ze>*eddh6823T0s)=Z`Q_kL#j7Xj>sOO`feXZOC*2$jTGWF ze^Q->_l(TYBHlYC4+Hf62NjXYnIgb!wRgSO6x*{!9#C5#Y>YwwoHDVz80Xe|Ykirc zfluCdA*4;38~^tz;q}L&x8pYxSMNoMRR)&K_|krC@#aLVcg}whncV7$JncVVhPF^cbCHM;mh{Ze;?3kgH(fg+z_QUIa&$swWLoo~pSvj36pFBq^Q&ac6rSjL+-w*VtNm{LW2BQYVoTRI*M%H*8Y-H(=< z4)a#C>bg{*gfscFkMfYN_9E7VP{Xxa!PLXRapd0OuY^QWQ&}-i9=u5+icHK>COHFm z*f;<3K|#}(S$_>~z(*pRrJgh;w5?Bnr{E z=?F&mhKqs8#bJbZ?0ItG`xf&z7=BS<^DI>9NX+G&+(JbORIgJ791@(<>2dM#GJ$9P zcCHdVTm%s%L+RB<@rhgNr=f#RRZI5wHJb1KVUy==itqeH&c->Ut5!XJx74wh@V`({ zef&~^Q3S-Qe5Z<(=krQGNY3FA$x1WPm-S3OEAc zk0XKslHOw?h*cVkuc?rmvgLpIp*TM#Fjmr=d?EOCFR`9zc9plyLSG|+6t;E344@&p zp4iVyCd6laCm}p)x$|o9+b2^0Z@8P$HpD7;{;%>O`W>)uKFvV7+MOrJ1q5IQj|Dh| zL7RhiBO{JW>FZ`o6UtfN&z;4Dx_H6^j9Q24}d#DxQ8XHFW=7Lwv6!LT|hR`o0(NZYbzsZX1bDao%@t(I#=63|A5#-iogF^(_YrZGpDUkyXx~ zz&?BXPs}Kc3dYZ6dV$6#sz(=3_^t}y-YB*WKFJ^)b3#`jozyR0rw;CRG8*Nc0j+-~ zyK3A)g)jUg7JKKwaI{RnhTm6F|l?%fvW3h}pH8&(n6o_W%!f&7^d1O9Ok zsUma-^if3qXDZO)EK)_}PYYs*2Mv9R>RQ9Tp6F#zLQ?6>tvIt`nbtq@iXRJc=Ey_PL5#Ve3GBC@ zir77;jYty}#38fP1$EE~CaUijY@dCnGwWUsQVaId5fqS^(FThDQhckK{9X{FF`v;K z$=FPkTTS4IgTM_%kTW7~7>-}+K`Xs&Pw?$NzWRr_P#08G<|MC6c)|&>`mkN+6^NW{ z?rRv4NFVdBX>X!DDOqW7>L$7<`3(m7C;2e)Bn4T3^d=cFF%?Fhy8LHe%IQ}*bfU{e zzI3FknWBq_x_kFqm literal 0 HcmV?d00001 diff --git a/docs/zh/22-user-management/01-orgs/images/orgtransfer.webp b/docs/zh/22-user-management/01-orgs/images/orgtransfer.webp new file mode 100644 index 0000000000000000000000000000000000000000..c8fb9d1cda3a4c1fb43e7084b4e67c30e68da577 GIT binary patch literal 12026 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 +``` diff --git a/docs/zh/22-user-management/index.md b/docs/zh/22-user-management/index.md new file mode 100644 index 0000000000..ab1e5d52c6 --- /dev/null +++ b/docs/zh/22-user-management/index.md @@ -0,0 +1,28 @@ +--- +sidebar_label: 用户管理 +title: 用户管理 +description: 使用用户管理来管理组织、用户、用户组、角色、权限和资源。 +--- + +TDengine Cloud 提供了一个简单而易用的用户管理,包括用户、用户组、角色、权限和资源。TDengine Cloud 默认提供了4个级别的权限和8种默认角色,其中包括组织级别、实例级别、数据库级别和权限管理级别,默认的角色是数据库管理员、账户、数据生产者、数据消费者、开发人员、实例管理员、超级管理员和组织所有者。 您还可以用 TDengine Cloud 已经定义的权限创建自定义角色。 + +组织所有者或超级管理员可以邀请任何其他用户进入组织。而且,他还可以给用户、用户组分配特定的角色,包括实例和数据库等指定资源。在组织级别、实例级别或数据库级别,TDengine 数据所有者通过分配角色(包括数据库读权限)可以很方便得与他人分享数据。并且,您还可以很容易地更新这些权限或删除它们。比如,您可以非常容易为整个实例授予开发人员的权限,以迅速给您的内部团队以充分的访问权,并授予特定相关人员对特定数据库资源的有限访问权。 + +您可以创建多个组织、用户和用户组。并在特定的组织、实例或者数据库中添加用户、用户组。 + +本节介绍了主要的功能和典型的使用案例,以便您对整个用户管理有一个更深入地了解。 + +## 主要功能 + +主要功能如下所示: + +1. [组织管理](./orgs/): 创建新的组织,更新它们的名字,也可以将所有者转移到组织中的其他用户。 +2. [用户管理](./users/): 创建、更新或删除用户或者用户组。您还可以创建/编辑/删除自定义角色。 + - [用户](./users/users) + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` diff --git a/docs/zh/eco_system.webp b/docs/zh/eco_system.webp new file mode 100644 index 0000000000000000000000000000000000000000..1bc754db97e4bc976805ad41050d642cb3c424a7 GIT binary patch literal 37718 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 X$3Y06|M>jJ=Ra5MKcD}^vBVDm)QBbj literal 0 HcmV?d00001 diff --git a/examples/c/tmq.c b/examples/c/tmq.c new file mode 100644 index 0000000000..eb41ad039a --- /dev/null +++ b/examples/c/tmq.c @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include "taos.h" + +static int running = 1; + +static int32_t msg_process(TAOS_RES* msg) { + char buf[1024]; + int32_t rows = 0; + + const char* topicName = tmq_get_topic_name(msg); + const char* dbName = tmq_get_db_name(msg); + int32_t vgroupId = tmq_get_vgroup_id(msg); + + printf("topic: %s\n", topicName); + printf("db: %s\n", dbName); + printf("vgroup id: %d\n", vgroupId); + + while (1) { + TAOS_ROW row = taos_fetch_row(msg); + if (row == NULL) break; + + TAOS_FIELD* fields = taos_fetch_fields(msg); + int32_t numOfFields = taos_field_count(msg); + // int32_t* length = taos_fetch_lengths(msg); + int32_t precision = taos_result_precision(msg); + rows++; + taos_print_row(buf, row, fields, numOfFields); + printf("precision: %d, row content: %s\n", precision, buf); + } + + return rows; +} + +static int32_t init_env() { + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + TAOS_RES* pRes; + // drop database if exists + printf("create database\n"); + pRes = taos_query(pConn, "drop topic topicname"); + if (taos_errno(pRes) != 0) { + printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes)); + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "drop database if exists tmqdb"); + if (taos_errno(pRes) != 0) { + printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes)); + } + taos_free_result(pRes); + + // create database + pRes = taos_query(pConn, "create database tmqdb precision 'ns'"); + if (taos_errno(pRes) != 0) { + printf("error in create tmqdb, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // create super table + printf("create super table\n"); + pRes = taos_query( + pConn, "create table tmqdb.stb (ts timestamp, c1 int, c2 float, c3 varchar(16)) tags(t1 int, t3 varchar(16))"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table stb, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // create sub tables + printf("create sub tables\n"); + pRes = taos_query(pConn, "create table tmqdb.ctb0 using tmqdb.stb tags(0, 'subtable0')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb1 using tmqdb.stb tags(1, 'subtable1')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb1, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb2 using tmqdb.stb tags(2, 'subtable2')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb2, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb3 using tmqdb.stb tags(3, 'subtable3')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb3, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // insert data + printf("insert data into sub tables\n"); + pRes = taos_query(pConn, "insert into tmqdb.ctb0 values(now, 0, 0, 'a0')(now+1s, 0, 0, 'a00')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb1 values(now, 1, 1, 'a1')(now+1s, 11, 11, 'a11')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb2 values(now, 2, 2, 'a1')(now+1s, 22, 22, 'a22')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb3 values(now, 3, 3, 'a1')(now+1s, 33, 33, 'a33')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + taos_close(pConn); + return 0; + +END: + taos_free_result(pRes); + taos_close(pConn); + return -1; +} + +int32_t create_topic() { + printf("create topic\n"); + TAOS_RES* pRes; + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + pRes = taos_query(pConn, "use tmqdb"); + if (taos_errno(pRes) != 0) { + printf("error in use tmqdb, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create topic topicname as select ts, c1, c2, c3, tbname from tmqdb.stb where c1 > 1"); + if (taos_errno(pRes) != 0) { + printf("failed to create topic topicname, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + taos_close(pConn); + return 0; +} + +void tmq_commit_cb_print(tmq_t* tmq, int32_t code, void* param) { + printf("tmq_commit_cb_print() code: %d, tmq: %p, param: %p\n", code, tmq, param); +} + +tmq_t* build_consumer() { + tmq_conf_res_t code; + tmq_conf_t* conf = tmq_conf_new(); + code = tmq_conf_set(conf, "enable.auto.commit", "true"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "auto.commit.interval.ms", "1000"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "group.id", "cgrpName"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "client.id", "user defined name"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "td.connect.user", "root"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "td.connect.pass", "taosdata"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "auto.offset.reset", "earliest"); + if (TMQ_CONF_OK != code) return NULL; + code = tmq_conf_set(conf, "experimental.snapshot.enable", "false"); + if (TMQ_CONF_OK != code) return NULL; + + tmq_conf_set_auto_commit_cb(conf, tmq_commit_cb_print, NULL); + + tmq_t* tmq = tmq_consumer_new(conf, NULL, 0); + tmq_conf_destroy(conf); + return tmq; +} + +tmq_list_t* build_topic_list() { + tmq_list_t* topicList = tmq_list_new(); + int32_t code = tmq_list_append(topicList, "topicname"); + if (code) { + tmq_list_destroy(topicList); + return NULL; + } + return topicList; +} + +void basic_consume_loop(tmq_t* tmq) { + int32_t totalRows = 0; + int32_t msgCnt = 0; + int32_t timeout = 5000; + while (running) { + TAOS_RES* tmqmsg = tmq_consumer_poll(tmq, timeout); + if (tmqmsg) { + msgCnt++; + totalRows += msg_process(tmqmsg); + taos_free_result(tmqmsg); + } else { + break; + } + } + + fprintf(stderr, "%d msg consumed, include %d rows\n", msgCnt, totalRows); +} + +int main(int argc, char* argv[]) { + int32_t code; + + if (init_env() < 0) { + return -1; + } + + if (create_topic() < 0) { + return -1; + } + + tmq_t* tmq = build_consumer(); + if (NULL == tmq) { + fprintf(stderr, "build_consumer() fail!\n"); + return -1; + } + + tmq_list_t* topic_list = build_topic_list(); + if (NULL == topic_list) { + return -1; + } + + if ((code = tmq_subscribe(tmq, topic_list))) { + fprintf(stderr, "Failed to tmq_subscribe(): %s\n", tmq_err2str(code)); + } + tmq_list_destroy(topic_list); + + basic_consume_loop(tmq); + + code = tmq_consumer_close(tmq); + if (code) { + fprintf(stderr, "Failed to close consumer: %s\n", tmq_err2str(code)); + } else { + fprintf(stderr, "Consumer closed\n"); + } + + return 0; +} diff --git a/tests/script/sh/abs_max.c b/tests/script/sh/abs_max.c deleted file mode 100644 index 9faea60374..0000000000 --- a/tests/script/sh/abs_max.c +++ /dev/null @@ -1,95 +0,0 @@ -#include -#include -#include -#include - -typedef struct SUdfInit{ - int maybe_null; /* 1 if function can return NULL */ - int decimals; /* for real functions */ - int64_t length; /* For string functions */ - char *ptr; /* free pointer for function data */ - int const_item; /* 0 if result is independent of arguments */ -} SUdfInit; - - -#define TSDB_DATA_INT_NULL 0x80000000L -#define TSDB_DATA_BIGINT_NULL 0x8000000000000000L - -void abs_max(char* data, short itype, short ibytes, int numOfRows, int64_t* ts, char* dataOutput, char* interBuf, char* tsOutput, - int* numOfOutput, short otype, short obytes, SUdfInit* buf) { - int i; - int64_t r = 0; - // printf("abs_max input data:%p, type:%d, rows:%d, ts:%p, %" PRId64 ", dataoutput:%p, tsOutput:%p, numOfOutput:%p, buf:%p\n", data, itype, numOfRows, ts, *ts, dataOutput, tsOutput, numOfOutput, buf); - if (itype == 5) { - r=*(int64_t *)dataOutput; - *numOfOutput=0; - - for(i=0;i r) { - r = v; - } - } - - *(int64_t *)dataOutput=r; - - // printf("abs_max out, dataoutput:%" PRId64", numOfOutput:%d\n", *(int64_t *)dataOutput, *numOfOutput); - }else { - *numOfOutput=0; - } -} - - - -void abs_max_finalize(char* dataOutput, char* interBuf, int* numOfOutput, SUdfInit* buf) { - int i; - //int64_t r = 0; - // printf("abs_max_finalize dataoutput:%p:%d, numOfOutput:%d, buf:%p\n", dataOutput, *dataOutput, *numOfOutput, buf); - // *numOfOutput=1; - // printf("abs_max finalize, dataoutput:%" PRId64", numOfOutput:%d\n", *(int64_t *)dataOutput, *numOfOutput); -} - -void abs_max_merge(char* data, int32_t numOfRows, char* dataOutput, int32_t* numOfOutput, SUdfInit* buf) { - int64_t r = 0; - - if (numOfRows > 0) { - r = *((int64_t *)data); - } - // printf("abs_max_merge numOfRows:%d, dataoutput:%p, buf:%p\n", numOfRows, dataOutput, buf); - for (int i = 1; i < numOfRows; ++i) { - // printf("abs_max_merge %d - %" PRId64"\n", i, *((int64_t *)data + i)); - if (*((int64_t*)data + i) > r) { - r= *((int64_t*)data + i); - } - } - - *(int64_t*)dataOutput=r; - if (numOfRows > 0) { - *numOfOutput=1; - } else { - *numOfOutput=0; - } - - // printf("abs_max_merge, dataoutput:%" PRId64", numOfOutput:%d\n", *(int64_t *)dataOutput, *numOfOutput); -} - - -int abs_max_init(SUdfInit* buf) { - // printf("abs_max init\n"); - return 0; -} - - -void abs_max_destroy(SUdfInit* buf) { - // printf("abs_max destroy\n"); -} \ No newline at end of file diff --git a/tests/script/sh/add_one.c b/tests/script/sh/add_one.c deleted file mode 100644 index de2a7d168c..0000000000 --- a/tests/script/sh/add_one.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include - -typedef struct SUdfInit{ - int maybe_null; /* 1 if function can return NULL */ - int decimals; /* for real functions */ - long long length; /* For string functions */ - char *ptr; /* free pointer for function data */ - int const_item; /* 0 if result is independent of arguments */ -} SUdfInit; - -void add_one(char* data, short itype, short ibytes, int numOfRows, long long* ts, char* dataOutput, char* interBUf, char* tsOutput, - int* numOfOutput, short otype, short obytes, SUdfInit* buf) { - int i; - int r = 0; - // printf("add_one input data:%p, type:%d, rows:%d, ts:%p,%lld, dataoutput:%p, tsOutput:%p, numOfOutput:%p, buf:%p\n", data, itype, numOfRows, ts, *ts, dataOutput, tsOutput, numOfOutput, buf); - if (itype == 4) { - for(i=0;i -#include -#include - -typedef struct SUdfInit{ - int maybe_null; /* 1 if function can return NULL */ - int decimals; /* for real functions */ - long long length; /* For string functions */ - char *ptr; /* free pointer for function data */ - int const_item; /* 0 if result is independent of arguments */ -} SUdfInit; - -void add_one_64232(char* data, short itype, short ibytes, int numOfRows, long long* ts, char* dataOutput, char* interBUf, char* tsOutput, - int* numOfOutput, short otype, short obytes, SUdfInit* buf) { - int i; - int r = 0; - printf("add_one_64232 input data:%p, type:%d, rows:%d, ts:%p,%lld, dataoutput:%p, tsOutput:%p, numOfOutput:%p, buf:%p\n", data, itype, numOfRows, ts, *ts, dataOutput, tsOutput, numOfOutput, buf); - if (itype == 5) { - for(i=0;i +#include +#include +#include "taosudf.h" + + +DLL_EXPORT int32_t bit_and_init() { + return 0; +} + +DLL_EXPORT int32_t bit_and_destroy() { + return 0; +} + +DLL_EXPORT int32_t bit_and(SUdfDataBlock* block, SUdfColumn *resultCol) { + + if (block->numOfCols < 2) { + return TSDB_CODE_UDF_INVALID_INPUT; + } + + for (int32_t i = 0; i < block->numOfCols; ++i) { + SUdfColumn* col = block->udfCols[i]; + if (!(col->colMeta.type == TSDB_DATA_TYPE_INT)) { + return TSDB_CODE_UDF_INVALID_INPUT; + } + } + + SUdfColumnMeta *meta = &resultCol->colMeta; + meta->bytes = 4; + meta->type = TSDB_DATA_TYPE_INT; + meta->scale = 0; + meta->precision = 0; + + + SUdfColumnData *resultData = &resultCol->colData; + + resultData->numOfRows = block->numOfRows; + + for (int32_t i = 0; i < resultData->numOfRows; ++i) { + if (udfColDataIsNull(block->udfCols[0], i)) { + udfColDataSetNull(resultCol, i); + continue; + } + int32_t result = *(int32_t*)udfColDataGetData(block->udfCols[0], i); + int j = 1; + for (; j < block->numOfCols; ++j) { + if (udfColDataIsNull(block->udfCols[j], i)) { + udfColDataSetNull(resultCol, i); + break; + } + + char* colData = udfColDataGetData(block->udfCols[j], i); + result &= *(int32_t*)colData; + } + if (j == block->numOfCols) { + udfColDataSet(resultCol, i, (char*)&result, false); + } + + } + return TSDB_CODE_SUCCESS; +} diff --git a/tests/script/sh/cfg.bat b/tests/script/sh/cfg.bat index 49ab34383a..c25bebd159 100644 --- a/tests/script/sh/cfg.bat +++ b/tests/script/sh/cfg.bat @@ -16,12 +16,12 @@ rem echo NODE: %NODE% set SCRIPT_DIR=%~dp0..\ rem echo SCRIPT_DIR: %SCRIPT_DIR% -set BUILD_DIR=%SCRIPT_DIR%..\..\..\debug\build\bin\ +echo %cd% | grep community > nul && set "BUILD_DIR=%SCRIPT_DIR%..\..\..\debug\build\bin\" || set "BUILD_DIR=%SCRIPT_DIR%..\..\debug\build\bin\" set TSIM=%BUILD_DIR%tsim rem echo BUILD_DIR: %BUILD_DIR% rem echo TSIM: %TSIM% -set SIM_DIR=%SCRIPT_DIR%..\..\..\sim\ +echo %cd% | grep community > nul && set "SIM_DIR=%SCRIPT_DIR%..\..\..\sim\" || set "SIM_DIR=%SCRIPT_DIR%..\..\sim\" rem echo SIM_DIR: %SIM_DIR% set NODE_DIR=%SIM_DIR%%NODE_NAME%\ diff --git a/tests/script/sh/cfg.sh b/tests/script/sh/cfg.sh index 7d4d747e54..bf58185f62 100755 --- a/tests/script/sh/cfg.sh +++ b/tests/script/sh/cfg.sh @@ -45,11 +45,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` diff --git a/tests/script/sh/checkAsan.sh b/tests/script/sh/checkAsan.sh new file mode 100755 index 0000000000..31fe80829f --- /dev/null +++ b/tests/script/sh/checkAsan.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +set +e +#set -x +if [[ "$OSTYPE" == "darwin"* ]]; then + TD_OS="Darwin" +else + OS=$(cat /etc/*-release | grep "^NAME=" | cut -d= -f2) + len=$(echo ${#OS}) + len=$((len-2)) + TD_OS=$(echo -ne ${OS:1:${len}} | cut -d" " -f1) +fi + +if [[ "$TD_OS" == "Alpine" ]]; then + echo -e "os is Alpine,skip check Asan" + exit 0 +fi +unset LD_PRELOAD +SCRIPT_DIR=`dirname $0` +cd $SCRIPT_DIR/../ +SCRIPT_DIR=`pwd` + +IN_TDINTERNAL="community" +if [[ "$SCRIPT_DIR" == *"$IN_TDINTERNAL"* ]]; then + cd ../../.. +else + cd ../../ +fi + +TAOS_DIR=`pwd` +LOG_DIR=$TAOS_DIR/sim/asan + +error_num=`cat ${LOG_DIR}/*.asan | grep "ERROR" | wc -l` +memory_leak=`cat ${LOG_DIR}/*.asan | grep "Direct leak" | wc -l` +indirect_leak=`cat ${LOG_DIR}/*.asan | grep "Indirect leak" | wc -l` +python_error=`cat ${LOG_DIR}/*.info | grep -w "stack" | wc -l` + +# ignore + +# TD-20368 +# /root/TDengine/contrib/zlib/trees.c:873:5: runtime error: null pointer passed as argument 2, which is declared to never be null + +# TD-20494 TD-20452 +# /root/TDengine/source/libs/scalar/src/sclfunc.c:735:11: runtime error: 4.75783e+11 is outside the range of representable values of type 'signed char' +# /root/TDengine/source/libs/scalar/src/sclfunc.c:790:11: runtime error: 3.4e+38 is outside the range of representable values of type 'long int' +# /root/TDengine/source/libs/scalar/src/sclfunc.c:772:11: runtime error: 3.52344e+09 is outside the range of representable values of type 'int' +# /root/TDengine/source/libs/scalar/src/sclfunc.c:753:11: runtime error: 4.75783e+11 is outside the range of representable values of type 'short int' + +# TD-20569 +# /root/TDengine/source/libs/function/src/builtinsimpl.c:856:29: runtime error: signed integer overflow: 9223372036854775806 + 9223372036854775805 cannot be represented in type 'long int' +# /root/TDengine/source/libs/scalar/src/sclvector.c:1075:66: runtime error: signed integer overflow: 9223372034707292160 + 1668838476672 cannot be represented in type 'long int' +# /root/TDengine/source/common/src/tdataformat.c:1876:7: runtime error: signed integer overflow: 8252423483843671206 + 2406154664059062870 cannot be represented in type 'long int' + +runtime_error=`cat ${LOG_DIR}/*.asan | grep "runtime error" | grep -v "trees.c:873" | grep -v "sclfunc.c.*outside the range of representable values of type"| grep -v "signed integer overflow" |grep -v "strerror.c"| grep -v "asan_malloc_linux.cc" |wc -l` + +echo -e "\033[44;32;1m"asan error_num: $error_num"\033[0m" +echo -e "\033[44;32;1m"asan memory_leak: $memory_leak"\033[0m" +echo -e "\033[44;32;1m"asan indirect_leak: $indirect_leak"\033[0m" +echo -e "\033[44;32;1m"asan runtime error: $runtime_error"\033[0m" +echo -e "\033[44;32;1m"asan python error: $python_error"\033[0m" + +let "errors=$error_num+$memory_leak+$indirect_leak+$runtime_error+$python_error" + +if [ $errors -eq 0 ]; then + echo -e "\033[44;32;1m"no asan errors"\033[0m" + exit 0 +else + echo -e "\033[44;31;1m"asan total errors: $errors"\033[0m" + if [ $python_error -ne 0 ]; then + cat ${LOG_DIR}/*.info + fi + cat ${LOG_DIR}/*.asan + exit 1 +fi diff --git a/tests/script/sh/checkValgrind.sh b/tests/script/sh/checkValgrind.sh new file mode 100755 index 0000000000..fdbac45ea6 --- /dev/null +++ b/tests/script/sh/checkValgrind.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +set +e +#set -x + +NODE_NAME= +DETAIL=0 + +while getopts "n:d" arg +do + case $arg in + n) + NODE_NAME=$OPTARG + ;; + d) + DETAIL=1 + ;; + ?) + echo "unkown argument" + ;; + esac +done + +SCRIPT_DIR=`dirname $0` +cd $SCRIPT_DIR/../ +SCRIPT_DIR=`pwd` + +IN_TDINTERNAL="community" +if [[ "$SCRIPT_DIR" == *"$IN_TDINTERNAL"* ]]; then + cd ../../.. +else + cd ../../ +fi + +TAOS_DIR=`pwd` +LOG_DIR=$TAOS_DIR/sim/$NODE_NAME/log + +error_summary=`cat ${LOG_DIR}/valgrind-taosd-*.log | grep "ERROR SUMMARY:" | awk '{print $4}' | awk '{sum+=$1}END{print sum}'` +still_reachable=`cat ${LOG_DIR}/valgrind-taosd-*.log | grep "still reachable in" | wc -l` +definitely_lost=`cat ${LOG_DIR}/valgrind-taosd-*.log | grep "definitely lost in" | wc -l` +indirectly_lost=`cat ${LOG_DIR}/valgrind-taosd-*.log | grep "indirectly lost in " | wc -l` +possibly_lost=`cat ${LOG_DIR}/valgrind-taosd-*.log | grep "possibly lost in " | wc -l` +invalid_read=`cat ${LOG_DIR}/valgrind-taosd-*.log | grep "Invalid read of " | wc -l` +invalid_write=`cat ${LOG_DIR}/valgrind-taosd-*.log | grep "Invalid write of " | wc -l` +invalid_free=`cat ${LOG_DIR}/valgrind-taosd-*.log | grep "Invalid free() " | wc -l` + +if [ $DETAIL -eq 1 ]; then + echo error_summary: $error_summary + echo still_reachable: $still_reachable + echo definitely_lost: $definitely_lost + echo indirectly_lost: $indirectly_lost + echo possibly_lost: $possibly_lost + echo invalid_read: $invalid_read + echo invalid_write: $invalid_write + echo invalid_free: $invalid_free +fi + +let "errors=$error_summary+$still_reachable+$definitely_lost+$indirectly_lost+$possibly_lost+$invalid_read+$invalid_write+$invalid_free" +echo $errors diff --git a/tests/script/sh/clear.sh b/tests/script/sh/clear.sh index 4ee296cf05..587a33f633 100755 --- a/tests/script/sh/clear.sh +++ b/tests/script/sh/clear.sh @@ -48,11 +48,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` diff --git a/tests/script/sh/compile_udf.sh b/tests/script/sh/compile_udf.sh new file mode 100755 index 0000000000..5265e5a99b --- /dev/null +++ b/tests/script/sh/compile_udf.sh @@ -0,0 +1,11 @@ +set +e + +rm -rf /tmp/udf/libbitand.so /tmp/udf/libsqrsum.so /tmp/udf/libgpd.so +mkdir -p /tmp/udf +echo "compile udf bit_and and sqr_sum" +gcc -fPIC -shared sh/bit_and.c -I../../include/libs/function/ -I../../include/client -I../../include/util -o /tmp/udf/libbitand.so +gcc -fPIC -shared sh/l2norm.c -I../../include/libs/function/ -I../../include/client -I../../include/util -o /tmp/udf/libl2norm.so +gcc -fPIC -shared sh/gpd.c -I../../include/libs/function/ -I../../include/client -I../../include/util -o /tmp/udf/libgpd.so +echo "debug show /tmp/udf/*.so" +ls /tmp/udf/*.so + diff --git a/tests/script/sh/copy_udf.bat b/tests/script/sh/copy_udf.bat new file mode 100644 index 0000000000..597b77792e --- /dev/null +++ b/tests/script/sh/copy_udf.bat @@ -0,0 +1,23 @@ +@echo off + +echo Executing copy_udf.bat +set SCRIPT_DIR=%cd% +echo SCRIPT_DIR: %SCRIPT_DIR% + +echo %cd% | grep community > nul && cd ..\..\.. || cd ..\.. +set TAOS_DIR=%cd% +echo find udf library in %TAOS_DIR% +set UDF1_DIR=%TAOS_DIR%\debug\build\lib\udf1.dll +set UDF2_DIR=%TAOS_DIR%\debug\build\lib\udf2.dll + +echo %UDF1_DIR% +echo %UDF2_DIR% + +set UDF_TMP=C:\Windows\Temp\udf +rm -rf %UDF_TMP% +mkdir %UDF_TMP% + +echo Copy udf shared library files to %UDF_TMP% + +cp %UDF1_DIR% %UDF_TMP% +cp %UDF2_DIR% %UDF_TMP% diff --git a/tests/script/sh/copy_udf.sh b/tests/script/sh/copy_udf.sh new file mode 100755 index 0000000000..c3c300fb7b --- /dev/null +++ b/tests/script/sh/copy_udf.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +set +e +#set -x + +echo "Executing copy_udf.sh" +SCRIPT_DIR=`dirname $0` +cd $SCRIPT_DIR/../ +SCRIPT_DIR=`pwd` +echo "SCRIPT_DIR: ${SCRIPT_DIR}" + +IN_TDINTERNAL="community" +if [[ "$SCRIPT_DIR" == *"$IN_TDINTERNAL"* ]]; then + cd ../../.. +else + cd ../../ +fi + +TAOS_DIR=`pwd` +echo "find udf library in $TAOS_DIR" +UDF1_DIR=`find $TAOS_DIR -name "libudf1.so"|grep lib|head -n1` +UDF2_DIR=`find $TAOS_DIR -name "libudf2.so"|grep lib|head -n1` + +echo $UDF1_DIR +echo $UDF2_DIR + +UDF_TMP=/tmp/udf +rm -rf $UDF_TMP +mkdir $UDF_TMP + +echo "Copy udf shared library files to $UDF_TMP" + +cp $UDF1_DIR $UDF_TMP +echo "copy udf1 result: $?" +cp $UDF2_DIR $UDF_TMP +echo "copy udf2 result: $?" diff --git a/tests/script/sh/demo.c b/tests/script/sh/demo.c deleted file mode 100644 index 23d2174448..0000000000 --- a/tests/script/sh/demo.c +++ /dev/null @@ -1,112 +0,0 @@ -#include -#include -#include - -typedef struct SUdfInit{ - int maybe_null; /* 1 if function can return NULL */ - int decimals; /* for real functions */ - long long length; /* For string functions */ - char *ptr; /* free pointer for function data */ - int const_item; /* 0 if result is independent of arguments */ -} SUdfInit; - -typedef struct SDemo{ - double sum; - int num; - short otype; -}SDemo; - -#define FLOAT_NULL 0x7FF00000 // it is an NAN -#define DOUBLE_NULL 0x7FFFFF0000000000L // it is an NAN - - -void demo(char* data, short itype, short ibytes, int numOfRows, long long* ts, char* dataOutput, char* interBuf, char* tsOutput, - int* numOfOutput, short otype, short obytes, SUdfInit* buf) { - int i; - double r = 0; - SDemo *p = (SDemo *)interBuf; - SDemo *q = (SDemo *)dataOutput; - printf("demo input data:%p, type:%d, rows:%d, ts:%p,%lld, dataoutput:%p, interBUf:%p, tsOutput:%p, numOfOutput:%p, buf:%p\n", data, itype, numOfRows, ts, *ts, dataOutput, interBuf, tsOutput, numOfOutput, buf); - - for(i=0;isum += r*r; - } - - p->otype = otype; - p->num += numOfRows; - - q->sum = p->sum; - q->num = p->num; - q->otype = p->otype; - - *numOfOutput=1; - - printf("demo out, sum:%f, num:%d, numOfOutput:%d\n", p->sum, p->num, *numOfOutput); -} - - -void demo_merge(char* data, int32_t numOfRows, char* dataOutput, int32_t* numOfOutput, SUdfInit* buf) { - int i; - SDemo *p = (SDemo *)data; - SDemo res = {0}; - printf("demo_merge input data:%p, rows:%d, dataoutput:%p, numOfOutput:%p, buf:%p\n", data, numOfRows, dataOutput, numOfOutput, buf); - - for(i=0;isum * p->sum; - res.num += p->num; - p++; - } - - p->sum = res.sum; - p->num = res.num; - - *numOfOutput=1; - - printf("demo out, sum:%f, num:%d, numOfOutput:%d\n", p->sum, p->num, *numOfOutput); -} - - - -void demo_finalize(char* dataOutput, char* interBuf, int* numOfOutput, SUdfInit* buf) { - SDemo *p = (SDemo *)interBuf; - printf("demo_finalize interbuf:%p, numOfOutput:%p, buf:%p, sum:%f, num:%d\n", interBuf, numOfOutput, buf, p->sum, p->num); - if (p->otype == 6) { - if (p->num != 30000) { - *(unsigned int *)dataOutput = FLOAT_NULL; - } else { - *(float *)dataOutput = (float)(p->sum / p->num); - } - printf("finalize values:%f\n", *(float *)dataOutput); - } else if (p->otype == 7) { - if (p->num != 30000) { - *(unsigned long long *)dataOutput = DOUBLE_NULL; - } else { - *(double *)dataOutput = (double)(p->sum / p->num); - } - printf("finalize values:%f\n", *(double *)dataOutput); - } - - *numOfOutput=1; - - printf("demo finalize, numOfOutput:%d\n", *numOfOutput); -} - - -int demo_init(SUdfInit* buf) { - printf("demo init\n"); - return 0; -} - - -void demo_destroy(SUdfInit* buf) { - printf("demo destroy\n"); -} - diff --git a/tests/script/sh/demo.lua b/tests/script/sh/demo.lua deleted file mode 100644 index c5e5582fc3..0000000000 --- a/tests/script/sh/demo.lua +++ /dev/null @@ -1,43 +0,0 @@ -funcName = "test" - -global = {} - -function test_init() - return global -end - -function test_add(rows, ans, key) - t = {} - t["sum"] = 0.0 - t["num"] = 0 - for i=1, #rows do - t["sum"] = t["sum"] + rows[i] * rows[i] - end - t["num"] = #rows - - - if (ans[key] ~= nil) - then - ans[key]["sum"] = ans[key]["sum"] + t["sum"] - ans[key]["num"] = ans[key]["num"] + t["num"] - else - ans[key] = t - end - - return ans; -end - -function test_finalize(ans, key) - local ret = 0.0 - - if (ans[key] ~= nil and ans[key]["num"] == 30000) - then - ret = ans[key]["sum"]/ans[key]["num"] - ans[key]["sum"] = 0.0 - ans[key]["num"] = 0 - else - ret = inf - end - - return ret, ans -end diff --git a/tests/script/sh/deploy.bat b/tests/script/sh/deploy.bat index 921f1611fb..38e7022ede 100644 --- a/tests/script/sh/deploy.bat +++ b/tests/script/sh/deploy.bat @@ -13,12 +13,12 @@ rem echo NODE: %NODE% set SCRIPT_DIR=%~dp0..\ rem echo SCRIPT_DIR: %SCRIPT_DIR% -set BUILD_DIR=%SCRIPT_DIR%..\..\..\debug\build\bin\ +echo %cd% | grep community > nul && set "BUILD_DIR=%SCRIPT_DIR%..\..\..\debug\build\bin\" || set "BUILD_DIR=%SCRIPT_DIR%..\..\debug\build\bin\" set TSIM=%BUILD_DIR%tsim rem echo BUILD_DIR: %BUILD_DIR% rem echo TSIM: %TSIM% -set SIM_DIR=%SCRIPT_DIR%..\..\..\sim\ +echo %cd% | grep community > nul && set "SIM_DIR=%SCRIPT_DIR%..\..\..\sim\" || set "SIM_DIR=%SCRIPT_DIR%..\..\sim\" rem echo SIM_DIR: %SIM_DIR% set NODE_DIR=%SIM_DIR%%NODE_NAME%\ @@ -59,48 +59,30 @@ for /f "skip=1" %%A in ( 'wmic computersystem get caption' ) do if not defined fqdn set "fqdn=%%A" -echo firstEp %fqdn%:7100 > %TAOS_CFG% +echo firstEp %fqdn%:7100 >> %TAOS_CFG% +echo secondEp %fqdn%:7200 >> %TAOS_CFG% echo fqdn %fqdn% >> %TAOS_CFG% echo serverPort %NODE% >> %TAOS_CFG% +echo supportVnodes 128 >> %TAOS_CFG% echo dataDir %DATA_DIR% >> %TAOS_CFG% echo logDir %LOG_DIR% >> %TAOS_CFG% echo debugFlag 0 >> %TAOS_CFG% -echo mDebugFlag 135 >> %TAOS_CFG% -echo sdbDebugFlag 135 >> %TAOS_CFG% -echo dDebugFlag 135 >> %TAOS_CFG% -echo vDebugFlag 135 >> %TAOS_CFG% -echo tsdbDebugFlag 135 >> %TAOS_CFG% -echo cDebugFlag 135 >> %TAOS_CFG% -echo jnidebugFlag 135 >> %TAOS_CFG% -echo odbcdebugFlag 135 >> %TAOS_CFG% -echo httpDebugFlag 135 >> %TAOS_CFG% -echo monDebugFlag 135 >> %TAOS_CFG% -echo mqttDebugFlag 135 >> %TAOS_CFG% -echo qdebugFlag 135 >> %TAOS_CFG% -echo rpcDebugFlag 135 >> %TAOS_CFG% +echo mDebugFlag 143 >> %TAOS_CFG% +echo dDebugFlag 143 >> %TAOS_CFG% +echo vDebugFlag 143 >> %TAOS_CFG% +echo tqDebugFlag 143 >> %TAOS_CFG% +echo tsdbDebugFlag 143 >> %TAOS_CFG% +echo cDebugFlag 143 >> %TAOS_CFG% +echo jniDebugFlag 143 >> %TAOS_CFG% +echo qDebugFlag 143 >> %TAOS_CFG% +echo rpcDebugFlag 143 >> %TAOS_CFG% echo tmrDebugFlag 131 >> %TAOS_CFG% -echo udebugFlag 135 >> %TAOS_CFG% -echo sdebugFlag 135 >> %TAOS_CFG% -echo wdebugFlag 135 >> %TAOS_CFG% -echo cqdebugFlag 135 >> %TAOS_CFG% -echo monitor 0 >> %TAOS_CFG% -echo monitorInterval 1 >> %TAOS_CFG% -echo http 0 >> %TAOS_CFG% -echo slaveQuery 0 >> %TAOS_CFG% -echo numOfThreadsPerCore 2.0 >> %TAOS_CFG% -echo defaultPass taosdata >> %TAOS_CFG% +echo uDebugFlag 143 >> %TAOS_CFG% +echo sDebugFlag 143 >> %TAOS_CFG% +echo wDebugFlag 143 >> %TAOS_CFG% echo numOfLogLines 20000000 >> %TAOS_CFG% -echo mnodeEqualVnodeNum 0 >> %TAOS_CFG% -echo balanceInterval 1 >> %TAOS_CFG% -echo clog 2 >> %TAOS_CFG% -echo days 10 >> %TAOS_CFG% echo statusInterval 1 >> %TAOS_CFG% -echo maxVgroupsPerDb 4 >> %TAOS_CFG% -echo minTablesPerVnode 4 >> %TAOS_CFG% -echo maxTablesPerVnode 1000 >> %TAOS_CFG% -echo tableIncStepPerVnode 10000 >> %TAOS_CFG% echo asyncLog 0 >> %TAOS_CFG% -echo numOfMnodes 1 >> %TAOS_CFG% echo locale en_US.UTF-8 >> %TAOS_CFG% -echo fsync 0 >> %TAOS_CFG% echo telemetryReporting 0 >> %TAOS_CFG% +echo querySmaOptimize 1 >> %TAOS_CFG% diff --git a/tests/script/sh/deploy.sh b/tests/script/sh/deploy.sh index cde27d7dc3..7da8da09bf 100755 --- a/tests/script/sh/deploy.sh +++ b/tests/script/sh/deploy.sh @@ -1,19 +1,15 @@ #!/bin/bash -echo "Executing deploy.sh" +set +e +#set -x -if [ $# != 4 ]; then - echo "argument list need input : " - echo " -n nodeName" - echo " -i nodePort" - exit 1 -fi +echo "Executing deploy.sh" UNAME_BIN=`which uname` OS_TYPE=`$UNAME_BIN` NODE_NAME= NODE= -while getopts "n:i:" arg +while getopts "n:i:m" arg do case $arg in n) @@ -43,11 +39,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` @@ -55,7 +47,7 @@ else BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2` fi -BUILD_DIR=$TAOS_DIR/$BIN_DIR/build +BUILD_DIR=$TAOS_DIR/$BIN_DIR SIM_DIR=$TAOS_DIR/sim @@ -110,54 +102,44 @@ elif [ $NODE -eq 7 ]; then NODE=7700 elif [ $NODE -eq 8 ]; then NODE=7800 +elif [ $NODE -eq 9 ]; then + NODE=7900 fi +HOSTNAME=localhost + echo " " >> $TAOS_CFG echo "firstEp ${HOSTNAME}:7100" >> $TAOS_CFG echo "secondEp ${HOSTNAME}:7200" >> $TAOS_CFG +echo "fqdn ${HOSTNAME}" >> $TAOS_CFG echo "serverPort ${NODE}" >> $TAOS_CFG +echo "supportVnodes 1024" >> $TAOS_CFG +echo "statusInterval 1" >> $TAOS_CFG echo "dataDir $DATA_DIR" >> $TAOS_CFG echo "logDir $LOG_DIR" >> $TAOS_CFG echo "debugFlag 0" >> $TAOS_CFG -echo "mDebugFlag 143" >> $TAOS_CFG -echo "sdbDebugFlag 143" >> $TAOS_CFG +echo "tmrDebugFlag 131" >> $TAOS_CFG +echo "uDebugFlag 143" >> $TAOS_CFG +echo "rpcDebugFlag 143" >> $TAOS_CFG +echo "jniDebugFlag 143" >> $TAOS_CFG +echo "qDebugFlag 143" >> $TAOS_CFG +echo "cDebugFlag 143" >> $TAOS_CFG echo "dDebugFlag 143" >> $TAOS_CFG echo "vDebugFlag 143" >> $TAOS_CFG +echo "mDebugFlag 143" >> $TAOS_CFG +echo "wDebugFlag 143" >> $TAOS_CFG +echo "sDebugFlag 143" >> $TAOS_CFG echo "tsdbDebugFlag 143" >> $TAOS_CFG -echo "cDebugFlag 143" >> $TAOS_CFG -echo "jnidebugFlag 143" >> $TAOS_CFG -echo "odbcdebugFlag 143" >> $TAOS_CFG -echo "httpDebugFlag 143" >> $TAOS_CFG -echo "monDebugFlag 143" >> $TAOS_CFG -echo "mqttDebugFlag 143" >> $TAOS_CFG -echo "qdebugFlag 143" >> $TAOS_CFG -echo "rpcDebugFlag 143" >> $TAOS_CFG -echo "tmrDebugFlag 131" >> $TAOS_CFG -echo "udebugFlag 143" >> $TAOS_CFG -echo "sdebugFlag 143" >> $TAOS_CFG -echo "wdebugFlag 143" >> $TAOS_CFG -echo "cqdebugFlag 143" >> $TAOS_CFG -echo "monitor 0" >> $TAOS_CFG -echo "monitorInterval 1" >> $TAOS_CFG -echo "http 0" >> $TAOS_CFG -echo "slaveQuery 0" >> $TAOS_CFG -echo "numOfThreadsPerCore 2.0" >> $TAOS_CFG -echo "defaultPass taosdata" >> $TAOS_CFG +echo "tdbDebugFlag 143" >> $TAOS_CFG +echo "tqDebugFlag 143" >> $TAOS_CFG +echo "fsDebugFlag 143" >> $TAOS_CFG +echo "idxDebugFlag 143" >> $TAOS_CFG +echo "udfDebugFlag 143" >> $TAOS_CFG +echo "smaDebugFlag 143" >> $TAOS_CFG +echo "metaDebugFlag 143" >> $TAOS_CFG echo "numOfLogLines 20000000" >> $TAOS_CFG -echo "mnodeEqualVnodeNum 0" >> $TAOS_CFG -echo "balanceInterval 1" >> $TAOS_CFG -echo "clog 2" >> $TAOS_CFG -#echo "cache 1" >> $TAOS_CFG -echo "days 10" >> $TAOS_CFG -echo "statusInterval 1" >> $TAOS_CFG -echo "maxVgroupsPerDb 4" >> $TAOS_CFG -echo "minTablesPerVnode 4" >> $TAOS_CFG -echo "maxTablesPerVnode 1000" >> $TAOS_CFG -echo "tableIncStepPerVnode 10000" >> $TAOS_CFG echo "asyncLog 0" >> $TAOS_CFG -echo "numOfMnodes 1" >> $TAOS_CFG echo "locale en_US.UTF-8" >> $TAOS_CFG -echo "fsync 0" >> $TAOS_CFG echo "telemetryReporting 0" >> $TAOS_CFG +echo "querySmaOptimize 1" >> $TAOS_CFG echo " " >> $TAOS_CFG - diff --git a/tests/script/sh/exec-default.sh b/tests/script/sh/exec-default.sh index f648315c67..0a83fa1dc8 100755 --- a/tests/script/sh/exec-default.sh +++ b/tests/script/sh/exec-default.sh @@ -54,11 +54,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` diff --git a/tests/script/sh/exec-no-random-fail.sh b/tests/script/sh/exec-no-random-fail.sh index e01b18a8e6..b15783afb5 100755 --- a/tests/script/sh/exec-no-random-fail.sh +++ b/tests/script/sh/exec-no-random-fail.sh @@ -54,11 +54,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` diff --git a/tests/script/sh/exec-random-fail.sh b/tests/script/sh/exec-random-fail.sh index 1f31899e3a..15f2864ca6 100755 --- a/tests/script/sh/exec-random-fail.sh +++ b/tests/script/sh/exec-random-fail.sh @@ -54,11 +54,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` diff --git a/tests/script/sh/exec.bat b/tests/script/sh/exec.bat index 6651c7aa8f..88dd43349e 100644 --- a/tests/script/sh/exec.bat +++ b/tests/script/sh/exec.bat @@ -6,6 +6,7 @@ if %1 == -n set NODE_NAME=%2 if %1 == -s set EXEC_OPTON=%2 if %3 == -n set NODE_NAME=%4 if %3 == -s set EXEC_OPTON=%4 +if "%5" == "-x" set EXEC_SIGNAL=%6 rem echo NODE_NAME: %NODE_NAME% rem echo NODE: %EXEC_OPTON% @@ -13,12 +14,12 @@ rem echo NODE: %EXEC_OPTON% set SCRIPT_DIR=%~dp0..\ rem echo SCRIPT_DIR: %SCRIPT_DIR% -set BUILD_DIR=%SCRIPT_DIR%..\..\..\debug\build\bin\ +echo %cd% | grep community > nul && set "BUILD_DIR=%SCRIPT_DIR%..\..\..\debug\build\bin\" || set "BUILD_DIR=%SCRIPT_DIR%..\..\debug\build\bin\" set TAOSD=%BUILD_DIR%taosd rem echo BUILD_DIR: %BUILD_DIR% rem echo TAOSD: %TAOSD% -set SIM_DIR=%SCRIPT_DIR%..\..\..\sim\ +echo %cd% | grep community > nul && set "SIM_DIR=%SCRIPT_DIR%..\..\..\sim\" || set "SIM_DIR=%SCRIPT_DIR%..\..\sim\" rem echo SIM_DIR: %SIM_DIR% set NODE_DIR=%SIM_DIR%%NODE_NAME%\ @@ -30,19 +31,56 @@ rem echo CFG_DIR: %CFG_DIR% set TAOS_CFG=%CFG_DIR%taos.cfg rem echo TAOS_CFG: %TAOS_CFG% +set LOG_DIR=%NODE_DIR%log\ +rem echo LOG_DIR: %LOG_DIR% + +set TAOS_LOG=%LOG_DIR%taosdlog.0 +rem echo TAOS_LOG: %TAOS_LOG% + if %EXEC_OPTON% == start ( + rm -rf %TAOS_LOG% echo start %TAOSD% -c %CFG_DIR% - start %TAOSD% -c %CFG_DIR% + mintty -h never %TAOSD% -c %CFG_DIR% + set /a check_num=0 +:check_online + sleep 1 + set /a check_num=check_num+1 + if "%check_num%" == "11" ( + echo check online out time. + goto :finish + ) + echo check taosd online + tail -n +0 %TAOS_LOG% | grep -q "TDengine initialized successfully" || goto :check_online + echo finish + goto :finish ) if %EXEC_OPTON% == stop ( rem echo wmic process where "name='taosd.exe' and CommandLine like '%%%NODE_NAME%%%'" list INSTANCE rem wmic process where "name='taosd.exe' and CommandLine like '%%%NODE_NAME%%%'" call terminate > NUL 2>&1 - for /f "tokens=1 skip=1" %%A in ( - 'wmic process where "name='taosd.exe' and CommandLine like '%%%NODE_NAME%%%'" get processId ' - ) do ( - rem echo taskkill /IM %%A - taskkill /IM %%A > NUL 2>&1 + for /f "tokens=2" %%A in ('wmic process where "name='taosd.exe' and CommandLine like '%%%NODE_NAME%%%'" get processId ^| xargs echo') do ( + for /f "tokens=1" %%B in ('ps ^| grep %%A') do ( + if "%EXEC_SIGNAL%" == "SIGKILL" ( + kill -9 %%B + ) else ( + kill -INT %%B + call :check_offline + ) + ) + goto :finish ) ) +:finish +goto :eof + +:check_offline +sleep 1 +for /f "tokens=2" %%C in ('wmic process where "name='taosd.exe' and CommandLine like '%%%NODE_NAME%%%'" get processId ^| xargs echo') do ( + for /f "tokens=1" %%D in ('ps ^| grep %%C') do ( + echo kill -INT %%D + echo check taosd offline %NODE_NAME% %%C %%D + goto :check_offline + ) +) +goto :eof \ No newline at end of file diff --git a/tests/script/sh/exec.sh b/tests/script/sh/exec.sh index 80b8cda428..f548a4cc41 100755 --- a/tests/script/sh/exec.sh +++ b/tests/script/sh/exec.sh @@ -8,13 +8,25 @@ # exit 1 # fi +set +e +#set -x +if [[ "$OSTYPE" == "darwin"* ]]; then + TD_OS="Darwin" +else + OS=$(cat /etc/*-release | grep "^NAME=" | cut -d= -f2) + len=$(echo ${#OS}) + len=$((len-2)) + TD_OS=$(echo -ne ${OS:1:${len}} | cut -d" " -f1) +fi + +unset LD_PRELOAD UNAME_BIN=`which uname` OS_TYPE=`$UNAME_BIN` NODE_NAME= EXEC_OPTON= CLEAR_OPTION="false" -while getopts "n:s:u:x:ct" arg +while getopts "n:s:u:x:cv" arg do case $arg in n) @@ -26,8 +38,8 @@ do c) CLEAR_OPTION="clear" ;; - t) - SHELL_OPTION="true" + v) + VALGRIND_OPTION="true" ;; u) USERS=$OPTARG @@ -40,7 +52,10 @@ do ;; esac done - +if [[ "$VALGRIND_OPTION" = "true" ]] && [[ "$TD_OS" == "Alpine" ]]; then + echo alpine skip valgrind + VALGRIND_OPTION="false" +fi SCRIPT_DIR=`dirname $0` cd $SCRIPT_DIR/../ SCRIPT_DIR=`pwd` @@ -55,11 +70,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` @@ -67,17 +78,17 @@ else BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2` fi -BUILD_DIR=$TAOS_DIR/$BIN_DIR/build +BUILD_DIR=$TAOS_DIR/$BIN_DIR SIM_DIR=$TAOS_DIR/sim NODE_DIR=$SIM_DIR/$NODE_NAME -EXE_DIR=$BUILD_DIR/bin +EXE_DIR=$BUILD_DIR/build/bin CFG_DIR=$NODE_DIR/cfg LOG_DIR=$NODE_DIR/log DATA_DIR=$NODE_DIR/data MGMT_DIR=$NODE_DIR/data/mgmt TSDB_DIR=$NODE_DIR/data/tsdb - +ASAN_DIR=$SIM_DIR/asan TAOS_CFG=$NODE_DIR/cfg/taos.cfg echo ------------ $EXEC_OPTON $NODE_NAME @@ -94,14 +105,15 @@ if [ "$CLEAR_OPTION" = "clear" ]; then fi if [ "$EXEC_OPTON" = "start" ]; then - echo "ExcuteCmd:" $EXE_DIR/taosd -c $CFG_DIR - - if [ "$SHELL_OPTION" = "true" ]; then + #echo "ExcuteCmd:" $EXE_DIR/taosd -c $CFG_DIR + if [ "$VALGRIND_OPTION" = "true" ]; then TT=`date +%s` - mkdir ${LOG_DIR}/${TT} - nohup valgrind --log-file=${LOG_DIR}/${TT}/valgrind.log --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 & + #mkdir ${LOG_DIR}/${TT} + echo "nohup valgrind --log-file=${LOG_DIR}/valgrind-taosd-${NODE_NAME}-${TT}.log --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all --num-callers=20 -v -v --workaround-gcc296-bugs=yes $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &" + nohup valgrind --log-file=${LOG_DIR}/valgrind-taosd-${NODE_NAME}-${TT}.log --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all --num-callers=20 -v -v --workaround-gcc296-bugs=yes $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 & else - nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 & + echo "nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &" + nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2> $ASAN_DIR/$NODE_NAME.asan & fi else diff --git a/tests/script/sh/exec_tarbitrator.sh b/tests/script/sh/exec_tarbitrator.sh index e985bd6585..eacf5fd226 100755 --- a/tests/script/sh/exec_tarbitrator.sh +++ b/tests/script/sh/exec_tarbitrator.sh @@ -51,11 +51,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` diff --git a/tests/script/sh/gpd.c b/tests/script/sh/gpd.c new file mode 100644 index 0000000000..2259efa64a --- /dev/null +++ b/tests/script/sh/gpd.c @@ -0,0 +1,46 @@ +#include +#include +#include +#ifdef LINUX +#include +#endif +#ifdef WINDOWS +#include +#endif +#include "taosudf.h" + +TAOS* taos = NULL; + +DLL_EXPORT int32_t gpd_init() { + return 0; +} + +DLL_EXPORT int32_t gpd_destroy() { + return 0; +} + +DLL_EXPORT int32_t gpd(SUdfDataBlock* block, SUdfColumn *resultCol) { + SUdfColumnMeta *meta = &resultCol->colMeta; + meta->bytes = 4; + meta->type = TSDB_DATA_TYPE_INT; + meta->scale = 0; + meta->precision = 0; + + SUdfColumnData *resultData = &resultCol->colData; + resultData->numOfRows = block->numOfRows; + for (int32_t i = 0; i < resultData->numOfRows; ++i) { + int64_t* calc_ts = (int64_t*)udfColDataGetData(block->udfCols[0], i); + char* varTbname = udfColDataGetData(block->udfCols[1], i); + char* varDbname = udfColDataGetData(block->udfCols[2], i); + + char dbName[256] = {0}; + char tblName[256] = {0}; + memcpy(dbName, varDataVal(varDbname), varDataLen(varDbname)); + memcpy(tblName, varDataVal(varTbname), varDataLen(varTbname)); + printf("%s, %s\n", dbName, tblName); + int32_t result = 0; + udfColDataSet(resultCol, i, (char*)&result, false); + } + + return 0; +} diff --git a/tests/script/sh/l2norm.c b/tests/script/sh/l2norm.c new file mode 100644 index 0000000000..8ccdffb8d6 --- /dev/null +++ b/tests/script/sh/l2norm.c @@ -0,0 +1,80 @@ +#include +#include +#include +#include + +#include "taosudf.h" + +DLL_EXPORT int32_t l2norm_init() { + return 0; +} + +DLL_EXPORT int32_t l2norm_destroy() { + return 0; +} + +DLL_EXPORT int32_t l2norm_start(SUdfInterBuf *buf) { + *(int64_t*)(buf->buf) = 0; + buf->bufLen = sizeof(double); + buf->numOfResult = 0; + return 0; +} + +DLL_EXPORT int32_t l2norm(SUdfDataBlock* block, SUdfInterBuf *interBuf, SUdfInterBuf *newInterBuf) { + double sumSquares = *(double*)interBuf->buf; + int8_t numNotNull = 0; + for (int32_t i = 0; i < block->numOfCols; ++i) { + SUdfColumn* col = block->udfCols[i]; + if (!(col->colMeta.type == TSDB_DATA_TYPE_INT || + col->colMeta.type == TSDB_DATA_TYPE_DOUBLE)) { + return TSDB_CODE_UDF_INVALID_INPUT; + } + } + for (int32_t i = 0; i < block->numOfCols; ++i) { + for (int32_t j = 0; j < block->numOfRows; ++j) { + SUdfColumn* col = block->udfCols[i]; + if (udfColDataIsNull(col, j)) { + continue; + } + switch (col->colMeta.type) { + case TSDB_DATA_TYPE_INT: { + char* cell = udfColDataGetData(col, j); + int32_t num = *(int32_t*)cell; + sumSquares += (double)num * num; + break; + } + case TSDB_DATA_TYPE_DOUBLE: { + char* cell = udfColDataGetData(col, j); + double num = *(double*)cell; + sumSquares += num * num; + break; + } + default: + break; + } + ++numNotNull; + } + } + + *(double*)(newInterBuf->buf) = sumSquares; + newInterBuf->bufLen = sizeof(double); + + if (interBuf->numOfResult == 0 && numNotNull == 0) { + newInterBuf->numOfResult = 0; + } else { + newInterBuf->numOfResult = 1; + } + return 0; +} + +DLL_EXPORT int32_t l2norm_finish(SUdfInterBuf* buf, SUdfInterBuf *resultData) { + if (buf->numOfResult == 0) { + resultData->numOfResult = 0; + return 0; + } + double sumSquares = *(double*)(buf->buf); + *(double*)(resultData->buf) = sqrt(sumSquares); + resultData->bufLen = sizeof(double); + resultData->numOfResult = 1; + return 0; +} diff --git a/tests/script/sh/move_dnode.sh b/tests/script/sh/move_dnode.sh deleted file mode 100755 index d3650c18ad..0000000000 --- a/tests/script/sh/move_dnode.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -echo "Executing move_dnode.sh" - -UNAME_BIN=`which uname` -OS_TYPE=`$UNAME_BIN` - -SCRIPT_DIR=`dirname $0` -cd $SCRIPT_DIR/../ -SCRIPT_DIR=`pwd` -echo "SCRIPT_DIR: $SCRIPT_DIR" - -IN_TDINTERNAL="community" -if [[ "$SCRIPT_DIR" == *"$IN_TDINTERNAL"* ]]; then - cd ../../.. -else - cd ../../ -fi - -TAOS_DIR=`pwd` -TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` - -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi - -if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then - BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` -else - BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2` -fi - -BUILD_DIR=$TAOS_DIR/$BIN_DIR/build - -SIM_DIR=$TAOS_DIR/sim - -NODE_DIR=$SIM_DIR/$NODE_NAME - -if [ -d "$SIM_DIR/$2" ];then - rm -rf $SIM_DIR/$2 -fi -mv $SIM_DIR/$1 $SIM_DIR/$2 - -if [[ $2 =~ "dnode2" ]];then - sed -i 's/serverPort 7100/serverPort 7200/g' $SIM_DIR/$2/cfg/taos.cfg - sed -i 's/dnode1/dnode2/g' $SIM_DIR/$2/cfg/taos.cfg - sed -i 's/7100/7200/g' $SIM_DIR/$2/data/dnode/dnodeEps.json -elif [[ $2 =~ "dnode4" ]];then - sed -i 's/serverPort 7100/serverPort 7400/g' $SIM_DIR/$2/cfg/taos.cfg - sed -i 's/dnode1/dnode4/g' $SIM_DIR/$2/cfg/taos.cfg - sed -i 's/7100/7400/g' $SIM_DIR/dnode2/data/dnode/dnodeEps.json - sed -i 's/7100/7400/g' $SIM_DIR/dnode3/data/dnode/dnodeEps.json - sed -i 's/7100/7400/g' $SIM_DIR/$2/data/dnode/dnodeEps.json -fi diff --git a/tests/script/sh/mv_old_data.sh b/tests/script/sh/mv_old_data.sh index 3f4be6714f..1a6bd22c62 100755 --- a/tests/script/sh/mv_old_data.sh +++ b/tests/script/sh/mv_old_data.sh @@ -20,11 +20,7 @@ fi TAOS_DIR=`pwd` TAOSD_DIR=`find . -name "taosd"|grep bin|head -n1` -if [[ "$OS_TYPE" != "Darwin" ]]; then - cut_opt="--field=" -else - cut_opt="-f " -fi +cut_opt="-f " if [[ "$TAOSD_DIR" == *"$IN_TDINTERNAL"* ]]; then BIN_DIR=`find . -name "taosd"|grep bin|head -n1|cut -d '/' ${cut_opt}2,3` diff --git a/tests/script/sh/prepare_udf.sh b/tests/script/sh/prepare_udf.sh old mode 100755 new mode 100644 index c197ccfa97..a856b96c98 --- a/tests/script/sh/prepare_udf.sh +++ b/tests/script/sh/prepare_udf.sh @@ -9,7 +9,5 @@ touch /tmp/normal gcc -g -O0 -fPIC -shared sh/sum_double.c -o /tmp/sum_double.so gcc -g -O0 -fPIC -shared sh/add_one.c -o /tmp/add_one.so -gcc -g -O0 -fPIC -shared sh/add_one_64232.c -o /tmp/add_one_64232.so -gcc -g -O0 -fPIC -shared sh/sub_one.c -o /tmp/sub_one.so gcc -g -O0 -fPIC -shared sh/demo.c -o /tmp/demo.so gcc -g -O0 -fPIC -shared sh/abs_max.c -o /tmp/abs_max.so diff --git a/tests/script/sh/sigint_stop_dnodes.sh b/tests/script/sh/sigint_stop_dnodes.sh new file mode 100755 index 0000000000..83a4f1c1d5 --- /dev/null +++ b/tests/script/sh/sigint_stop_dnodes.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +set +e +#set -x + +unset LD_PRELOAD +UNAME_BIN=`which uname` +OS_TYPE=`$UNAME_BIN` + +PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'` +echo "Killing taosd processes " $PID +while [ -n "$PID" ]; do + #echo "Killing taosd processes " $PID + kill $PID + PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'` +done diff --git a/tests/script/sh/stop_dnodes.sh b/tests/script/sh/stop_dnodes.sh index 4c6d8e0351..c63d6daf8a 100755 --- a/tests/script/sh/stop_dnodes.sh +++ b/tests/script/sh/stop_dnodes.sh @@ -1,5 +1,9 @@ #!/bin/sh +set +e +#set -x + +unset LD_PRELOAD UNAME_BIN=`which uname` OS_TYPE=`$UNAME_BIN` @@ -12,8 +16,9 @@ fi PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'` while [ -n "$PID" ]; do echo kill -9 $PID - pkill -9 taosd - echo "Killing processes locking on port 6030" + #pkill -9 taosd + kill -9 $PID + echo "Killing taosd processes" if [ "$OS_TYPE" != "Darwin" ]; then fuser -k -n tcp 6030 else @@ -22,15 +27,30 @@ while [ -n "$PID" ]; do PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'` done -PID=`ps -ef|grep -w tarbitrator | grep -v grep | awk '{print $2}'` +PID=`ps -ef|grep -w taos | grep -v grep | awk '{print $2}'` while [ -n "$PID" ]; do echo kill -9 $PID - pkill -9 tarbitrator + #pkill -9 taos + kill -9 $PID + echo "Killing taos processes" if [ "$OS_TYPE" != "Darwin" ]; then - fuser -k -n tcp 6040 + fuser -k -n tcp 6030 else - lsof -nti:6040 | xargs kill -9 + lsof -nti:6030 | xargs kill -9 fi - PID=`ps -ef|grep -w tarbitrator | grep -v grep | awk '{print $2}'` + PID=`ps -ef|grep -w taos | grep -v grep | awk '{print $2}'` done +PID=`ps -ef|grep -w tmq_sim | grep -v grep | awk '{print $2}'` +while [ -n "$PID" ]; do + echo kill -9 $PID + #pkill -9 tmq_sim + kill -9 $PID + echo "Killing tmq_sim processes" + if [ "$OS_TYPE" != "Darwin" ]; then + fuser -k -n tcp 6030 + else + lsof -nti:6030 | xargs kill -9 + fi + PID=`ps -ef|grep -w tmq_sim | grep -v grep | awk '{print $2}'` +done diff --git a/tests/script/sh/sub_one.c b/tests/script/sh/sub_one.c deleted file mode 100644 index f901dd72b9..0000000000 --- a/tests/script/sh/sub_one.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include - -typedef struct SUdfInit{ - int maybe_null; /* 1 if function can return NULL */ - int decimals; /* for real functions */ - long long length; /* For string functions */ - char *ptr; /* free pointer for function data */ - int const_item; /* 0 if result is independent of arguments */ -} SUdfInit; - -void sub_one(char* data, short itype, short ibytes, int numOfRows, long long* ts, char* dataOutput, char* interBUf, char* tsOutput, - int* numOfOutput, short otype, short obytes, SUdfInit* buf) { - int i; - int r = 0; - printf("sub_one input data:%p, type:%d, rows:%d, ts:%p,%lld, dataoutput:%p, tsOutput:%p, numOfOutput:%p, buf:%p\n", data, itype, numOfRows, ts, *ts, dataOutput, tsOutput, numOfOutput, buf); - if (itype == 4) { - for(i=0;i -#include -#include -#include - -typedef struct SUdfInit{ - int maybe_null; /* 1 if function can return NULL */ - int decimals; /* for real functions */ - int64_t length; /* For string functions */ - char *ptr; /* free pointer for function data */ - int const_item; /* 0 if result is independent of arguments */ -} SUdfInit; - -#define TSDB_DATA_INT_NULL 0x80000000L - - -void sum_double(char* data, short itype, short ibytes, int numOfRows, int64_t* ts, char* dataOutput, char* interBuf, char* tsOutput, - int* numOfOutput, short otype, short obytes, SUdfInit* buf) { - int i; - int64_t r = 0; - printf("sum_double input data:%p, type:%d, rows:%d, ts:%p,%"PRId64", dataoutput:%p, tsOutput:%p, numOfOutput:%p, buf:%p\n", data, itype, numOfRows, ts, *ts, dataOutput, tsOutput, numOfOutput, buf); - if (itype == 4) { - r=*(int64_t *)dataOutput; - *numOfOutput=0; - - for(i=0;iptr)=*(int64_t*)dataOutput*2; - *(int64_t*)dataOutput=*(int64_t*)(buf->ptr); - // printf("sum_double finalize, dataoutput:%"PRId64", numOfOutput:%d\n", *(int64_t *)dataOutput, *numOfOutput); -} - -void sum_double_merge(char* data, int32_t numOfRows, char* dataOutput, int* numOfOutput, SUdfInit* buf) { - int r = 0; - int64_t sum = 0; - - // printf("sum_double_merge numOfRows:%d, dataoutput:%p, buf:%p\n", numOfRows, dataOutput, buf); - for (int i = 0; i < numOfRows; ++i) { - // printf("sum_double_merge %d - %"PRId64"\n", i, *((int64_t*)data + i)); - sum +=*((int64_t*)data + i); - } - - *(int64_t*)dataOutput+=sum; - if (numOfRows > 0) { - *numOfOutput=1; - } else { - *numOfOutput=0; - } - - // printf("sum_double_merge, dataoutput:%"PRId64", numOfOutput:%d\n", *(int64_t *)dataOutput, *numOfOutput); -} - - -int sum_double_init(SUdfInit* buf) { - buf->maybe_null=1; - buf->ptr = malloc(sizeof(int64_t)); - // printf("sum_double init\n"); - return 0; -} - - -void sum_double_destroy(SUdfInit* buf) { - free(buf->ptr); - // printf("sum_double destroy\n"); -} \ No newline at end of file -- GitLab